專題3-嵌入式linux內(nèi)核制作

一猿涨、linux體系結(jié)構(gòu)

linux由內(nèi)核空間與用戶空間兩部分組成叽粹,用戶空間主要是應(yīng)用程序和C庫(kù)秘通,內(nèi)核空間包含了像系統(tǒng)調(diào)用接口铺浇,體系結(jié)構(gòu)相關(guān)的代碼痢畜。

現(xiàn)在的CPU實(shí)現(xiàn)了不同的工作模式,以ARM為例,實(shí)現(xiàn)了其中工作模式:

用戶模式(usr)丁稀、快速中斷(fiq)吼拥、外部中斷(irq)、管理模式(SVC)线衫、數(shù)據(jù)訪問(wèn)終止(abt)凿可、系統(tǒng)模式(sys)、未定義指令異常(und)授账。

X86也實(shí)現(xiàn)了四個(gè)不同的級(jí)別:Ring0-Ring3 枯跑。 Ring0下,可以執(zhí)行特權(quán)指令白热,可以訪問(wèn)IO設(shè)備等敛助,在Ring3則有很多限制。Linux系統(tǒng)利用了CPU的這一特性屋确,使用了其中的兩級(jí)來(lái)分別運(yùn)行l(wèi)inux內(nèi)核與應(yīng)用程序纳击,這樣使操作系統(tǒng)本身得到了充分保護(hù)。例如:如果使用X86攻臀,用戶代碼運(yùn)行在Ring3评疗,內(nèi)核代碼運(yùn)行在Ring0.

內(nèi)核空間與用戶空間是程序執(zhí)行的兩種不同的狀態(tài),通過(guò)系統(tǒng)調(diào)用和硬件中斷能夠完成從用戶空間到內(nèi)核空間的轉(zhuǎn)移茵烈。

linux 內(nèi)核架構(gòu)(這里用表模擬下)

System Call Interface
Porcess Management(PM) Virtual Files System(VFS)
Memory Managemet(MM) Network stack
ARCH Device Drivers(DD)

二、linux內(nèi)核源代碼

2.1 源代碼下載

www.kernel.org   官網(wǎng)進(jìn)行下載即可

2.2 目錄結(jié)構(gòu)(樹(shù)形結(jié)構(gòu))

arch目錄:architecture的縮寫砌些。內(nèi)核所支持的每種CPU體系呜投,在該目錄下都有對(duì)應(yīng)的子目錄。每個(gè)CPU的子目錄存璃,又進(jìn)一步分解為boot仑荐,mm,kernel等目錄纵东,分別包含控制系統(tǒng)引導(dǎo)粘招,內(nèi)存管理,系統(tǒng)調(diào)用等偎球。

document目錄:內(nèi)核的文檔部分

drivers目錄:設(shè)備的驅(qū)動(dòng)程序目錄

include目錄:內(nèi)核所需要的頭文件洒扎。與平臺(tái)無(wú)關(guān)的頭文件在 include/linux 子目錄下,與平臺(tái)相關(guān)的頭文件在相應(yīng)的子目錄中衰絮。

fs目錄:存放各種文件系統(tǒng)的實(shí)現(xiàn)代碼袍冷。每個(gè)子目錄對(duì)應(yīng)一種文件系統(tǒng)的實(shí)現(xiàn),公用的源程序用于實(shí)現(xiàn)虛擬文件系統(tǒng)VFS:

||--devpts  /dev/pts 虛擬文件系統(tǒng)
||--ext2   第二擴(kuò)展文件系統(tǒng)
||--fat    MS的fat32文件系統(tǒng)
||--isofs   ISO9660光盤CD-ROM上的文件系統(tǒng)

net目錄:網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)代碼:

||--802     802無(wú)線通訊協(xié)議核心支持代碼
||--appletalk 與蘋果設(shè)備互聯(lián)協(xié)議
||--ax25    AX25無(wú)線Internet協(xié)議
||--bridge   橋接設(shè)備
||--ipv4    IP協(xié)議簇V4版32位尋址模式
||--ipv6    IP協(xié)議簇V6版128位尋址模式

三猫牡、linux內(nèi)核配置與編譯

配置內(nèi)核:硬件需求胡诗,軟件需求。

    make config   這種方法是采用文本模式的配置
    make menuconfig  這種是基于文本模式的菜單形配置

首選是采用菜單形配置(直觀、簡(jiǎn)單煌恢、高效)

使用make menuconfig 配置內(nèi)核

    Process type and features 
                -----Process family

    Networking support 
                -----Networking Options

    Devices Drivers
                -----Network device support
    
    File system

這里說(shuō)明下“[ ]”這種只有兩種選擇方式骇陈,有或者沒(méi)有。而“ < > ”這種有三種選擇方式瑰抵。

<M> 內(nèi)核模塊你雌,編譯成.ko 動(dòng)態(tài)調(diào)用。 “[]”直接便一道zImage內(nèi)核映像中谍憔。

源代碼的根目錄中.config文件保存了內(nèi)核配置結(jié)果匪蝙,在源代碼目錄中使用 # ls -a 進(jìn)行查看。

配置捷徑:①:使用已有的配置項(xiàng)來(lái)改习贫。 ②:不清楚的為默認(rèn)值逛球。

操作步驟如下:使用內(nèi)核配置文件簡(jiǎn)化配置,當(dāng)前l(fā)inux系統(tǒng)的配置文件在 /boot/config-xxxx苫昌,如果是使用紅帽6颤绕, 2.6.39內(nèi)核可以直接使用其進(jìn)行配置,將該 /boot/config-xxxx 文件復(fù)制到內(nèi)核源代碼祟身。并輸入以下命令

    make menuconfig   -> load an Alternate configuration File 

填寫剛剛復(fù)制的文件名字進(jìn)入奥务,保存后利用已經(jīng)有的配置文件進(jìn)行修改。
配置內(nèi)核實(shí)際上工作很多,但是如果有廠商之前給你做好了相關(guān)配置文件,比如我這里購(gòu)買的smart210,友善之臂提供了相關(guān)的配置文件名字叫 mini210_linux_defconfig(mini210和smart210基本一樣)這個(gè)文件,這個(gè)就是廠商配置文件,這里我的在內(nèi)核的根目錄下面,使用下面命令就可以直接使用該配置文件進(jìn)行編譯:

 cp mini210_linux_defconfig .config
 make uImage ARCH=arm CROSS_COMPILE=arm-linux-

這樣即可編譯成功,同樣還有一種方法簡(jiǎn)化內(nèi)核配置,在 內(nèi)核arch/arm/configs 中找到自己板子的默認(rèn)配置,基于這個(gè)配置進(jìn)行修改也是很好的,使用起來(lái)也很簡(jiǎn)單.

make xxx_defconfig
make menu_config ARCH=arm 
make uImage ARCH=arm CROSS_COMPILE=arm-linux-

3.1 編譯內(nèi)核

<*> -> zImage

[M] -> 內(nèi)核模塊

    make zImage   在X86平臺(tái)上袜硫,zImage內(nèi)核只能用于512KB的文件大小氯葬。
    //所以一般都用下面的
    make bzImage  

如果需要獲取詳細(xì)的編譯信息,可使用

    make zImage V=1
    make bzImage V=1 

編譯好的內(nèi)核在: arch/<cpu>/boot

3.2 編譯內(nèi)核模塊

    make modules    (大概一個(gè)小時(shí)時(shí)間婉陷,比較長(zhǎng))
    make modules_install 

編譯過(guò)后生成的文件遍布于各個(gè)目錄中帚称,凡是以 *.ko 結(jié)尾的都是內(nèi)核模塊

    make modules_install (將 *.ko 全部移動(dòng)到/lib/modules)
    這里是linux主機(jī)的/lib/不是源碼的目錄。

3.3 制作ramdisk

方法:mkinitrd initrd-$version $version

例:

    mkinitrd initrd-2.6.39 2.6.39
    // *$version 可以通過(guò)查詢 /lib/modules 下目錄得到秽澳。

3.4 安裝內(nèi)核(x86)

    cp arch/x86/boot/bzImage /boot/vmlinuz-$version
    cp initrd-$version /boot/
    修改 /etc/grub.conf

3.5 清理文件

    make clean  :清理 *.0 *.ko 等文件
    make distclean :在上面的基礎(chǔ)上

四闯睹、嵌入式linux內(nèi)核制作

4.1 清除相關(guān)文件

    make distclean

4.2 配置內(nèi)核

    make menuconfig   (x86)
    make menuconfig ARCH=arm  (ARM)

4.3 編譯內(nèi)核

    make bzImage (X86)
    make uImage ARCH=arm CROSS_COMPILE=arm-linux-

可能以上編譯或許過(guò)不去,可能是因?yàn)樵创a中有配置initramfs這個(gè)掛載根文件系統(tǒng)的担神,所以過(guò)不去楼吃,因?yàn)檫@里還沒(méi)有設(shè)置根文件系統(tǒng),同時(shí)可能還有一個(gè)問(wèn)題就是還缺少mkimage這個(gè)工具妄讯,需要從已經(jīng)編譯好的u-boot源碼中tools中拷貝使用:

    cp mkimage /bin/      這里注意是拷貝到宿主機(jī)中
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孩锡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捞挥,更是在濱河造成了極大的恐慌浮创,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砌函,死亡現(xiàn)場(chǎng)離奇詭異斩披,居然都是意外死亡溜族,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門垦沉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)煌抒,“玉大人,你說(shuō)我怎么就攤上這事厕倍」炎常” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵讹弯,是天一觀的道長(zhǎng)况既。 經(jīng)常有香客問(wèn)我,道長(zhǎng)组民,這世上最難降的妖魔是什么棒仍? 我笑而不...
    開(kāi)封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮臭胜,結(jié)果婚禮上莫其,老公的妹妹穿的比我還像新娘。我一直安慰自己耸三,他們只是感情好乱陡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著仪壮,像睡著了一般憨颠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上积锅,一...
    開(kāi)封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天烙心,我揣著相機(jī)與錄音,去河邊找鬼乏沸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爪瓜,可吹牛的內(nèi)容都是我干的蹬跃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼铆铆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蝶缀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起薄货,我...
    開(kāi)封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翁都,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后谅猾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體柄慰,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳍悠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坐搔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藏研。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖概行,靈堂內(nèi)的尸體忽然破棺而出蠢挡,到底是詐尸還是另有隱情,我是刑警寧澤凳忙,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布业踏,位于F島的核電站,受9級(jí)特大地震影響涧卵,放射性物質(zhì)發(fā)生泄漏勤家。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一艺演、第九天 我趴在偏房一處隱蔽的房頂上張望却紧。 院中可真熱鬧,春花似錦胎撤、人聲如沸晓殊。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巫俺。三九已至,卻和暖如春肿男,著一層夾襖步出監(jiān)牢的瞬間介汹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工舶沛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘹承,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓如庭,卻偏偏與公主長(zhǎng)得像叹卷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坪它,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 我們說(shuō)的Linux其實(shí)指的就是 內(nèi)核(kernel)而已骤竹。這個(gè)內(nèi)核控制你主機(jī)的所有硬件并提供系統(tǒng)所有的功能,所以它...
    Zhang21閱讀 7,391評(píng)論 0 18
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,146評(píng)論 2 34
  • 姓名:吳兆陽(yáng) 學(xué)號(hào):14020199009 轉(zhuǎn)自韋東山 嵌牛導(dǎo)讀:對(duì)嵌入式初學(xué)者往毡,沒(méi)有足夠的視野選擇一個(gè)合適投入方...
    吳兆陽(yáng)閱讀 2,380評(píng)論 0 4
  • Ubuntu的發(fā)音 Ubuntu罩息,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音挎狸。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 99,201評(píng)論 9 467
  • 對(duì)于有的人來(lái)說(shuō)扣汪,失眠意味著初入睡時(shí)的輾轉(zhuǎn)反側(cè)、難以成眠锨匆;對(duì)于有的人來(lái)說(shuō)崭别,意味著半夜時(shí)分半睡半醒之間那些散落在潛意識(shí)...
    心遠(yuǎn)軒閱讀 188評(píng)論 0 0