chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式未來還是Linux的天下,并通過內(nèi)核學(xué)習(xí)來闡述kernel的機(jī)理

Q4MP_gh_c472c21 ? 2018-01-24 08:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

首先闡述一下我為什么想學(xué)習(xí)一下Linux kernel。最早是因為對嵌入式的一時腦熱,我買了開發(fā)板,買了不少資料,前前后后投進(jìn)去了1000多了。不過好歹還是有點回報的,雖然還沒有怎么著調(diào),但又似乎拓寬了不小的知識面。

慢慢的我發(fā)現(xiàn),對于從學(xué)軟件入手的我來說,硬件知識的薄弱是個不容忽視的缺陷,畢竟軟硬件間的代溝還是不小的,就像現(xiàn)在的老爹和fashion閨女一樣,鴻溝還是忽視不得的。這有點讓我望而卻步,不過多大的困難都無法阻擋我的前進(jìn)啊。我對策略稍作調(diào)整,因為我發(fā)現(xiàn),嵌入式無論是現(xiàn)在,還是未來一段時間都還是Linux的天下;另外是真正的做Linux的大牛們似乎也都有涉足embedded system 的經(jīng)歷。這就使得僅僅會管理Linux系統(tǒng)和服務(wù),簡單的用幾個Shell commands ,編譯安裝幾個Linux應(yīng)用,讀懂幾個Makefile……根本滿足不了需求;另外也為了不讓學(xué)習(xí)的OS知識只是空洞的理論。這都要求著自己必須有編寫自己Shell程序的能力;要求著可以在Linux做程序開發(fā)的能力;要求著可以自己往kernel中附加自定義的系統(tǒng)調(diào)用、重組內(nèi)核、添加自寫驅(qū)動……的能力。這就要求著必須深入了解,正如任何一門技術(shù)一樣,接觸久了你就有種相地層實現(xiàn)挖掘的沖動。

調(diào)整后的策略就是先把Linux這個OS的機(jī)制弄明白,才可以遷移定制滿足需求的系統(tǒng),才可以寫出高效率的Linux應(yīng)用。整體路線就是農(nóng)村包圍城市,不斷補(bǔ)充必要知識,循序漸進(jìn),最終呈現(xiàn)星星之火可以燎原之勢。額,扯得夠遠(yuǎn)。廢話不多說,下面開始。

Kernel入門,要選本好的入門書籍,我從網(wǎng)上download一本《Linux內(nèi)核設(shè)計與實現(xiàn)》。這本書簡單易讀,有OS基礎(chǔ)和Linux應(yīng)用基礎(chǔ)的人一讀即懂,我現(xiàn)已閱過3章,感覺很不錯,另外配合《Linux操作系統(tǒng)內(nèi)核實習(xí)》效果更佳。我想盡可能通過更加通俗的形式向你闡述kernel的機(jī)理,讓我們一起如喝涼水般拿下kernel。

首先介紹一下內(nèi)核源碼的根目錄描述:

arch(architecture) 特定體系結(jié)構(gòu)的源碼

crypto crypto API

Documention 內(nèi)核源碼文檔

drivers 設(shè)備驅(qū)動程序

fs VFS和各種文件系統(tǒng)

include 內(nèi)核頭文件

init 內(nèi)核引導(dǎo)和初始化

ipc 進(jìn)程間通訊代碼

kernel 像調(diào)度程序這樣的核心子系統(tǒng)

lib 通用內(nèi)核函數(shù)

mm 內(nèi)存管理子系統(tǒng)和VM

net 網(wǎng)絡(luò)子系統(tǒng)

scripts 編譯內(nèi)核所用到的腳本

security Linux安全模塊

sound 語音子系統(tǒng)

usr 早期用戶空間代碼(所謂的initramfs)

這里只是簡單闡述個目錄及系統(tǒng)模塊分布。隨著慢慢地學(xué)習(xí)我相信一定可以把它們搞明白是怎么一回事的。

另外,你需要明白一些Linux必備的一些常識性名詞解釋知識,這里羅列一些名詞,不明白的不再一一闡述,自己百度,Google:管態(tài)、目態(tài)、內(nèi)核空間、用戶空間、POSIX、system V、GNU、GPL、GNOME、KDE、QT、GTK+、openGL、shell、awk、Makefile、CC、GCC、G++、GDB、Perl……

下面來介紹一下內(nèi)核開發(fā)和應(yīng)用程序開發(fā)的差別:

內(nèi)核編程時不能訪問C庫(因為Linux下很多C庫函數(shù)是對Linux系統(tǒng)調(diào)用的封裝,自身怎么可以調(diào)用自身呢?)

內(nèi)核編程時必須使用GNU C。

內(nèi)核編程時缺乏像用戶空間那樣的內(nèi)存保護(hù)機(jī)制。

內(nèi)核編程時浮點數(shù)很難使用。

內(nèi)核只有一個很小的定長堆棧。

由于內(nèi)核支持異步中斷、搶占和SMP,因此必須時刻注意同步和并發(fā)。

要考慮可移植性的重要性。

對以上這幾點進(jìn)行描述。

1、首先就是內(nèi)核不能訪問C庫的問題,你想啊Linux下很多C庫函數(shù)是對Linux系統(tǒng)調(diào)用的封裝,自身怎么可以調(diào)用自身呢?這里的系統(tǒng)調(diào)用學(xué)過OS的應(yīng)該都清楚,是系統(tǒng)應(yīng)用給用戶提供的編程接口,注意這里的對象是用戶。注意啦,程序員也是分等級的,在kernel級別的編程(這里指純kernel編程),你已經(jīng)看不到系統(tǒng)調(diào)用,此時你的職責(zé)可能就是為系統(tǒng)添加一個系統(tǒng)調(diào)用(后邊會講到),且C庫是應(yīng)用層對底層系調(diào)(系統(tǒng)調(diào)用,為了便于我打字,后邊可能會多次出現(xiàn))的封裝,從邏輯的角度你也該明白了吧。那么問題就出來了,沒有c庫怎么辦,還談什么模塊化,難不成都自己寫?這就是接下來的問題。

2、既然kernel不能調(diào)用C庫,那么它就得擁有自己獨立的c語言庫,這樣才能高內(nèi)聚低耦合,并且提升其安全性,所以就用了GNU C 。短小精悍效率高,畢竟是專才專用。這里需要注意一點,內(nèi)核中沒有實現(xiàn)printf();但是有功能更為強(qiáng)大的printk();其實也談不上功能強(qiáng)大(因為printf()本身就很強(qiáng)大,尤其是在調(diào)試時,這里也顯出了printk的優(yōu)勢),它和printf()的顯著區(qū)別就是printk()允許通過指定一個標(biāo)志來設(shè)置優(yōu)先級。Syslog會根據(jù)這個優(yōu)先級標(biāo)志來決定什么地方顯示這條系統(tǒng)消息。如:

printk( KERN_ERR “This is an error!”); //不理解吧,我也不理解,后邊內(nèi)核調(diào)試時肯定還會將這東西,不怕。

3、內(nèi)核編程時缺乏像用戶空間那樣的內(nèi)存保護(hù)機(jī)制。

你在做什么?內(nèi)核好不好,這是一個OS的核心部分,控制著整個系統(tǒng)的運(yùn)轉(zhuǎn),自然要有處理協(xié)調(diào)整個系統(tǒng)的權(quán)利,在內(nèi)核coding的東西就是OS核心的一部分,是給別人或者自己在OS的上一層用的。既然你是把握這一切的,且又是在硬件基礎(chǔ)上的第一層抽象,另外還把握著全局,內(nèi)存的控制自然也不能束縛你,就像在公司工作一樣,領(lǐng)導(dǎo)要在可能的范圍內(nèi)盡可能的下放權(quán)力,下屬才能發(fā)揮他的極致,估計kernel也是這樣,內(nèi)存訪問,包括其他的內(nèi)核結(jié)構(gòu)都不對出于內(nèi)核的你進(jìn)行束縛,當(dāng)然也沒有進(jìn)行相應(yīng)的保護(hù)機(jī)制。因為這是的內(nèi)核是你的,你沒必要***到寫程序讓自己的系統(tǒng)崩潰吧,哈哈。這也留了一個問題,就是在coding過程中要斟酌好啊。

4、內(nèi)核編程時浮點數(shù)很難使用。這里你需要知道的是在用戶空間的進(jìn)程進(jìn)行浮點操作時,kernel會完成從整數(shù)到浮點數(shù)的模式轉(zhuǎn)換,一般是通過捕獲陷阱并作相應(yīng)的處理的實現(xiàn)的。//陷阱可以算是一種特殊的異常,是從用戶態(tài)進(jìn)入內(nèi)核態(tài)的途徑,以后會進(jìn)一步介紹。

與用戶空間不同的是,kernel并不能完美的支持浮點操作,因為自身不能陷入自身。在kernel中使用浮點數(shù)時,除了要人工保存和恢復(fù)浮點寄存器,還有很多瑣碎的事要做。直截了的說就是:不要在kernel中使用浮點數(shù)!??!

5、內(nèi)核只有一個很小的定長堆棧。在x86上,kernel的棧是在編譯時配置的,可為4k或者8k,且每個處理器都有自己的棧。為什么這么小呢?大了不可以么?我的理解是,現(xiàn)在都在追求微內(nèi)核,這是一方面原因,還有就是內(nèi)核也是一個軟件,只不過是包含了硬件抽象且富含大量系統(tǒng)管理功能的進(jìn)程,而其他功能的進(jìn)程(系統(tǒng)調(diào)用,其他內(nèi)核進(jìn)程),在調(diào)度是,存在內(nèi)核搶占和代替內(nèi)核執(zhí)行的情況,這是要將要執(zhí)行的進(jìn)程的上下文切換過來,當(dāng)然這些數(shù)據(jù)都會出現(xiàn)在棧里邊,你想如果棧很大,那么操作時內(nèi)存訪問地址會很長,訪問時占內(nèi)存且費(fèi)時間,會降低效率,所以要盡可能的小且靈活……

6、由于內(nèi)核支持異步中斷、搶占和SMP,因此必須時刻注意同步和并發(fā)。這不僅僅是linux kernel ,是所有現(xiàn)有的多進(jìn)程/多線程并發(fā)OS都要注意的,包括多線程編程也一樣,你就把kernel想成是一個多線程的執(zhí)行程序就OK了,不難理解。

7、要考慮可移植性的重要性。這個更不用多說了,因為這是linux的一個灰常顯著的特征,大到企業(yè)的服務(wù)器,小到嵌入式的android,IP camera……等很多東西不同平臺構(gòu)架的cpu……應(yīng)該是目前跑的平臺最多的OS了,所以他的內(nèi)核要有足夠的可移植性,似乎有點java的感覺......

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5186

    文章

    20135

    瀏覽量

    328498
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    4

    文章

    1436

    瀏覽量

    42474
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11626

    瀏覽量

    217849
  • Kernel
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    11984

原文標(biāo)題:嵌入式未來一段時間還是Linux天下,一位嵌入式er初探Linux kernel經(jīng)驗

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    學(xué)習(xí)嵌入式LINUX的筆記和體會

    結(jié)構(gòu)的模式學(xué)習(xí)嵌入式linux將會是我們認(rèn)識更清晰,簡單可行使應(yīng)用具有彈性。 快速入門 最簡單的建立
    發(fā)表于 06-23 18:37

    嵌入式開發(fā)板的學(xué)習(xí)方法

    ,C語言編程基礎(chǔ),就可以學(xué)習(xí)嵌入式linux的基本框架了, 學(xué)習(xí)路線:單片機(jī),C語言編程基礎(chǔ)Linux基礎(chǔ)框架:(BootloaderKer
    發(fā)表于 03-30 17:21

    作為新人要如何學(xué)習(xí)嵌入式Linux

    作為新人,要如何學(xué)習(xí)嵌入式Linux?首先您要具備基本的C語言基礎(chǔ),然后,您要想好學(xué)習(xí)嵌入式Linux
    發(fā)表于 11-08 09:27

    如何通過網(wǎng)絡(luò)升級嵌入式系統(tǒng)的linux內(nèi)核

    通過網(wǎng)絡(luò)升級嵌入式系統(tǒng)的linux內(nèi)核1、首先修改u-boot分配兩個kernel分區(qū),kernel
    發(fā)表于 12-16 06:48

    嵌入式Linux內(nèi)核實時性研究及改進(jìn)

    分析了嵌入式Linux 存在實時性缺陷的原因,從Linux 調(diào)度機(jī)制入手提出了可行的改進(jìn)方案,詳細(xì)闡述了代碼實現(xiàn)。經(jīng)測試,改進(jìn)后的
    發(fā)表于 07-30 10:13 ?8次下載

    嵌入式linux學(xué)習(xí)誤區(qū)

      隨著計算機(jī)嵌入式的普遍應(yīng)用,越來越多的人選擇投向嵌入式領(lǐng)域,但嵌入式學(xué)習(xí)有接一些誤區(qū),接下來尚觀教育小編分析一下同學(xué)們的幾種常見的嵌入式
    發(fā)表于 08-30 17:04 ?709次閱讀

    嵌入式Linux系統(tǒng)和驅(qū)動開發(fā)

    開發(fā)。  學(xué)完這些知識點通過相關(guān)實驗驗證后,嵌入式Linux系統(tǒng)和驅(qū)動的開發(fā)就算掌握了差不多了,能夠勝任絕大部分基于linux平臺的驅(qū)動開
    發(fā)表于 10-11 11:11 ?1113次閱讀

    嵌入式linux內(nèi)核的編譯步驟

    編譯嵌入式Linux內(nèi)核都是通過make的不同命令實現(xiàn)的,它的執(zhí)行配置文件是Makefile。Linu
    發(fā)表于 06-19 09:30 ?3229次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>內(nèi)核</b>的編譯步驟

    嵌入式Linux內(nèi)核驅(qū)動開發(fā)學(xué)習(xí)路線圖

    嵌入式Linux內(nèi)核驅(qū)動開發(fā)學(xué)習(xí)路線圖(嵌入式開發(fā)軟件工程師)-嵌入式
    發(fā)表于 07-30 13:51 ?12次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>驅(qū)動開發(fā)<b class='flag-5'>學(xué)習(xí)</b>路線圖

    嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試

    嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試(嵌入式開發(fā)和硬件開發(fā))-嵌入式
    發(fā)表于 07-30 13:55 ?10次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>LINUX</b>系統(tǒng)<b class='flag-5'>內(nèi)核</b>和<b class='flag-5'>內(nèi)核</b>模塊調(diào)試

    嵌入式】構(gòu)建嵌入式Linux系統(tǒng)(uboot、內(nèi)核、文件系統(tǒng))

    嵌入式Linux系統(tǒng)知識架構(gòu)及層次嵌入式Linux系統(tǒng)構(gòu)成及啟動略析嵌入式Linux三劍客之ub
    發(fā)表于 10-20 18:20 ?42次下載
    【<b class='flag-5'>嵌入式</b>】構(gòu)建<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>系統(tǒng)(uboot、<b class='flag-5'>內(nèi)核</b>、文件系統(tǒng))

    嵌入式Linux系統(tǒng)基礎(chǔ)概念

    進(jìn)行層次劃分。嵌入式Linux系統(tǒng)做模塊化處理就是可劃分為Bootloader(引導(dǎo)程序),Kernel(內(nèi)核),fs(文件系統(tǒng)),Shell(命令行界面),Gui(圖形庫)和 Emb
    發(fā)表于 10-20 21:51 ?1次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>系統(tǒng)基礎(chǔ)概念

    Linux嵌入式學(xué)習(xí)過程

    Linux嵌入式學(xué)習(xí)過程循序漸進(jìn)學(xué)習(xí)嵌入式開發(fā)技術(shù)一、練好基本功二、嵌入式
    發(fā)表于 10-21 11:07 ?6次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>嵌入式</b><b class='flag-5'>學(xué)習(xí)</b>過程

    嵌入式Linux內(nèi)核編譯

    實驗環(huán)境VMware Workstation PlayerUbuntu16.04kernel-3.2.tar.bz2Linux內(nèi)核編譯在ubuntu上編譯嵌入式Linux
    發(fā)表于 11-01 17:07 ?19次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)核</b>編譯

    學(xué)習(xí)嵌入式的開發(fā)線路,新手怎么學(xué)習(xí)嵌入式?

    作為新人,要如何學(xué)習(xí)嵌入式Linux?首先您要具備基本的C語言基礎(chǔ),然后,您要想好學(xué)習(xí)嵌入式Linux
    發(fā)表于 11-03 14:21 ?12次下載
    <b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>嵌入式</b>的開發(fā)線路,新手怎么<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>嵌入式</b>?