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

Linux內(nèi)核高手煉成記

系統(tǒng) Linux
一個(gè)Linux內(nèi)核高手是如何煉成的?我曾經(jīng)問(wèn)別人如何開(kāi)始內(nèi)核編程的學(xué)習(xí),本文列舉了一些可行的方法,他們是有關(guān)操作系統(tǒng)和Linux內(nèi)核是怎樣在你的項(xiàng)目里工作的,而且還很有趣,分享給小伙伴們。

我曾經(jīng)問(wèn)別人如何開(kāi)始內(nèi)核編程的學(xué)習(xí),他們基本上都說(shuō):①如果你不需要了解內(nèi)核是如何為你工作的,你為何要嘗試呢?②你應(yīng)該訂閱Linux內(nèi)核郵件列表,然后努力去理解。③如果你不去編寫(xiě)針對(duì)Linux內(nèi)核的代碼,你就是在浪費(fèi)時(shí)間。

這些對(duì)我一點(diǎn)兒幫助都沒(méi)有。所以我在這里列舉了一些可行的方法,他們是有關(guān)操作系統(tǒng)和Linux內(nèi)核是怎樣在你的項(xiàng)目里工作的,而且還很有趣。雖然我知道得并不多,但至少比我做這些之前了解了更多。

對(duì)于下面這幾個(gè)途徑,你只需要了解一些C語(yǔ)言和匯編語(yǔ)言(至少要會(huì)復(fù)制粘貼)。我會(huì)寫(xiě)一些小的C程序,還會(huì)用匯編來(lái)上課,雖然這些我都忘得差不多了。

方法一:編寫(xiě)你自己的操作系統(tǒng)

這看起來(lái)是一個(gè)相當(dāng)可怕的方法。但事實(shí)上并不是!我是從rustboot這個(gè)項(xiàng)目開(kāi)始的,重要的是它已經(jīng)可以工作了。然后我會(huì)做一些簡(jiǎn)單的事情,比如讓屏幕由紅色變?yōu)樗{(lán)色,打印字符到屏幕,持續(xù)獲取鍵盤(pán)中斷來(lái)工作。

MikeOS是我另一個(gè)有趣的開(kāi)始。請(qǐng)記住,你的操作系統(tǒng)沒(méi)有必要做得很大很專(zhuān)業(yè)——如果你能夠讓它把屏幕顏色由紅色變?yōu)樽仙蛘咦屗蛴∫皇滓暎憔退愠晒α恕?/p>

你一定會(huì)想使用一個(gè)仿真器去運(yùn)行你的操作系統(tǒng),比如qemuOSDev wiki同樣是一個(gè)很有用的網(wǎng)站——上面有很多你會(huì)碰到的常見(jiàn)的問(wèn)題。

方法二:編寫(xiě)寫(xiě)一些內(nèi)核模塊!

如果你已經(jīng)準(zhǔn)備運(yùn)行Linux了,那么再寫(xiě)一些內(nèi)核模塊就會(huì)是相當(dāng)相當(dāng)容易的,即使他們什么都不會(huì)做。

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

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

方法三:參加一次Linux內(nèi)核實(shí)習(xí)!

Linux內(nèi)核團(tuán)隊(duì)參與了GNOME女性拓展實(shí)習(xí)項(xiàng)目。它是驚人、奇妙并且令人非常愉快的一個(gè)活動(dòng)。這意味著,如果你是一個(gè)女人并且愿意花費(fèi)三個(gè)月時(shí)間在內(nèi)核開(kāi)發(fā)上,你就能參與內(nèi)核的開(kāi)發(fā),并且不需要任何的經(jīng)驗(yàn),還能得到一些報(bào)酬(5000美元)。在Kernel Newbies上有關(guān)于它的介紹。

如果你對(duì)此感興趣,那會(huì)是非常值得去申請(qǐng)的——你能夠?yàn)閮?nèi)核做一個(gè)格式化的補(bǔ)丁,這非常有趣。Sarah Sharp是一個(gè)Linux內(nèi)核開(kāi)發(fā)人員,她在協(xié)調(diào)這個(gè)活動(dòng)而且她本人也是非常熱心的。你可以閱讀她的這篇博客文章,講述了在第一輪里137個(gè)補(bǔ)丁是怎樣被允許加入到內(nèi)核中去的。這些補(bǔ)丁也將會(huì)是你提供的!查看申請(qǐng)說(shuō)明

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

方法四:閱讀內(nèi)核源碼

這聽(tīng)起來(lái)像是最糟糕的建議——“想要去了解內(nèi)核是如何工作的就去看源代碼,太蠢了”

但事實(shí)上這個(gè)方法是非常有趣。你并不需要了解一切東西。當(dāng)遇到無(wú)法理解的東西時(shí),我就會(huì)感到無(wú)能為力,但是我告訴人們的時(shí)候,每個(gè)人都會(huì)說(shuō):“嗯,這就是傳說(shuō)中的Linux內(nèi)核,你不能理解很正常!”

我的朋友Dave最近給了我一個(gè)網(wǎng)站LXR,在里面你可以閱讀到內(nèi)核的資源,而且還提供了大量有用的引用鏈接。比如,如果你想要了解chmod這個(gè)命令的系統(tǒng)調(diào)用,你可以在the chmod_common definition頁(yè)面看到有關(guān)于它在Linux內(nèi)核里的定義!

這里是部分chmod_common的部分代碼,其中有一些我寫(xiě)的注釋?zhuān)?/p>

  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.     // 互斥鎖!避免出現(xiàn)沖突現(xiàn)象!=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); // 完成時(shí)就解除互斥鎖 
  24.     mnt_drop_write(path->mnt); // ??? 
  25.     return error; 
 

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

總結(jié)幾個(gè)鏈接:

“這本書(shū)會(huì)教你怎樣編寫(xiě)你自己的驅(qū)動(dòng)和怎樣入侵與內(nèi)核相關(guān)的地方”

  • 如果你在寫(xiě)一個(gè)操作系統(tǒng),OSDev wiki是一個(gè)不錯(cuò)的網(wǎng)站
  • Kernel Newbies有一些給內(nèi)核開(kāi)發(fā)新手的資源,雖然在它的聊天室里我有一些不爽的經(jīng)歷。
  • Sarah Sharp是一個(gè)內(nèi)核開(kāi)發(fā)人員,負(fù)責(zé)Linux內(nèi)核的對(duì)外服務(wù),是非常好的一個(gè)女人。

原文鏈接: Julia Evans   翻譯: 伯樂(lè)在線(xiàn) - haofly

責(zé)任編輯:黃丹 來(lái)源: 伯樂(lè)在線(xiàn)
相關(guān)推薦

2011-01-04 17:00:32

Linux內(nèi)核編譯

2009-02-23 13:05:32

程序員學(xué)習(xí)方法

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內(nèi)核

2009-12-23 17:17:55

Linux高手

2015-12-09 09:23:21

數(shù)據(jù)中心霧霾灰塵

2010-03-02 09:17:32

Linux local

2016-11-08 11:06:20

2021-03-29 12:35:04

Kubernetes環(huán)境TCP

2014-07-29 15:44:33

Linux內(nèi)核Crash

2018-05-18 09:07:43

Linux內(nèi)核內(nèi)存

2021-05-19 07:56:26

Linux內(nèi)核搶占

2013-11-25 14:07:11

Linux內(nèi)核內(nèi)核特性

2013-11-07 13:59:56

Linux內(nèi)核

2013-11-05 09:58:39

Linux內(nèi)核
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产免费一区二区 | 国产欧美二区 | 精品国产精品三级精品av网址 | jizz中国日本 | 欧美五月婷婷 | 亚洲精品在线免费播放 | 精品亚洲一区二区 | 成人av资源在线 | 国产电影一区二区在线观看 | 久久国产精品一区 | 九九久久这里只有精品 | 欧美日韩精品影院 | 欧美多人在线 | 男女羞羞视频在线免费观看 | 国产精品久久久久久亚洲调教 | 可以免费观看的av | 成人午夜激情 | 免费av观看 | 美女逼网站 | 日韩国产中文字幕 | 亚洲欧美视频 | 午夜爱爱网 | 欧美一区二区在线播放 | 午夜在线视频 | 欧美日韩高清一区二区三区 | 91精品国产91久久久久久最新 | 欧美激情精品久久久久 | 一区二区三区在线 | 国产精品一区二区三 | 好好的日在线视频 | 国产乱码精品一区二区三区五月婷 | 中文字幕乱码一区二区三区 | 国产精品18hdxxxⅹ在线 | 狠狠撸在线视频 | 97国产精品 | 在线观看成人小视频 | 欧美激情国产精品 | 美女二区 | 亚洲电影第1页 | 91精品国产综合久久精品 | 午夜影院网站 |