<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > uclinux內核配置與裁減

uclinux內核配置與裁減

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

本文引用地址:http://dyxdggzs.com/article/201808/388125.htm


起始內核線(xiàn)程init的任務(wù)依然是初始化,只不過(guò)是一種更高層次的初始化。


函數do_basic_setup()是init進(jìn)程中最重要的函數,與嵌入式系統關(guān)系最緊密的是其中的do_initcalls()函數,該函數與設備驅動(dòng)程序加載有關(guān)。

函數prepare_namespace()函數主要目的是準備好系統的命名空間,其中最重要的函數是mount_root(),其功能是掛載根文件系統。

四個(gè)run_init_process()函數查找init進(jìn)程程序并嘗試執行。如果沒(méi)有找到一個(gè)可以執行的init程序,則報告錯誤“Noinit found”。

C,初始化設備驅動(dòng)

參考B中的do_basic_setup()函數。

D,掛接根文件系統

參考B中的prepare_namespace()函數。

E, 啟動(dòng)用戶(hù)空間init進(jìn)程

當內核掛載了根文件系統后,內核的啟動(dòng)工作就全部結束了,但系統還不能正常啟動(dòng)起來(lái),因為還需要通過(guò)根文件系統上的init程序來(lái)完成一下最后的設置工作。這個(gè)init程序一般在/sbin、/etc或/bin目錄下。

三,裁減內核(不帶根文件系統)并燒寫(xiě)到flash中:

該步承接上步的工作。由于上步已經(jīng)做了一定的裁減,該步只需要在此基礎上進(jìn)一步裁減即可。該步工作相對叫簡(jiǎn)單,只需要將不需要的驅動(dòng)選項取消即可,當然要注意保證內核的依賴(lài)關(guān)系。

我們的flash容量為512KB,u-boot占有64KB空間,剩下的只有448KB。另外,根文件系統大約還需要100KB空間,所以?xún)群舜笮∫刂圃?50KB以?xún)?。我們先嘗試將不需要的驅動(dòng)和選項全部取消,讓內核運行起來(lái)。

在“二,配置并在RAM中運行內核(不帶根文件系統)”的基礎上,我們進(jìn)一步刪除的驅動(dòng)包括:

l 取消“Loadble module support”支持

l 取消“Block layer”支持

l 取消“Bus options”所有支持

l 取消“Power management options”支持

l 取消“CPU Frequency scaling”支持

l 取消“Profiling Support”支持

l 取消“Security options”支持

l 取消“Cryptographic options”支持

l 取消除了串口和MTD以外的所有硬件驅動(dòng)支持

l 取消內部RTC驅動(dòng)

l 取消對ELF格式文件支持

取消以上選項后,內核可以控制在350KB以?xún)攘?。所以,不需進(jìn)一步修改Makefile來(lái)裁減內核了。這樣就可以下載并燒寫(xiě)到flash內保存了。

四,配置應用程序和裁減根文件系統:

根文件系統掛載到內核有兩種基本方式:獨立于內核存放通過(guò)MTD分區識別并掛載和鏈接到內核數據段通過(guò)ramdisk掛載(兩種方式都是我自己概括的,可能描述上有些不盡合理,僅供參考)。不論那種方式,都需要MTD驅動(dòng)支持,所以?xún)群艘С諱TD并配置正確,保持華恒源碼包原MTD配置即可。

HHBF5XX 的Linux BSP 使用ext2 格式的ramdisk 作為根文件系統,直接鏈接到內核數據段,所以這里介紹這種方式。另一種方式這里不作介紹,其相關(guān)資料更豐富。

與根文件系統(ramfs)相關(guān)的鏈接內容如下,位于文件/linux-2.6.x/arch/Blackfin/Kernel/vmlinux.lds.S中。


內核通過(guò)__initramfs_start和__initramfs_end找到根文件系統的img,這兩個(gè)變量在文件/linux-2.6.x/init/Initramfs.c中被引用。

介紹完根文件系統的掛載方式,我們來(lái)介紹如何配置和裁減應用程序。

由于flash容量限制,而且我們也并不需要很多應用程序的支持,所以我們可以只保留最簡(jiǎn)單的init、sh、ls、cd等應用程序,其他應用全部裁減掉。注意必須保證要有init和sh,否則內核無(wú)法運行或沒(méi)有shell界面。另外,為了進(jìn)一步裁減體積,我們利用busybox制作根文件系統,busybox的介紹文檔網(wǎng)上非常多,這里不再介紹。

按照以上分析,我們來(lái)配置應用程序和busybox。

按照“一,配置并在RAM中運行內核(不帶根文件系統)”中介紹的方法進(jìn)入應用程序配置頁(yè)。只需選中Busybox內的BusyboxSVN,其余選項全部取消,完全用busybox代替。

然后,我們來(lái)配置busybox。進(jìn)入busybox目錄,運行配置命令:

#cd user/busybox-svn

#make menuconfig

除了按照我們上面介紹的,保留最基本的應用程序之外,其他全部取消;還有一點(diǎn)需要特別注意。就是在“Build options”選擇中選中編譯成靜態(tài)庫,而不要編譯成共享庫,這樣在根文件系統掛載時(shí)省去很多麻煩,雖然最后得到的內核體積會(huì )稍微增大一下。共享庫的應用可以在內核運行成功后,進(jìn)一步學(xué)習。

這樣配置得到的根文件系統已經(jīng)裁減了很大體積,但下載到SDRAM中運行時(shí)會(huì )發(fā)現根文件系統占有的內存空間仍然很大,始終保持12.5MB空間。這是因為,根文件系統的運行空間是在生成鏡像時(shí)指定的。要裁減占有的內存空間,可以如下修改。

#vi vender/HHTech/BF533-HHBF/Makefile

修改第14行的“BLOCKS = 12800”為較小的值,比如說(shuō)4096等,必須是256的整數倍,否則內核運行時(shí)根文件系統報錯。這樣修改后,根文件系統占有的flash和SDRAM空間都會(huì )相應減小。

通過(guò)以上裁減后,帶有根文件系統的內核鏡像完全可以控制在448KB以?xún)?,下載保存到flash后運行,你就可以看到可愛(ài)的“”歡迎界面了。



關(guān)鍵詞: 內核配置 uClinux

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>