<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          嵌入式Linux底層系統(tǒng)包含哪些東西?

          共 2185字,需瀏覽 5分鐘

           ·

          2021-02-23 11:29

          關(guān)注、星標公眾號,直達精彩內(nèi)容

          ID:技術(shù)讓夢想更偉大

          來源:網(wǎng)絡(luò)素材


          嵌入式LINUX里含有bootloader, 內(nèi)核, 驅(qū)動程序、根文件系統(tǒng)這4大塊。

          一、bootloader

          它就是一個稍微復(fù)雜的裸板程序。但是要把這裸板程序看懂寫好一點都不容易。Windows下好用的工具弱化了我們的編程能力。很多人一玩嵌入式就用ADS、KEIL。能回答這幾個問題嗎?

          Q:
          一上電,CPU從哪里取指令執(zhí)行?

          A:
          一般從Flash上指令。

          Q:
          但是Flash一般是只能讀不能直接寫的,如果用到全局變量,這些全局變量在哪里?

          A:
          全局變量應(yīng)該在內(nèi)存里。

          Q:
          那么誰把全局變量放到內(nèi)存里去?

          A:
          長期用ADS、KEIL的朋友,你能回答嗎?這需要"重定位"。在ADS或KEIL里,重定位的代碼是制作這些工具的公司幫你寫好了。你可曾去閱讀過?

          Q:
          內(nèi)存那么大,我怎么知道把"原來存在Flash上的內(nèi)容"讀到內(nèi)存的"哪個地址去"?

          A:
          這個地址用"鏈接腳本"決定,在ADS里有scatter文件,KEIL里也有類似的文件。但是,你去研究過嗎?

          Q:
          你說重定位是把程序從Flash復(fù)制到內(nèi)存,那么這個程序可以讀Flash???

          A:
          是的,要能操作Flash。當然不僅僅是這些,還有設(shè)置時鐘讓系統(tǒng)運行得更快等等。

          先自問自答到這里吧,對于bootloader這一個裸板程序,其實有3部分要點:

          ①對硬件的操作

          對硬件的操作,需要看原理圖、芯片手冊。這需要一定的硬件知識,不要求能設(shè)計硬件,但是至少能看懂; 不求能看懂模擬電路,但是要能看懂數(shù)字電路。這方面的能力在學(xué)校里都可以學(xué)到,<微機原理>、<數(shù)字電路>這2本書就足夠了。想速成的話,就先放掉這塊吧,不懂就GOOGLE、發(fā)貼。另外,芯片手冊是肯定要讀的,別去找中文的,就看英文的。開始是非常痛苦,以后就會發(fā)現(xiàn)那些語法、詞匯一旦熟悉后,讀任何芯片手冊都很容易。

          ②對ARM體系處理器的了解

          對ARM體系處理器的了解,可以看杜春蕾的<ARM體系架構(gòu)與編程>,里面講有匯編指令,有異常模式、MMU等。也就這3塊內(nèi)容需要了解。

          ③程序的基本概念:重定位、棧、代碼段數(shù)據(jù)段BSS段等

          程序的基本概念,王道當然是去看<編譯原理>了??上?,這類書絕對是天書級別的。若非超級天才還是別去看了??梢钥错f東山的<嵌入式Linux應(yīng)用開發(fā)完全手冊>。

          對于bootloader,可以先看<ARM體系架構(gòu)與編程>,然后自己寫程序把各個硬件的實驗都做一遍,比如GPIO、時鐘、SDRAM、UART、NAND。把它們都弄清楚了,組臺在一起就很容易看懂u-boot了 。

          總結(jié)一下,看懂硬件原理圖、看芯片手冊,這都需要自己去找資料。

          二、內(nèi)核

          想速成的人,先跨過內(nèi)核的學(xué)習(xí),直接學(xué)習(xí)怎么寫驅(qū)動。
          想成為高手,內(nèi)核必須深刻了解。注意,是了解,要對里面的調(diào)度機制、內(nèi)存管理機制、文件管理機制等等有所了解。

          推薦兩本書:

          1. 通讀<linux內(nèi)核完全注釋>,請看薄的那本
          2. 選讀<Linux內(nèi)核情景分析>, 想了解哪一塊就讀哪一節(jié)

          三、驅(qū)動

          驅(qū)動包含兩部分:硬件本身的操作、驅(qū)動程序的框架。
          又是硬件,還是要看得懂原理圖、讀得懂芯片手冊,多練吧。

          ①硬件本身的操作

          說到驅(qū)動框架,有一些書介紹一下。LDD3,即<Linux設(shè)備驅(qū)動>,老外寫的那本,里面介紹了不少概念,值得一讀。但是,它的作用 也就限于介紹概念了。入門之前可以用它來熟悉一下概念。

          ②驅(qū)動程序的框架

          驅(qū)動方面比較全的介紹,應(yīng)該是宋寶華的<linux設(shè)備驅(qū)動開發(fā)詳解>了。要想深入了解某一塊,<Linux內(nèi)核情景分析>絕對是超5星級推薦。別指望把它讀完,1800多頁,上下兩冊呢。某一塊不清楚時,就去翻一下它。任何一部分,這書都可以講上2、3百頁,非常詳細。并且是以某個目標來帶你分析內(nèi)核源碼。它以linux2.4為例,但是原理相通,同樣適用于其它版本的linux。

          把手上的開發(fā)板所涉及的硬件,都去嘗試寫一個驅(qū)動吧。有問題就先"痛苦地思考",思考的過程中會把很多不相關(guān)的知識串聯(lián)起來,最終貫通。

          四、根文件系統(tǒng)

          大家有沒有想過這2個問題:?

          Q:
          對于Linux做出來的產(chǎn)品,有些用作監(jiān)控、有些做手機、有些做平板。那么內(nèi)核啟動后,掛載根文件系統(tǒng)后,應(yīng)該啟動哪一個應(yīng)用程序呢?

          A:
          內(nèi)核不知道也不管應(yīng)該啟動哪一個用戶程序。它只啟動init這一個應(yīng)用程序,它對應(yīng)/sbin/init。

          顯然,這個應(yīng)用程序就要讀取配置文件,根據(jù)配置文件去啟動用戶程序(監(jiān)控、手冊界面、平板界面等等,這個問題提示我們,文件系統(tǒng)的內(nèi)容是有一些約定的,比如要有/sbin/init,要有配置文件 。

          Q:
          你寫的hello,world程序,有沒有想過里面用到的printf是誰實現(xiàn)的?

          A:
          這個函數(shù)不是你實現(xiàn)的,是庫函數(shù)實現(xiàn)的。它運行時,得找到庫。

          這個問題提示我們,文件系統(tǒng)里還要有庫。

          簡單的自問自答到這里,要想深入了解,可以看一下busybox的init.c,就可以知道init進程做的事情了。

          當然,也可以看<嵌入式Linux應(yīng)用開發(fā)完全手冊>里構(gòu)建根文件系統(tǒng)那章。

          ???????????????? ?END ?????????????????

          掃描下方微信,加作者微信進技術(shù)交流群,請先自我介紹喔。



          推薦閱讀:


          嵌入式編程專輯
          Linux 學(xué)習(xí)專輯
          C/C++編程專輯
          Qt進階學(xué)習(xí)專輯
          關(guān)注微信公眾號『技術(shù)讓夢想更偉大』,后臺回復(fù)“m”查看更多內(nèi)容。

          長按前往圖中包含的公眾號關(guān)注

          瀏覽 41
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  又黄又爽的美女裸体视频十八禁亚洲 | 日韩一区二区三区免费播放 | 国产颜射| 国产高清无码在线观看视频 | kaobishipin |