<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > uclinux啟動(dòng)過程詳細(xì)分析

          uclinux啟動(dòng)過程詳細(xì)分析

          作者: 時(shí)間:2018-08-31 來源:網(wǎng)絡(luò) 收藏

          CPU clock rate: 200 MHz

          本文引用地址:http://www.ex-cimer.com/article/201808/388126.htm

          開發(fā)板上所使用的CPU的主頻為200MHZ。

          DRAM size is 128MB (128MB/0MB)

          動(dòng)態(tài)內(nèi)存ram大小為128M。

          在嵌入式系統(tǒng)中使用DRAM內(nèi)存的設(shè)計(jì)比較廣泛。

          在uclinux的系統(tǒng)中,系統(tǒng)運(yùn)行時(shí)間較長后,會(huì)出現(xiàn)內(nèi)存碎片的問題,導(dǎo)致再分配大塊內(nèi)存時(shí)會(huì)失敗。這是在uclinux系統(tǒng)中經(jīng)常遇到的問題,解決的辦法通常有使用靜態(tài)內(nèi)存、應(yīng)用程序啟動(dòng)時(shí)預(yù)先分配大內(nèi)存、使用內(nèi)存池等。

          地址輔助說明:

          先說明一下內(nèi)存地址數(shù)字情況,主要是為了方便記憶。

          可以訪問的內(nèi)存為4G。0x40000000是1GB處;0x00040000是256K處,0x00020000是128K處,0x90000000是2GB多的地方。1M-》0x00100000, 2M-》0x00200000,8M-》0x00800000,16M-》0x01000000, 32M-》0x02000000,256M-》0x10000000,64K-》0x00010000,注意:rootfs并不是一個(gè)具體的文件系統(tǒng)類型,如jffs。它只是一個(gè)理論上的概念。在具體的嵌入系統(tǒng)實(shí)例中,可以將某種具體的文件系統(tǒng)設(shè)置為根文件系統(tǒng)rootfs,如我們可以設(shè)置romfs為根文件系統(tǒng),也可以設(shè)置jffs為根文件系統(tǒng)。

          這里的ROMFS只讀文件系統(tǒng)只是一種具體的文件系統(tǒng)類型,也是在嵌入系統(tǒng)中經(jīng)常使用到的類型。

          看完了上面的內(nèi)容,以后你對(duì)出現(xiàn)的類似“kernel Panic:VFS:Unable to mount root fs on 0:00”的含義應(yīng)該已經(jīng)了解了。其中“VFS:”就是虛擬文件系統(tǒng)管理器操作時(shí)的輸出信息了。

          File linux.bin.gz found

          linux kernel內(nèi)核文件名,它是在只讀文件系統(tǒng)romfs上的一個(gè)組成部分。

          Unzipping image from 0x4639DE60 to 0x90090000, size = 1316021

          將romfs中的linux kernel解壓縮到0x90090000,之后會(huì)從這個(gè)內(nèi)存地址啟動(dòng)內(nèi)核。romfs為壓縮格式文件,使用壓縮的只讀文件系統(tǒng),是為了保持制作出來的整 個(gè)系統(tǒng)所占用的flash空間減小。這個(gè)內(nèi)核的大小為1.3M左右,這也是目前大多數(shù)嵌入系統(tǒng)所使用的方法。

          Inptr = 0x00000014(20)Inflating……

          釋放……

          Outcnt = 0x0030e7c8(3205064)Final Inptr = 0x001414ad(1316013)Original CRC = 0xcbd73adbComputed CRC = 0xcbd73adb

          做釋放后的CRC檢查。

          Boot kernel at 0x90090000 with ROMFS at 0x46040000

          kernel已經(jīng)被從romfs中釋放到內(nèi)存地址0x90090000處,可以跳轉(zhuǎn)到此處啟動(dòng)kernel了,這里是指定的kernel的起始地址。

          Press ‘enter’ to boot

          系統(tǒng)等待啟動(dòng),后面將看到linux kernel的啟動(dòng)過程了。

          4K-》0x00001000這個(gè)是個(gè)快速記憶的方法,你可以根據(jù)地址中1的位置和其后0的個(gè)數(shù)來快速知道換算后的地址是在多少兆的地方。比如,1的后面5個(gè)0,代表1M的大小,6個(gè)0,代表16M,以此類推。

          ROMFS found at 0x46040000, Volume name = rom 43f291aa

          romfs,只讀文件系統(tǒng)所在的地址為:0x46040000 (flash映射后的第3分區(qū))。卷名為rom。

          romfs 和rootfs概念上有所區(qū)別。flash在內(nèi)存中的的起始地址為0x46000000,而ROMFS在flash分區(qū)上的起始位置為0x00040000,所以ROMFS在內(nèi)存地址中的位置就為0x46040000。這個(gè)細(xì)節(jié)的部分可以參考flash分區(qū)時(shí)的地方,Creating 3 MTD partitions。

          romfs中包括kernel和app應(yīng)用,不包括bootloader和firmware信息頭。romfs只讀文件系統(tǒng)里的內(nèi)容有很多種分類方法,我們可以將kernel和app同時(shí)放里面,作為根文件系統(tǒng)下的一個(gè)文件,也可以在flash上另外劃分區(qū)域來分別存放。

          *****************************************************************************

          第一節(jié):start_kernel

          Linux的源代碼可以從 www.kernel.org 得到,或者你可以查看linux代碼交叉引用網(wǎng)站:http://lxr.linux.no/ 進(jìn)行在線的代碼查看,這是一個(gè)很好的工具網(wǎng)站。

          在start_kernel中將調(diào)用到大量的init函數(shù),來完成內(nèi)核的各種初始化。如:

          圖 2:kernel start up初始化過程

          具體內(nèi)容可以參考[http://lxr.linux.no/source/init/main.c]

          Linux version 2.4.22-uc0 (root@local) (gcc version 2.95.3 20010315 (release)) #33 。?1…… 20 12:09:106

          上面的代碼輸出信息,是跟蹤linux代碼分析后得到的,進(jìn)入init目錄下的main.c的start_kernel啟動(dòng)函數(shù)。

          uclinux使用的是linux內(nèi)核版本為2.4.22。linux source code代碼中start_kernel中輸出的linux_banner信息。這個(gè)信息是每個(gè)linux kernel都會(huì)打印一下的信息,如果你沒有把這句去掉的話。

          Found bootloader memory map at 0x10000fc0.

          bootloader經(jīng)過內(nèi)存映射后的地址為:0x10000fc0, 按上面的地址換算方法,1后面有7個(gè)0,那么虛擬地址256M左右處。

          Processor: ARM pt110 revision 0

          pT110是ARM微處理器arm核的一種,另一種為pT100。此處為顯示ARM的類型。

          On node 0 totalpages: 20480

          zone(0): 20480 pages.

          zone(0): Set minimum memory threshold to 12288KB

          Warning: wrong zone alignment (0x90080000, 0x0000000c, 0x00001000)

          zone(1): 0 pages.

          zone(2): 0 pages.

          預(yù)留內(nèi)存大小,在節(jié)點(diǎn)0上總共20頁, zone(0) 設(shè)置最小內(nèi)存為12MB, zone(1)和zone(2)為0頁。警告:對(duì)齊不正確。

          Kernel command line: root=/dev/mtdblock3

          Kernel 啟動(dòng)命令設(shè)為:/dev/mtdblock3(在后面的說明中會(huì)看到mtdblock3是指的flash上的romfs分區(qū)。),用來指定根文件系統(tǒng)所在的位置,kernel會(huì)將塊設(shè)備mtdblock3當(dāng)作文件系統(tǒng)來處理。也就是說,內(nèi)核會(huì)根據(jù)上面的kernel命令行,知道只讀文件系統(tǒng)romfs將是 根文件系統(tǒng)rootfs。

          start_kernel(void) 中輸出的上面的這句信息。這行命令是在linux內(nèi)核啟動(dòng)過程中都會(huì)輸出的一句。

          Console: colour dummy device 80x30

          代碼中console_init()的輸出信息, 顯示控制臺(tái)屬性:一般使用VGA text console,標(biāo)準(zhǔn)是80 X 25行列的文本控制臺(tái),這里是對(duì)屬性進(jìn)行了設(shè)置。



          關(guān)鍵詞: uClinux cpu 控制器

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();