1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 2185字,需瀏覽 5分鐘

         ·

        2021-02-23 11:29

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

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

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


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

        一、bootloader

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

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

        A:
        一般從Flash上指令。

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

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

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

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

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

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

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

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

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

        ①對硬件的操作

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

        ②對ARM體系處理器的了解

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

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

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

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

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

        二、內(nèi)核

        想速成的人,先跨過內(nèi)核的學習,直接學習怎么寫驅(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ū)動方面比較全的介紹,應該是宋寶華的<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)后,應該啟動哪一個應用程序呢?

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

        顯然,這個應用程序就要讀取配置文件,根據(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應用開發(fā)完全手冊>里構(gòu)建根文件系統(tǒng)那章。

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

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



        推薦閱讀:


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

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

        瀏覽 41
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            韩国三级高潮做爰 | 友田真希一区二区 | 欧美性综合 | 狠狠草av| 性一交一乱一能一八一片 | 日韩精品免费一区二区中文字幕 | 免费无码在线 | 欧美日韩久久久 | A级毛片高清不卡视频免费观看 | 日本电影性生活1 |