成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux內核高手煉成記

系統 Linux
一個Linux內核高手是如何煉成的?我曾經問別人如何開始內核編程的學習,本文列舉了一些可行的方法,他們是有關操作系統和Linux內核是怎樣在你的項目里工作的,而且還很有趣,分享給小伙伴們。

我曾經問別人如何開始內核編程的學習,他們基本上都說:①如果你不需要了解內核是如何為你工作的,你為何要嘗試呢?②你應該訂閱Linux內核郵件列表,然后努力去理解。③如果你不去編寫針對Linux內核的代碼,你就是在浪費時間。

這些對我一點兒幫助都沒有。所以我在這里列舉了一些可行的方法,他們是有關操作系統和Linux內核是怎樣在你的項目里工作的,而且還很有趣。雖然我知道得并不多,但至少比我做這些之前了解了更多。

對于下面這幾個途徑,你只需要了解一些C語言和匯編語言(至少要會復制粘貼)。我會寫一些小的C程序,還會用匯編來上課,雖然這些我都忘得差不多了。

方法一:編寫你自己的操作系統

這看起來是一個相當可怕的方法。但事實上并不是!我是從rustboot這個項目開始的,重要的是它已經可以工作了。然后我會做一些簡單的事情,比如讓屏幕由紅色變為藍色,打印字符到屏幕,持續獲取鍵盤中斷來工作。

MikeOS是我另一個有趣的開始。請記住,你的操作系統沒有必要做得很大很專業——如果你能夠讓它把屏幕顏色由紅色變為紫色或者讓它打印一首視,你就算成功了。

你一定會想使用一個仿真器去運行你的操作系統,比如qemuOSDev wiki同樣是一個很有用的網站——上面有很多你會碰到的常見的問題。

方法二:編寫寫一些內核模塊!

如果你已經準備運行Linux了,那么再寫一些內核模塊就會是相當相當容易的,即使他們什么都不會做。

這里有一個能夠打印“Hello, hacker school!”到內核日志的模塊源代碼。它只有18行代碼。基本上你只需要編寫一個init進程和一個cleanup函數就可以了。我并不知道__init和_exit這兩個宏命令做了些什么,但是我會使用他們!

編寫一個有一定功能的內核模塊是比較難的。我做這個的時候,都是先決定要完成的功能(比如打印一個信息給每一個經過內核的數據包),然后回去閱讀一些Kernel Newbies上的東西,再大量地使用谷歌來搜索,再復制和粘貼大量的代碼來搞明白究竟該怎樣去編寫它。這里有幾個內核模塊的例子,我把他們放在了kernel-module-fun項目里。

方法三:參加一次Linux內核實習!

Linux內核團隊參與了GNOME女性拓展實習項目。它是驚人、奇妙并且令人非常愉快的一個活動。這意味著,如果你是一個女人并且愿意花費三個月時間在內核開發上,你就能參與內核的開發,并且不需要任何的經驗,還能得到一些報酬(5000美元)。在Kernel Newbies上有關于它的介紹。

如果你對此感興趣,那會是非常值得去申請的——你能夠為內核做一個格式化的補丁,這非常有趣。Sarah Sharp是一個Linux內核開發人員,她在協調這個活動而且她本人也是非常熱心的。你可以閱讀她的這篇博客文章,講述了在第一輪里137個補丁是怎樣被允許加入到內核中去的。這些補丁也將會是你提供的!查看申請說明

如果你不是一個女生,那么可以選擇Google Summer of Code這個相似的活動。(編注:這句話可能會引起女程序員的反感)

方法四:閱讀內核源碼

這聽起來像是最糟糕的建議——“想要去了解內核是如何工作的就去看源代碼,太蠢了”

但事實上這個方法是非常有趣。你并不需要了解一切東西。當遇到無法理解的東西時,我就會感到無能為力,但是我告訴人們的時候,每個人都會說:“嗯,這就是傳說中的Linux內核,你不能理解很正常!”

我的朋友Dave最近給了我一個網站LXR,在里面你可以閱讀到內核的資源,而且還提供了大量有用的引用鏈接。比如,如果你想要了解chmod這個命令的系統調用,你可以在the chmod_common definition頁面看到有關于它在Linux內核里的定義!

這里是部分chmod_common的部分代碼,其中有一些我寫的注釋:

  1. static int chmod_common(struct path *path, umode_t mode) 
  2.     struct inode *inode = path->dentry->d_inode; 
  3.     struct iattr newattrs; 
  4.     int error; 
  5.   
  6.     // 不知道這是在干什么 
  7.     error = mnt_want_write(path->mnt); 
  8.     if (error) 
  9.         return error; 
  10.   
  11.     // 互斥鎖!避免出現沖突現象!=D 
  12.     mutex_lock(&inode->i_mutex); 
  13.   
  14.     // 我猜這是在檢查是否能使用chmod 
  15.     error = security_path_chmod(path, mode); 
  16.     if (error) 
  17.         goto out_unlock; 
  18.     // 我猜這是在改變mode的值 
  19.     newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~IALLUGO); 
  20.     newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; 
  21.     error = notify_change(path->dentry, &newattrs); 
  22. out_unlock: 
  23.     mutex_unlock(&inode->i_mutex); // 完成時就解除互斥鎖 
  24.     mnt_drop_write(path->mnt); // ??? 
  25.     return error; 
 

我覺得這個過程是很有趣的,而且也幫助了我闡明了內核的意義。我發現我所閱讀的代碼大多都是生澀難懂的,但是也有一些(比如chmod的代碼)是可以理解的。

總結幾個鏈接:

“這本書會教你怎樣編寫你自己的驅動和怎樣入侵與內核相關的地方”

  • 如果你在寫一個操作系統,OSDev wiki是一個不錯的網站
  • Kernel Newbies有一些給內核開發新手的資源,雖然在它的聊天室里我有一些不爽的經歷。
  • Sarah Sharp是一個內核開發人員,負責Linux內核的對外服務,是非常好的一個女人。

原文鏈接: Julia Evans   翻譯: 伯樂在線 - haofly

責任編輯:黃丹 來源: 伯樂在線
相關推薦

2011-01-04 17:00:32

Linux內核編譯

2009-02-23 13:05:32

程序員學習方法

2015-08-06 21:00:43

華瑞

2014-06-09 12:55:01

2018-10-12 14:26:04

SparkSpark框架Scala

2021-03-05 07:14:08

Linuxcrashvmcore

2009-12-17 16:22:16

2014-08-13 13:22:28

CA TechnoloDevOps

2021-02-20 06:08:07

LinuxWindows內核

2009-12-23 17:17:55

Linux高手

2015-12-09 09:23:21

數據中心霧霾灰塵

2010-03-02 09:17:32

Linux local

2016-11-08 11:06:20

2021-03-29 12:35:04

Kubernetes環境TCP

2014-07-29 15:44:33

Linux內核Crash

2018-05-18 09:07:43

Linux內核內存

2013-11-25 14:07:11

Linux內核內核特性

2013-11-07 13:59:56

Linux內核

2021-05-19 07:56:26

Linux內核搶占

2013-11-05 09:58:39

Linux內核
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美黑人一区 | 久久在线精品 | 精品一区电影 | 国产自产21区 | 国产精品久久久久久久久免费软件 | 特黄特色大片免费视频观看 | 中文字幕在线观看www | 91精品在线播放 | 亚洲高清视频在线观看 | 久久久人成影片一区二区三区 | 国产精品揄拍一区二区 | 中文字幕在线视频免费观看 | 美女视频. | 另类专区成人 | 99pao成人国产永久免费视频 | 精品一级 | 在线视频一区二区三区 | 亚洲成人av在线播放 | 暖暖成人免费视频 | 精品国产18久久久久久二百 | 国产精品久久久久久福利一牛影视 | 亚洲成人午夜在线 | 精精国产视频 | 国产清纯白嫩初高生视频在线观看 | 91视频观看 | 日韩精品二区 | 九色视频网 | 久久鲁视频 | 久草视频观看 | 国产色片在线 | 日韩一二区 | 狠狠色香婷婷久久亚洲精品 | av激情在线| 麻豆亚洲 | aaaaaaa片毛片免费观看 | 情侣黄网站免费看 | 成人在线免费视频 | 日韩一区在线播放 | 免费黄色av | 国产精品日韩欧美一区二区三区 | 北条麻妃99精品青青久久 |