版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
在線教務(wù)輔導(dǎo)網(wǎng):教材其余課件及動(dòng)畫素材請(qǐng)查閱在線教務(wù)輔導(dǎo)網(wǎng)QQ:349134187或者直接輸入下面地址:1在線教務(wù)輔導(dǎo)網(wǎng):http://www.shangfuwang第五章嵌入式Linux啟動(dòng)引導(dǎo)程序、內(nèi)核、文件系統(tǒng)豐海2第五章嵌入式Linux啟動(dòng)引導(dǎo)程序、內(nèi)核、文件系統(tǒng)豐海2BootLoader的基本概念BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段引導(dǎo)系統(tǒng)啟動(dòng)的程序。通過這段小程序的作用是初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,并將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式世界,BootLoader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的,沒有Bootloader,嵌入式系統(tǒng)就不能啟動(dòng)。由于作者在這方面的功力還不夠,所以無法向讀者介紹針對(duì)TQ2440開發(fā)板的u-boot移植,只介紹一下u-boot的使用基礎(chǔ)和概念。Bootloader完成的主要功能就是將操作系統(tǒng)調(diào)進(jìn)內(nèi)存中執(zhí)行,然后將控制權(quán)交給操作系統(tǒng),嵌入式系統(tǒng)中常見的Bootloader有Vivi、Blob、Redboot、U-Boot等。3BootLoader的基本概念3內(nèi)核移植的平臺(tái)
1.
首先驗(yàn)證所下載內(nèi)核的完整性2.安裝編譯內(nèi)核時(shí)所需要的工具:3.編譯前的準(zhǔn)備4.內(nèi)核源代碼的修改修改平臺(tái)輸入時(shí)鐘\Makefile文件、機(jī)器代碼加入NANDFLASH的分區(qū)信息、添加內(nèi)核對(duì)yaffs2的支持、修改看門狗驅(qū)動(dòng)
5.輸入make進(jìn)行編譯4內(nèi)核移植的平臺(tái)1.首先驗(yàn)證所下載內(nèi)核的完整性2.安裝編fh@fh:~$gpg--verifylinux-.tar.bz2.signgpg:于2009年07月31日星期五07時(shí)13分44秒CST創(chuàng)建的簽名,使用DSA,鑰匙號(hào)517D0F0Egpg:完好的簽名,來自于“LinuxKernelArchivesVerificationKey<ftpadmin@>”gpg:警告:這把密鑰已經(jīng)被它的持有者吊銷了!gpg:這表明這個(gè)簽名有可能是偽造的。gpg:吊銷原因:密鑰已泄漏gpg:吊銷注釋:Keywasusedtoautosigning;autosigningserverwascompromised.gpg:警告:這把密鑰未經(jīng)受信任的簽名認(rèn)證!gpg:沒有證據(jù)表明這個(gè)簽名屬于它所聲稱的持有者。主鑰指紋:C75DC40A11D7AF889981ED5BC86BA06A517D0F0E如果主鑰指紋和ftpadmin@郵箱與/signature.html網(wǎng)站的信息一樣如圖5-1所示,則表示這個(gè)包是完整的。5fh@fh:~$gpg--verifylinux-2.66安裝編譯內(nèi)核時(shí)所需要的工具:fh@fh:~$sudoapt-getinstalllibncurses5-devfh@fh:~$sudoapt-getinstallncurses-docfh@fh:~$sudoapt-getinstallkernel-packagefh@fh:~$mkdir/home/fh/kernel(建立放置內(nèi)核的目錄)fh@fh:~$cplinux-.tar.bz2/home/fh/kernel(復(fù)制內(nèi)核)fh@fh:~$cd/home/fh/kernel、fh@fh:~/kernel$tarjxvflinux-.tar.bz2(解壓內(nèi)核)fh@fh:~/kernel$cd/home/fh/kernel/linux-(進(jìn)入內(nèi)核目錄,實(shí)際上源代碼是需要根據(jù)具體的硬件修改的,只是TQ2440的配套光盤中給的內(nèi)核源代碼已經(jīng)修改好了。)fh@fh:~/kernel/linux-$makeclean(清除以前的舊數(shù)據(jù))fh@fh:~/kernel/linux-$makemrproper(清理以前編譯時(shí)留下的臨時(shí)文件)7安裝編譯內(nèi)核時(shí)所需要的工具:fh@fh:~$mkdir/內(nèi)核源代碼的修改1.修改根目錄下的Makefile文件Linux內(nèi)核源碼目錄下的Makefile文件控制內(nèi)核的編譯,雖然我們?cè)趚86平臺(tái)上進(jìn)行編譯,但是我們的目標(biāo)平臺(tái)是ARM,故必須進(jìn)行交叉編譯,將編譯器改為arm-linux-,處理器的架構(gòu)改為arm。tq2440的配套光盤中給的內(nèi)核源代碼中的命令:viMakefile修改:(193行)ARCH=arm(194行)CROSS_COMPILE=arm-linux-原因:指明體系結(jié)構(gòu)為arm,采用的交叉編譯器為arm-linux-,一定要改完Makefile文件再執(zhí)行makemenuconfig,否則,默認(rèn)的配置平臺(tái)就是針對(duì)x86架構(gòu)的PC普通電腦。8內(nèi)核源代碼的修改1.修改根目錄下的Makefile文件82.修改平臺(tái)輸入時(shí)鐘命令:fh@fh:~/kernel/linux-$viarch/arm/mach-s3c2440/mach-smdk2440.c修改:(163行)smdk2440_map_io()中的s3c24xx_init_clocks(16934400)修為s3c24xx_init_clocks(12000000)原因:TQ2440開發(fā)板使用的是12MHz的外部時(shí)鐘。3.修改機(jī)器代碼命令:fh@fh:~/kernel/linux-$viarch/arm/tools/mach-types修改:(379行)s3c2440這一行最后的數(shù)字改為168原因:在內(nèi)核文件arch/arm/mach-s3c2440/mach-smdk2440.c中的MACHINE_START(S3C2440,”SMDK2440”)中要使用該機(jī)器碼,同時(shí)它還應(yīng)該與uboot中的機(jī)器碼一致,因?yàn)閡boot源碼中為168,所以要改成與uboot一致;92.修改平臺(tái)輸入時(shí)鐘3.修改機(jī)器代碼94.修改common-smdk.c文件,加入NANDFLASH的分區(qū)信息命令:fh@fh:~/kernel/linux-$viarch/arm/plat-s3c24xx/common-smdk.c1)修改內(nèi)容如下:(109行開始)staticstructmtd_partitionsmdk_default_nand_part[]={
[0]={
.name
="uboot",
.offset=0x00000000,
.size
=0x00040000,
},
[1]={
.name
="kernel",
.offset=0x00200000,
.size=0x00300000,
},
[2]={
.name
="yaffs2",
.offset=0x00500000,
.size
=MTDPART_SIZ_FULL
}};即將NANDflash分為3個(gè)分區(qū),名稱分別為uboot,kernel和yaffs2,偏移量分別為0,2M和5M,大小分別為256kb,3M和251M(MTDPART_SIZ_FULL就是剩余的全部空間),注意:大小必須為128KB的整數(shù)倍,這是和uboot相關(guān)的。104.修改common-smdk.c文件,加入NANDFL
2)
然后,修改同文件的下面代碼(140行)staticstructs3c2410_platform_nandsmdk_nand_info={
.tacls
=10,
.twrph0
=25,
.twrph1
=10,
.nr_sets=ARRAY_SIZE(smdk_nand_sets),
.sets
=smdk_nand_sets,};其中修改的值由NANDflash芯片手冊(cè)查詢得到的,簡(jiǎn)單的說,這些設(shè)置就是要按照NANDFLASH芯片的讀寫時(shí)序而已。11
2)
然后,修改同文件的下面代碼113)修改s3c2410.c文件fh@fh:~/kernel/linux-$vidrivers/mtd/nand/s3c2410.c最后,修改drivers/mtd/nand/s3c2410.c中752行s3c2410_nand_init_chip函數(shù)的語句改為(752行)chip->ecc.mode
=NAND_ECC_NONE;(原來為NAND_ECC_SOFT)這里不采用NANDflash的軟件ECC校驗(yàn)碼,因?yàn)樵诔跏蓟臅r(shí)候,uboot中有校驗(yàn)碼,然后在后面yaffs2文件系統(tǒng)內(nèi)核移植的時(shí)候,要選上采用S3C2440硬件校驗(yàn)碼。123)修改s3c2410.c文件12添加內(nèi)核對(duì)yaffs2的支持
YAFFS(YetAnotherFlashFileSystem)是專門為NANDFlash存儲(chǔ)器設(shè)計(jì)的嵌入式文件系統(tǒng),遵循GPL(GeneralPublicLicense)協(xié)議。在移植前,首先要為內(nèi)核添加yaffs2文件系統(tǒng)的支持,首先下載yaffs2文件系統(tǒng)的補(bǔ)丁,可到官方下載頁(yè)下載,但是現(xiàn)在都用git工具下載了。1)需要使用git工具,如果沒有安裝,請(qǐng)先輸入sudoapt-getinstallgit2)下載yaffs2補(bǔ)丁fh@fh:~/kernel$gitclonegit://www.aleph1.co.uk/yaffs2Cloningintoyaffs2...remote:Countingobjects:6875,done.remote:Compressingobjects:100%(4105/4105),done.remote:Total6875(delta5452),reused3478(delta2700)Receivingobjects:100%(6875/6875),3.40MiB|541KiB/s,done.Resolvingdeltas:100%(5452/5452),done.fh@fh:~/kernel$lslinux-linux-.tar.bz2.signyaffs213添加內(nèi)核對(duì)yaffs2的支持
YAFFS(YetAnoth3)給內(nèi)核打上yaffs2的補(bǔ)丁,先進(jìn)入yaffs2目錄,fh@fh:~/kernel$cdyaffs2輸入下面命令:fh@fh:~/kernel/yaffs2$./patch-ker.shcm/home/fh/kernel/linux-/Updating/home/fh/kernel/linux-//fs/KconfigUpdating/home/fh/kernel/linux-//fs/Makefile再進(jìn)入內(nèi)核根目錄的fs目錄,就可以看到一個(gè)yaffs2目錄,說明已經(jīng)為內(nèi)核打上了支持yaffs2的補(bǔ)丁。注意:以后的操作都是在內(nèi)核源代碼的根目錄下執(zhí)行的。143)給內(nèi)核打上yaffs2的補(bǔ)丁,146)修改看門狗驅(qū)動(dòng)drivers/watchdog/s3c2410_wdt.c程序修改如下加粗部分(49行)#defineCONFIG_S3C2410_WATCHDOG_ATBOOT(1)//啟動(dòng)看門狗,原來是(0)(50行)#defineCONFIG_S3C2410_WATCHDOG_DEFAULT_TIME(15)//設(shè)置時(shí)間默認(rèn)15秒沒喂狗,CPU就重啟(55行)staticintsoft_noboot=0;(56行)staticintdebug=0;
156)修改看門狗驅(qū)動(dòng)drivers/watchdog/s3c27.打補(bǔ)丁__gnu_mcount_nc_patch,解決EABI編譯器與arms3c2440處理器編譯錯(cuò)誤有興趣的讀者請(qǐng)參看以下網(wǎng)址,/ml/libc-ports/2008-04/msg00009.html__gnu_mcount_nc_patch.patch.gz腳本見配書光盤首先將__gnu_mcount_nc_patch.patch.gz腳本拷貝到內(nèi)核的根目錄下fh@fh:~/my_experiment/5$cp__gnu_mcount_nc_patch.patch.gzlinux-/fh@fh:~/my_experiment/5/linux-$gunzip-dc__gnu_mcount_nc_patch.patch.gz|patch-p1(注意:__gnu腳本最前面是兩個(gè)下劃線;-p1中的最后一個(gè)是數(shù)字1)patchingfilearch/arm/include/asm/ftrace.hpatchingfilearch/arm/kernel/armksyms.cpatchingfilearch/arm/kernel/entry-common.S167.打補(bǔ)丁__gnu_mcount_nc_patch,解決8.修改與網(wǎng)卡相關(guān)的兩個(gè)文件1)修改drivers/net/dm9000.c網(wǎng)卡驅(qū)動(dòng)文件①在原文件39行#include<asm/io.h>之后,但在#include"dm9000.h"之前,加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410)#include<mach/regs-mem.h>#endif②加入①的內(nèi)容后,在文件的1192行u32id_val之后,但在/*Initnetworkdevice*/之前,加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410) unsignedintoldval_bwscon=*(volatileunsignedint*)S3C2410_BWSCON; unsignedintoldval_bankcon4=*(volatileunsignedint*)S3C2410_BANKCON4;#endif178.修改與網(wǎng)卡相關(guān)的兩個(gè)文件17③在1208行dev_dbg(&pdev->dev,"dm9000_probe()\n");之后但在/*setupboardinfostructure*/之前,加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410) *((volatileunsignedint*)S3C2410_BWSCON)=(oldval_bwscon&~(3<<16))|S3C2410_BWSCON_DW4_16|S3C2410_BWSCON_WS4|S3C2410_BWSCON_ST4; *((volatileunsignedint*)S3C2410_BANKCON4)=0x1f7c;#endif18③在1208行dev_dbg(&pdev->dev,"④在1376行(注意TQ2440配套的移植手冊(cè)寫成1278行了) db->mii.mdio_write=dm9000_phy_write;之后,但在mac_src="eeprom";之前,加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410) printk("NowusethedefaultMACaddress:10:23:45:67:89:ab\n"); mac_src="EmbedSky"; ndev->dev_addr[0]=0x10; ndev->dev_addr[1]=0x23; ndev->dev_addr[2]=0x45; ndev->dev_addr[3]=0x67; ndev->dev_addr[4]=0x89; ndev->dev_addr[5]=0xab;#else19④在1376行(注意TQ2440配套的移植手冊(cè)寫成1278⑤在1410行 "setusingifconfig\n",ndev->name);這一行之后,但在platform_set_drvdata(pdev,ndev);這一行之前,加入以下加粗部分:#endif⑥在1424行out:之后,但在dev_err(db->dev,"notfound(%d).\n",ret);之前加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410) *(volatileunsignedint*)S3C2410_BWSCON=oldval_bwscon; *(volatileunsignedint*)S3C2410_BANKCON4=oldval_bankcon4;#endif20⑤在1410行 "setusingifconfig\2)編輯arch/arm/mach-s3c2440/mach-smdk2440.c文件加入dm9000的網(wǎng)卡信息①在第48行#include<plat/common-smdk.h>之后,但在staticstructmap_descsmdk2440_iodesc[]__initdata={之前,加入以下加粗部分:#include<linux/dm9000.h>②在// .lpcsel =((0xCE6)&~7)|1<<4,和};之后,就是在149,150這兩行之后但在staticstructplatform_device*smdk2440_devices[]__initdata={這一行之前,加入以下加粗部分:212)編輯arch/arm/mach-s3c2440/machstaticstructresources3c_dm9k_resource[]={[0]={.start =S3C2410_CS4,.end =S3C2410_CS4+3,.flags =IORESOURCE_MEM,},[1]={.start =S3C2410_CS4+4,.end =S3C2410_CS4+4+3,.flags =IORESOURCE_MEM,},[2]={.start =IRQ_EINT7,.end =IRQ_EINT7,.flags =IORESOURCE_IRQ|IRQF_TRIGGER_RISING,}};staticstructdm9000_plat_datas3c_dm9k_platdata={.flags =DM9000_PLATF_16BITONLY,};structplatform_devices3c_device_dm9000={.name ="dm9000",.id =0,.num_resources =ARRAY_SIZE(s3c_dm9k_resource),.resource =s3c_dm9k_resource,.dev ={.platform_data=&s3c_dm9k_platdata,}};22staticstructresources3c_dm9③在第191行&s3c_device_iis這一行之后,并在};這一行之前,加入以下加粗部分:&s3c_device_rtc,&s3c_device_dm9000,9.串口驅(qū)動(dòng)說明的內(nèi)核已經(jīng)支持UART0和UART1這兩個(gè)串口,不用修改;但是如果要支持UART2的話,請(qǐng)參考TQ2440的移植手冊(cè)進(jìn)行UART2串口的移植。23③在第191行&s3c_device_iis這一行之后,內(nèi)核的配置輸入makemenuconfig進(jìn)行內(nèi)核的配置,出現(xiàn)如圖所示的配置界面24內(nèi)核的配置輸入makemenuconfig進(jìn)行內(nèi)核的配置,首先加載內(nèi)核提供的默認(rèn)的針對(duì)s3c2410處理器的配置25首先加載內(nèi)核提供的默認(rèn)的針對(duì)s3c2410處理器的配置25BusyBox最初是由BrucePerens在1996年為DebianGNU/Linux安裝盤編寫的,其目標(biāo)是在一張軟盤上創(chuàng)建一個(gè)可引導(dǎo)的GNU/Linux系統(tǒng),Busybox是一個(gè)遵循GPLV2協(xié)議的開源項(xiàng)目。Busybox將眾多的Linux命令集合進(jìn)一個(gè)很小的可執(zhí)行程序中,BusyBox是為構(gòu)建內(nèi)存有限的嵌入式系統(tǒng)的優(yōu)秀工具。Busybox在編寫過程中對(duì)文件大小進(jìn)行了優(yōu)化,并考慮了系統(tǒng)資源有限的情況。與一般的GNU工具集動(dòng)輒幾MB的體積相比,動(dòng)態(tài)連接的Busybox只有幾百KB,即使靜態(tài)連接也只有1MB左右,一次有人將Busybox比喻成Linux工具中的瑞士軍刀,包括了一個(gè)大的工具集,但是有些根文件系統(tǒng)下的文件還是需要用戶自己來建立。BusyBox26BusyBox最初是由BrucePerens在19961下載busybox的源代碼busybox-1.19.4.tar.bz2及其對(duì)應(yīng)的驗(yàn)證文件2驗(yàn)證文件的完整性3解壓源代碼fh@fh:~/busybox$tarjxvfbusybox-1.19.4.tar.bz24進(jìn)入busybox源代碼目錄fh@fh:~/busybox$cdbusybox-1.19.4/5修改Makefile文件fh@fh:~/busybox/busybox-1.19.4$viMakefile修改164行為CROSS_COMPILE=arm-linux-//指定交叉編譯器arm-linux-修改190行為ARCH=arm//指定CPU類型為arm修改完后保存6配置busyboxfh@fh:~/busybox/busybox-1.19.4$makemenuconfig271下載busybox的源代碼busybox-1.19.4.t1下載busybox的源代碼busybox-1.19.4.tar.bz2及其對(duì)應(yīng)的驗(yàn)證文件/downloads/busybox-1.19.4.tar.bz2/downloads/busybox-1.00.tar.bz2.sign2驗(yàn)證文件的完整性busybox-1.19.4.tar.bz2.sign文件中含有MD5值和SHA1值MD5:9c0cae5a0379228e7b55e5b29528df8ebusybox-1.19.4.tar.bz2SHA1:5d7db83d8efbadc19c86ec236e673504bbf43517busybox-1.19.4.tar.bz2fh@fh:~/busybox$md5sumbusybox-1.19.4.tar.bz29c0cae5a0379228e7b55e5b29528df8ebusybox-1.19.4.tar.bz2fh@fh:~/busybox$sha1sumbusybox-1.19.4.tar.bz25d7db83d8efbadc19c86ec236e673504bbf43517busybox-1.19.4.tar.bz2281下載busybox的源代碼busybox-1.19.4.t3解壓源代碼fh@fh:~/busybox$tarjxvfbusybox-1.19.4.tar.bz24進(jìn)入busybox源代碼目錄fh@fh:~/busybox$cdbusybox-1.19.4/5修改Makefile文件fh@fh:~/busybox/busybox-1.19.4$viMakefile修改164行為CROSS_COMPILE=arm-linux-//指定交叉編譯器arm-linux-修改190行為ARCH=arm//指定CPU類型為arm修改完后保存293解壓源代碼296配置busyboxfh@fh:~/busybox/busybox-1.19.4$makemenuconfig出現(xiàn)如下圖所示Busybox的配置界面306配置busybox30創(chuàng)建需要的目錄fh@fh:~/busybox/busybox-1.19.4$cd_installfh@fh:~/busybox/busybox-1.19.4/_install$mkdir-pdevetchome/skylibmntoptprocrootsddisksystmpudiskvarwebusr/libusr/sharefh@fh:~/busybox/busybox-1.19.4/_install$chmod777home/skyopt:附加的軟件,空著。proc:用于提供內(nèi)核與進(jìn)程信息的虛擬文件系統(tǒng),空著。root:root用戶主目錄,空著。tmp:暫時(shí)性文件,空著。var:用于存放監(jiān)控程序和工具程序的可變數(shù)據(jù),空著。sys:系統(tǒng)信息與控制的虛擬文件系統(tǒng),mdev可能會(huì)在下面建立某些文件,空著。31創(chuàng)建需要的目錄fh@fh:~/busybox/busybo2.拷貝庫(kù)文件
(交叉編譯工具鏈放在目錄
/opt/EmbedSky/目錄)到_install/lib目錄下fh@fh:~/busybox/busybox-1.19.4/_install$cp-rf/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib/*so*lib-a3.將創(chuàng)建
etc/passwd文件fh@fh:~/busybox/busybox-1.19.4/_install$vietc/passwd加入以下一行root::0:0:root:/:/bin/sh以root登陸,不需要密碼即可登錄成功,4.將創(chuàng)建
etc/group文件fh@fh:~/busybox/busybox-1.19.4/_install$vietc/group加入以下一行root:*:0:322.拷貝庫(kù)文件
(交叉編譯工具鏈放在目錄
/opt/Emb5.將目錄busybox-1.19.4/examples/bootfloppy/etc下的所有文件和目錄拷貝到_install/etc目錄下。fh@fh:~/busybox/busybox-1.19.4/_install$cp-rf../examples/bootfloppy/etc/*etc/6.創(chuàng)建etc/inittab文件這個(gè)inittab文件是init的初始化配置文件,是系統(tǒng)啟動(dòng)后第一個(gè)訪問的腳本文件,后續(xù)的啟動(dòng)文件是由它指定。inittab文件中每一行的格式如下所示(Busybox源程序目錄下的example目錄下有詳盡的inittab文件范例):335.將目錄busybox-1.19.4/examples/下面給出一個(gè)開發(fā)板上的實(shí)際/etc/inittab例子:fh@fh:~/busybox/busybox-1.19.4/_install$vietc/inittab#/etc/inittab::sysinit:/etc/init.d/rcS#(指定系統(tǒng)的啟動(dòng)腳本為/etc/init.d/rcS,字段sysinit表明該腳本在系統(tǒng)啟動(dòng)后最先執(zhí)行,#并且只執(zhí)行一次)console::askfirst:-/bin/sh(指定打開一個(gè)shell/bin/sh)#(在console上啟動(dòng)shell,askfirst表明先輸出"Please
press
Enter
to
actvie
this
console",#等用戶輸入回車鍵之后才啟動(dòng)-/bin/sh。)::once:/usr/sbin/telnetd-l/bin/login(-l中的l是字母)::ctrlaltdel:/sbin/reboot#(表明當(dāng)按下Ctrl+Alt+Delete組合鍵時(shí),執(zhí)行/sbin/reboot。)::shutdown:/bin/umount-a-r#(指定關(guān)機(jī)時(shí)運(yùn)行umount命令卸載所有的文件系統(tǒng),如果卸載失敗,試圖以只讀方式重新掛載)然后修改該文件權(quán)限:chmod777inittab34下面給出一個(gè)開發(fā)板上的實(shí)際/etc/inittab例子:34創(chuàng)建etc/init.d/rcS腳本#!/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin//shell命令的搜索路徑runlevel=S//運(yùn)行在單用戶模式prevlevel=N//前一個(gè)級(jí)別為n表示沒有前一個(gè)級(jí)別umask022//權(quán)限位掩碼exportPATHrunlevelprevlevel//將設(shè)置的變量導(dǎo)出到環(huán)境中mount-a//將文件etc/fstab中指明的文件系統(tǒng)掛載到對(duì)應(yīng)掛載點(diǎn)上//掛載所有在/etc/fstab里面列出的文件系統(tǒng)mkdir-p/dev/ptsmount-tdevptsdevpts/dev/ptsecho/sbin/mdev>/proc/sys/kernel/hotplug//用mdev來處理內(nèi)核的熱插拔事件。mdev-s
//mdev
利用mdev.conf配置文件為插入的設(shè)備在/dev下創(chuàng)建設(shè)備節(jié)點(diǎn)文件。TQ2440_wdg&//執(zhí)行看門狗應(yīng)用程序,不讓CPU重啟ifconfiglo//配置回路為ifconfigeth0netmaskup//配置網(wǎng)卡IProuteadddefaultgw//配置網(wǎng)卡的路由/bin/hostname-F/etc/sysconfig/HOSTNAME//設(shè)置主機(jī)名
修改權(quán)限:chmod777etc/init.d/rcS35創(chuàng)建etc/init.d/rcS腳本#!/bin/sh358.創(chuàng)建etc/sysconfig/HOSTNAME文件fh@fh:~/busybox/busybox-1.19.4/_install$mkdiretc/sysconfigfh@fh:~/busybox/busybox-1.19.4/_install$vietc/sysconfig/HOSTNAME該文件中的內(nèi)容只有如下一行:TQ2440368.創(chuàng)建etc/sysconfig/HOSTNAME文件3創(chuàng)建etc/fstab文件fh@fh:~/busybox/busybox-1.19.4/_install$vietc/fstab#devicemount-pointtypeoptionsdumpfsckorderproc/procprocdefaults00tmpfs/tmptmpfsdefaults00sysfs/syssysfsdefaults00tmpfs/devtmpfsdefaults00var/devtmpfsdefaults00ramfs/devramfsdefaults0037創(chuàng)建etc/fstab文件fh@fh:~/busybox/b10.創(chuàng)建etc/mdev.conf文件vietc/mdev.confsd[a-z]*[0-9]0:00660@(mount-tvfat-oiocharset=utf8/dev/$MDEV/mnt/udisk)sd[a-z]*[0-9]0:00660*(umount/mnt/udisk)創(chuàng)建U盤的掛接點(diǎn)mkdirmnt/udisk11.創(chuàng)建etc/profile文件Shell啟動(dòng)過程中會(huì)根據(jù)文件etc/profile配置登陸環(huán)境,profile文件是終端登錄之后首先運(yùn)行的腳本,etc/profile配置的實(shí)例如下:fh@fh:~/busybox/busybox-1.19.4/_install$vietc/profileexportsetHOME=/rootUSER="`id-un`"LOGNAME=$USERPS1='[\u@\h\W]#'PATH=$PATHHOSTNAME=`/bin/hostname`exportUSERLOGNAMEPS1PATH3810.創(chuàng)建etc/mdev.conf文件11.創(chuàng)建etc12.創(chuàng)建etc/resolv.conf文件fh@fh:~/busybox/busybox-1.19.4/_install$vietc/resolv.confnameserver66nameserver//我的路由器地址3912.創(chuàng)建etc/resolv.conf文件3913.創(chuàng)建/dev目錄下所需要的節(jié)點(diǎn)文件目錄下建立節(jié)點(diǎn)文件/dev/console(終端),/dev/null(內(nèi)核“黑洞”)
在linux內(nèi)核源碼文件init/main.c中有打開設(shè)備文件dev/console的操作如下:static
noinline
int
init_post(void)__releases(kernel_lock){………………if
(sys_open((const
char
__user
*)
"/dev/console",
O_RDWR,
0)
<
0)printk(KERN_WARNING
"Warning:
unable
to
open
an
initial
console.\n");………………}內(nèi)核啟動(dòng)執(zhí)行到這里時(shí),mdev還沒有構(gòu)建dev目錄,如果沒有創(chuàng)建設(shè)備文件dev/console就將會(huì)打印警告Warning:
unable
to
open
an
initial
console。在內(nèi)核啟動(dòng)的過程中要將產(chǎn)生的一些垃圾信息丟棄就需要空設(shè)備dev/null。sudomknod-m660dev/consolec51sudomknod-m660dev/nullc134013.創(chuàng)建/dev目錄下所需要的節(jié)點(diǎn)文件401.編寫看門狗應(yīng)用程序TQ2440_wdg.cfh@fh:~/busybox/busybox-1.19.4/_install$viTQ2440_wdg.cTQ2440_wdg.c的完整源代碼如下:#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<linux/watchdog.h>intmain(intargc,char**argv){intfd=0;fd=open("/dev/watchdog",O_RDONLY);if(fd<0){perror("cannotopenwatchdogdevicefile/dev/watchdog");return-1;} for(;;){ioctl(fd,WDIOC_KEEPALIVE);sleep(3);//每隔3秒鐘喂狗一次,不讓看門狗重啟CPU } close(fd);return0;}411.編寫看門狗應(yīng)用程序TQ2440_wdg.c412.交叉編譯看門狗應(yīng)用程序fh@fh:~/busybox/busybox-1.19.4/_install$arm-linux-gccTQ2440_wdg.c-oTQ2440_wdg3.拷貝可執(zhí)行的看門狗程序到/bin目錄下fh@fh:~/busybox/busybox-1.19.4/_install$cpTQ2440_wdgbin/4.使用TQ2440配套的yaffs文件系統(tǒng)制作工具將_install目錄制作成根文件系統(tǒng)fh@fh:~/busybox/busybox-1.19.4/_install$cd..fh@fh:~/busybox/busybox-1.19.4$mkyaffs2image_installroot.binfh@fh:~/busybox/busybox-1.19.4$chmod755root.binfh@fh:~/busybox/busybox-1.19.4$cproot.bin/home/fh/tftpboot/5.通過tftp將root.bin根文件系統(tǒng)燒寫進(jìn)TQ2440開發(fā)板的NANDflash中,燒寫過程參考第一章,記得先將啟動(dòng)開關(guān)打到NOR.422.交叉編譯看門狗應(yīng)用程序4.使用TQ2440配套的ya將啟動(dòng)開關(guān)撥回到NAND,啟動(dòng)TQ2440開發(fā)板就能從串口的minicom中看到如圖所示的開發(fā)板登錄界面,回車就直接進(jìn)入系統(tǒng)。
43將啟動(dòng)開關(guān)撥回到NAND,啟動(dòng)TQ2440開發(fā)板就能從串口的在線教務(wù)輔導(dǎo)網(wǎng):教材其余課件及動(dòng)畫素材請(qǐng)查閱在線教務(wù)輔導(dǎo)網(wǎng)QQ:349134187或者直接輸入下面地址:44在線教務(wù)輔導(dǎo)網(wǎng):http://www.shangfuwang第五章嵌入式Linux啟動(dòng)引導(dǎo)程序、內(nèi)核、文件系統(tǒng)豐海45第五章嵌入式Linux啟動(dòng)引導(dǎo)程序、內(nèi)核、文件系統(tǒng)豐海2BootLoader的基本概念BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段引導(dǎo)系統(tǒng)啟動(dòng)的程序。通過這段小程序的作用是初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,并將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式世界,BootLoader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的,沒有Bootloader,嵌入式系統(tǒng)就不能啟動(dòng)。由于作者在這方面的功力還不夠,所以無法向讀者介紹針對(duì)TQ2440開發(fā)板的u-boot移植,只介紹一下u-boot的使用基礎(chǔ)和概念。Bootloader完成的主要功能就是將操作系統(tǒng)調(diào)進(jìn)內(nèi)存中執(zhí)行,然后將控制權(quán)交給操作系統(tǒng),嵌入式系統(tǒng)中常見的Bootloader有Vivi、Blob、Redboot、U-Boot等。46BootLoader的基本概念3內(nèi)核移植的平臺(tái)
1.
首先驗(yàn)證所下載內(nèi)核的完整性2.安裝編譯內(nèi)核時(shí)所需要的工具:3.編譯前的準(zhǔn)備4.內(nèi)核源代碼的修改修改平臺(tái)輸入時(shí)鐘\Makefile文件、機(jī)器代碼加入NANDFLASH的分區(qū)信息、添加內(nèi)核對(duì)yaffs2的支持、修改看門狗驅(qū)動(dòng)
5.輸入make進(jìn)行編譯47內(nèi)核移植的平臺(tái)1.首先驗(yàn)證所下載內(nèi)核的完整性2.安裝編fh@fh:~$gpg--verifylinux-.tar.bz2.signgpg:于2009年07月31日星期五07時(shí)13分44秒CST創(chuàng)建的簽名,使用DSA,鑰匙號(hào)517D0F0Egpg:完好的簽名,來自于“LinuxKernelArchivesVerificationKey<ftpadmin@>”gpg:警告:這把密鑰已經(jīng)被它的持有者吊銷了!gpg:這表明這個(gè)簽名有可能是偽造的。gpg:吊銷原因:密鑰已泄漏gpg:吊銷注釋:Keywasusedtoautosigning;autosigningserverwascompromised.gpg:警告:這把密鑰未經(jīng)受信任的簽名認(rèn)證!gpg:沒有證據(jù)表明這個(gè)簽名屬于它所聲稱的持有者。主鑰指紋:C75DC40A11D7AF889981ED5BC86BA06A517D0F0E如果主鑰指紋和ftpadmin@郵箱與/signature.html網(wǎng)站的信息一樣如圖5-1所示,則表示這個(gè)包是完整的。48fh@fh:~$gpg--verifylinux-2.496安裝編譯內(nèi)核時(shí)所需要的工具:fh@fh:~$sudoapt-getinstalllibncurses5-devfh@fh:~$sudoapt-getinstallncurses-docfh@fh:~$sudoapt-getinstallkernel-packagefh@fh:~$mkdir/home/fh/kernel(建立放置內(nèi)核的目錄)fh@fh:~$cplinux-.tar.bz2/home/fh/kernel(復(fù)制內(nèi)核)fh@fh:~$cd/home/fh/kernel、fh@fh:~/kernel$tarjxvflinux-.tar.bz2(解壓內(nèi)核)fh@fh:~/kernel$cd/home/fh/kernel/linux-(進(jìn)入內(nèi)核目錄,實(shí)際上源代碼是需要根據(jù)具體的硬件修改的,只是TQ2440的配套光盤中給的內(nèi)核源代碼已經(jīng)修改好了。)fh@fh:~/kernel/linux-$makeclean(清除以前的舊數(shù)據(jù))fh@fh:~/kernel/linux-$makemrproper(清理以前編譯時(shí)留下的臨時(shí)文件)50安裝編譯內(nèi)核時(shí)所需要的工具:fh@fh:~$mkdir/內(nèi)核源代碼的修改1.修改根目錄下的Makefile文件Linux內(nèi)核源碼目錄下的Makefile文件控制內(nèi)核的編譯,雖然我們?cè)趚86平臺(tái)上進(jìn)行編譯,但是我們的目標(biāo)平臺(tái)是ARM,故必須進(jìn)行交叉編譯,將編譯器改為arm-linux-,處理器的架構(gòu)改為arm。tq2440的配套光盤中給的內(nèi)核源代碼中的命令:viMakefile修改:(193行)ARCH=arm(194行)CROSS_COMPILE=arm-linux-原因:指明體系結(jié)構(gòu)為arm,采用的交叉編譯器為arm-linux-,一定要改完Makefile文件再執(zhí)行makemenuconfig,否則,默認(rèn)的配置平臺(tái)就是針對(duì)x86架構(gòu)的PC普通電腦。51內(nèi)核源代碼的修改1.修改根目錄下的Makefile文件82.修改平臺(tái)輸入時(shí)鐘命令:fh@fh:~/kernel/linux-$viarch/arm/mach-s3c2440/mach-smdk2440.c修改:(163行)smdk2440_map_io()中的s3c24xx_init_clocks(16934400)修為s3c24xx_init_clocks(12000000)原因:TQ2440開發(fā)板使用的是12MHz的外部時(shí)鐘。3.修改機(jī)器代碼命令:fh@fh:~/kernel/linux-$viarch/arm/tools/mach-types修改:(379行)s3c2440這一行最后的數(shù)字改為168原因:在內(nèi)核文件arch/arm/mach-s3c2440/mach-smdk2440.c中的MACHINE_START(S3C2440,”SMDK2440”)中要使用該機(jī)器碼,同時(shí)它還應(yīng)該與uboot中的機(jī)器碼一致,因?yàn)閡boot源碼中為168,所以要改成與uboot一致;522.修改平臺(tái)輸入時(shí)鐘3.修改機(jī)器代碼94.修改common-smdk.c文件,加入NANDFLASH的分區(qū)信息命令:fh@fh:~/kernel/linux-$viarch/arm/plat-s3c24xx/common-smdk.c1)修改內(nèi)容如下:(109行開始)staticstructmtd_partitionsmdk_default_nand_part[]={
[0]={
.name
="uboot",
.offset=0x00000000,
.size
=0x00040000,
},
[1]={
.name
="kernel",
.offset=0x00200000,
.size=0x00300000,
},
[2]={
.name
="yaffs2",
.offset=0x00500000,
.size
=MTDPART_SIZ_FULL
}};即將NANDflash分為3個(gè)分區(qū),名稱分別為uboot,kernel和yaffs2,偏移量分別為0,2M和5M,大小分別為256kb,3M和251M(MTDPART_SIZ_FULL就是剩余的全部空間),注意:大小必須為128KB的整數(shù)倍,這是和uboot相關(guān)的。534.修改common-smdk.c文件,加入NANDFL
2)
然后,修改同文件的下面代碼(140行)staticstructs3c2410_platform_nandsmdk_nand_info={
.tacls
=10,
.twrph0
=25,
.twrph1
=10,
.nr_sets=ARRAY_SIZE(smdk_nand_sets),
.sets
=smdk_nand_sets,};其中修改的值由NANDflash芯片手冊(cè)查詢得到的,簡(jiǎn)單的說,這些設(shè)置就是要按照NANDFLASH芯片的讀寫時(shí)序而已。54
2)
然后,修改同文件的下面代碼113)修改s3c2410.c文件fh@fh:~/kernel/linux-$vidrivers/mtd/nand/s3c2410.c最后,修改drivers/mtd/nand/s3c2410.c中752行s3c2410_nand_init_chip函數(shù)的語句改為(752行)chip->ecc.mode
=NAND_ECC_NONE;(原來為NAND_ECC_SOFT)這里不采用NANDflash的軟件ECC校驗(yàn)碼,因?yàn)樵诔跏蓟臅r(shí)候,uboot中有校驗(yàn)碼,然后在后面yaffs2文件系統(tǒng)內(nèi)核移植的時(shí)候,要選上采用S3C2440硬件校驗(yàn)碼。553)修改s3c2410.c文件12添加內(nèi)核對(duì)yaffs2的支持
YAFFS(YetAnotherFlashFileSystem)是專門為NANDFlash存儲(chǔ)器設(shè)計(jì)的嵌入式文件系統(tǒng),遵循GPL(GeneralPublicLicense)協(xié)議。在移植前,首先要為內(nèi)核添加yaffs2文件系統(tǒng)的支持,首先下載yaffs2文件系統(tǒng)的補(bǔ)丁,可到官方下載頁(yè)下載,但是現(xiàn)在都用git工具下載了。1)需要使用git工具,如果沒有安裝,請(qǐng)先輸入sudoapt-getinstallgit2)下載yaffs2補(bǔ)丁fh@fh:~/kernel$gitclonegit://www.aleph1.co.uk/yaffs2Cloningintoyaffs2...remote:Countingobjects:6875,done.remote:Compressingobjects:100%(4105/4105),done.remote:Total6875(delta5452),reused3478(delta2700)Receivingobjects:100%(6875/6875),3.40MiB|541KiB/s,done.Resolvingdeltas:100%(5452/5452),done.fh@fh:~/kernel$lslinux-linux-.tar.bz2.signyaffs256添加內(nèi)核對(duì)yaffs2的支持
YAFFS(YetAnoth3)給內(nèi)核打上yaffs2的補(bǔ)丁,先進(jìn)入yaffs2目錄,fh@fh:~/kernel$cdyaffs2輸入下面命令:fh@fh:~/kernel/yaffs2$./patch-ker.shcm/home/fh/kernel/linux-/Updating/home/fh/kernel/linux-//fs/KconfigUpdating/home/fh/kernel/linux-//fs/Makefile再進(jìn)入內(nèi)核根目錄的fs目錄,就可以看到一個(gè)yaffs2目錄,說明已經(jīng)為內(nèi)核打上了支持yaffs2的補(bǔ)丁。注意:以后的操作都是在內(nèi)核源代碼的根目錄下執(zhí)行的。573)給內(nèi)核打上yaffs2的補(bǔ)丁,146)修改看門狗驅(qū)動(dòng)drivers/watchdog/s3c2410_wdt.c程序修改如下加粗部分(49行)#defineCONFIG_S3C2410_WATCHDOG_ATBOOT(1)//啟動(dòng)看門狗,原來是(0)(50行)#defineCONFIG_S3C2410_WATCHDOG_DEFAULT_TIME(15)//設(shè)置時(shí)間默認(rèn)15秒沒喂狗,CPU就重啟(55行)staticintsoft_noboot=0;(56行)staticintdebug=0;
586)修改看門狗驅(qū)動(dòng)drivers/watchdog/s3c27.打補(bǔ)丁__gnu_mcount_nc_patch,解決EABI編譯器與arms3c2440處理器編譯錯(cuò)誤有興趣的讀者請(qǐng)參看以下網(wǎng)址,/ml/libc-ports/2008-04/msg00009.html__gnu_mcount_nc_patch.patch.gz腳本見配書光盤首先將__gnu_mcount_nc_patch.patch.gz腳本拷貝到內(nèi)核的根目錄下fh@fh:~/my_experiment/5$cp__gnu_mcount_nc_patch.patch.gzlinux-/fh@fh:~/my_experiment/5/linux-$gunzip-dc__gnu_mcount_nc_patch.patch.gz|patch-p1(注意:__gnu腳本最前面是兩個(gè)下劃線;-p1中的最后一個(gè)是數(shù)字1)patchingfilearch/arm/include/asm/ftrace.hpatchingfilearch/arm/kernel/armksyms.cpatchingfilearch/arm/kernel/entry-common.S597.打補(bǔ)丁__gnu_mcount_nc_patch,解決8.修改與網(wǎng)卡相關(guān)的兩個(gè)文件1)修改drivers/net/dm9000.c網(wǎng)卡驅(qū)動(dòng)文件①在原文件39行#include<asm/io.h>之后,但在#include"dm9000.h"之前,加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410)#include<mach/regs-mem.h>#endif②加入①的內(nèi)容后,在文件的1192行u32id_val之后,但在/*Initnetworkdevice*/之前,加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410) unsignedintoldval_bwscon=*(volatileunsignedint*)S3C2410_BWSCON; unsignedintoldval_bankcon4=*(volatileunsignedint*)S3C2410_BANKCON4;#endif608.修改與網(wǎng)卡相關(guān)的兩個(gè)文件17③在1208行dev_dbg(&pdev->dev,"dm9000_probe()\n");之后但在/*setupboardinfostructure*/之前,加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410) *((volatileunsignedint*)S3C2410_BWSCON)=(oldval_bwscon&~(3<<16))|S3C2410_BWSCON_DW4_16|S3C2410_BWSCON_WS4|S3C2410_BWSCON_ST4; *((volatileunsignedint*)S3C2410_BANKCON4)=0x1f7c;#endif61③在1208行dev_dbg(&pdev->dev,"④在1376行(注意TQ2440配套的移植手冊(cè)寫成1278行了) db->mii.mdio_write=dm9000_phy_write;之后,但在mac_src="eeprom";之前,加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410) printk("NowusethedefaultMACaddress:10:23:45:67:89:ab\n"); mac_src="EmbedSky"; ndev->dev_addr[0]=0x10; ndev->dev_addr[1]=0x23; ndev->dev_addr[2]=0x45; ndev->dev_addr[3]=0x67; ndev->dev_addr[4]=0x89; ndev->dev_addr[5]=0xab;#else62④在1376行(注意TQ2440配套的移植手冊(cè)寫成1278⑤在1410行 "setusingifconfig\n",ndev->name);這一行之后,但在platform_set_drvdata(pdev,ndev);這一行之前,加入以下加粗部分:#endif⑥在1424行out:之后,但在dev_err(db->dev,"notfound(%d).\n",ret);之前加入以下加粗部分:#ifdefined(CONFIG_ARCH_S3C2410) *(volatileunsignedint*)S3C2410_BWSCON=oldval_bwscon; *(volatileunsignedint*)S3C2410_BANKCON4=oldval_bankcon4;#endif63⑤在1410行 "setusingifconfig\2)編輯arch/arm/mach-s3c2440/mach-smdk2440.c文件加入dm9000的網(wǎng)卡信息①在第48行#include<plat/common-smdk.h>之后,但在staticstructmap_descsmdk2440_iodesc[]__initdata={之前,加入以下加粗部分:#include<linux/dm9000.h>②在// .lpcsel =((0xCE6)&~7)|1<<4,和};之后,就是在149,150這兩行之后但在staticstructplatform_device*smdk2440_devices[]__initdata={這一行之前,加入以下加粗部分:642)編輯arch/arm/mach-s3c2440/machstaticstructresources3c_dm9k_resource[]={[0]={.start =S3C2410_CS4,.end =S3C2410_CS4+3,.flags =IORESOURCE_MEM,},[1]={.start =S3C2410_CS4+4,.end =S3C2410_CS4+4+3,.flags =IORESOURCE_MEM,},[2]={.start =IRQ_EINT7,.end =IRQ_EINT7,.flags =IORESOURCE_IRQ|IRQF_TRIGGER_RISING,}};staticstructdm9000_plat_datas3c_dm9k_platdata={.flags =DM9000_PLATF_16BITONLY,};structplatform_devices3c_device_dm9000={.name ="dm9000",.id =0,.num_resources =ARRAY_SIZE(s3c_dm9k_resource),.resource =s3c_dm9k_resource,.dev ={.platform_data=&s3c_dm9k_platdata,}};65staticstructresources3c_dm9③在第191行&s3c_device_iis這一行之后,并在};這一行之前,加入以下加粗部分:&s3c_device_rtc,&s3c_device_dm9000,9.串口驅(qū)動(dòng)說明的內(nèi)核已經(jīng)支持UART0和UART1這兩個(gè)串口,不用修改;但是如果要支持UART2的話,請(qǐng)參考TQ2440的移植手冊(cè)進(jìn)行UART2串口的移植。66③在第191行&s3c_device_iis這一行之后,內(nèi)核的配置輸入makemenuconfig進(jìn)行內(nèi)核的配置,出現(xiàn)如圖所示的配置界面67內(nèi)核的配置輸入makemenuconfig進(jìn)行內(nèi)核的配置,首先加載內(nèi)核提供的默認(rèn)的針對(duì)s3c2410處理器的配置68首先加載內(nèi)核提供的默認(rèn)的針對(duì)s3c2410處理器的配置25BusyBox最初是由BrucePerens在1996年為DebianGNU/Linux安裝盤編寫的,其目標(biāo)是在一張軟盤上創(chuàng)建一個(gè)可引導(dǎo)的GNU/Linux系統(tǒng),Busybox是一個(gè)遵循GPLV2協(xié)議的開源項(xiàng)目。Busybox將眾多的Linux命令集合進(jìn)一個(gè)很小的可執(zhí)行程序中,BusyBox是為構(gòu)建內(nèi)存有限的嵌入式系統(tǒng)的優(yōu)秀工具。Busybox在編寫過程中對(duì)文件大小進(jìn)行了優(yōu)化,并考慮了系統(tǒng)資源有限的情況。與一般的GNU工具集動(dòng)輒幾MB的體積相比,動(dòng)態(tài)連接的Busybox只有幾百KB,即使靜態(tài)連接也只有1MB左右,一次有人將Busybox比喻成Linux工具中的瑞士軍刀,包括了一個(gè)大的工具集,但是有些根文件系統(tǒng)下的文件還是需要用戶自己來建立。BusyBox69BusyBox最初是由BrucePerens在19961下載busybox的源代碼busybox-1.19.4.tar.bz2及其對(duì)應(yīng)的驗(yàn)證文件2驗(yàn)證文件的完整性3解壓源代碼fh@fh:~/busybox$tarjxvfbusybox-1.19.4.tar.bz24進(jìn)入busybox源代碼目錄fh@fh:~/busybox$cdbusybox-1.19.4/5修改Makefile文件fh@fh:~/busybox/busybox-1.19.4$viMakefile修改164行為CROSS_COMPILE=arm-linux-//指定交叉編譯器arm-linux-修改190行為ARCH=arm//指定CPU類型為arm修改完后保存6配置busyboxfh@fh:~/busybox/busybox-1.19.4$makemenuconfig701下載busybox的源代碼busybox-1.19.4.t1下載busybox的源代碼busybox-1.19.4.tar.bz2及其對(duì)應(yīng)的驗(yàn)證文件/downloads/busybox-1.19.4.tar.bz2/downloads/busybox-1.00.tar.bz2.sign2驗(yàn)證文件的完整性busybox-1.19.4.tar.bz2.sign文件中含有MD5值和SHA1值MD5:9c0cae5a0379228e7b55e5b29528df8ebusybox-1.19.4.tar.bz2SHA1:5d7db83d8efbadc19c86ec236e673504bbf43517busybox-1.19.4.tar.bz2fh@fh:~/busybox$md5sumbusybox-1.19.4.tar.bz29c0cae5a0379228e7b55e5b29528df8ebusybox-1.19.4.tar.bz2fh@fh:~/busybox$sha1sumbusybox-1.19.4.tar.bz25d7db83d8efbadc19c86ec236e673504bbf43517busybox-1.19.4.tar.bz2711下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行助理競(jìng)聘演講稿
- 關(guān)于醫(yī)院的實(shí)習(xí)報(bào)告范文九篇
- 財(cái)務(wù)的實(shí)習(xí)報(bào)告范文集錦5篇
- 城鎮(zhèn)老舊小區(qū)改造項(xiàng)目申請(qǐng)報(bào)告
- 網(wǎng)絡(luò)營(yíng)銷方案策劃書(集合14篇)
- 2024年安康杯知識(shí)競(jìng)賽學(xué)習(xí)復(fù)習(xí)測(cè)試有答案
- 制動(dòng)鉗工高級(jí)復(fù)習(xí)測(cè)試題
- 小學(xué)數(shù)學(xué)一年級(jí)上冊(cè)《統(tǒng)計(jì)》說課稿
- 護(hù)士演講稿錦集九篇
- 演講稿題目健康飲食【5篇】
- 大型能源集團(tuán)公司信息化規(guī)劃(一)應(yīng)用系統(tǒng)架構(gòu)規(guī)劃課件
- 《三氣周瑜》兒童故事繪本ppt課件(圖文演講)
- 2023海南省圖書館公開招聘財(cái)政定額補(bǔ)貼人員15人(一)模擬預(yù)測(cè)(共500題)筆試參考題庫(kù)附答案詳解
- 2022年北京外國(guó)語大學(xué)博士生英語入學(xué)考試試題
- 新《煤礦安全規(guī)程》第08講 《煤礦安全規(guī)程》關(guān)于爆破事故防治的規(guī)定
- 防爆電氣設(shè)備安全管理規(guī)定
- 提高做好群眾工作的能力主講陶通艾
- 崗位價(jià)值評(píng)估表-附件一
- 門店所屬關(guān)系證明
- 《“歪腦袋”木頭樁》閱讀測(cè)試
- 有關(guān)原始股權(quán)買賣協(xié)議書通用(7篇)
評(píng)論
0/150
提交評(píng)論