對(duì)于嵌入式系統(tǒng)移植的簡(jiǎn)單總結(jié)
姓名:張猛
引用自:http://blog.csdn.net/dream_bin123/article/details/78001533
【嵌牛導(dǎo)讀】:從最初的什么都不知道绿聘,到現(xiàn)在板子跑上系統(tǒng)癌瘾,調(diào)通網(wǎng)口這一路上感覺(jué)也是挫折起伏便瑟,這里就把自己和隊(duì)友在進(jìn)行系統(tǒng)燒寫(xiě)過(guò)程的一些理解和一些資料總結(jié)了一下,分享出來(lái),希望大家一起共同進(jìn)步糊余。
【嵌牛鼻子】:嵌入式,內(nèi)核,u-boot
【嵌牛提問(wèn)】:內(nèi)核啟動(dòng)參數(shù)詳解豫缨、參數(shù)為什么這么設(shè)置
【嵌牛正文】:
1查看內(nèi)核啟動(dòng)參數(shù)
在uboot界面中輸入printenv怠肋,即可查看啟動(dòng)參數(shù)靠益。
示例:
jz2440:
1.OpenJTAG>?printenv
2.bootcmd=nand?read.jffs2?0x30007FC0?kernel;?bootm?0x30007FC0
3.bootdelay=2
4.baudrate=115200
5.ethaddr=08:00:3e:26:0a:5b
6.ipaddr=192.168.7.17
7.serverip=192.168.7.11
8.netmask=255.255.255.0
9.mtdids=nand0=nandflash0
10.mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),2m(kernel),-(root)
11.bootargs=noinitrd?root=/dev/mtdblock3?init=/linuxrc?console=ttySAC0
12.bootatgs=noinitrd?root=/dev/nfs?nfsroot=192.168.7.21:/home/book/workspace/jz2440/systems/firstbusybox?ip=192.168.7.17:192.168.7.21:192.168.7.1:255.255.255.0::eth0:off?init=/linuxrc?console=ttySAC0
13.console=ttySAC0
14.filesize=791340
15.bootargs=console=ttySAC0,115200?root=/dev/mtdblock3?rootfstype=jffs2
16.stdin=serial
17.stdout=serial
18.stderr=serial
19.partition=nand0,0
20.mtddevnum=0
21.mtddevname=bootloader
22.Environment?size:?742/131068?bytes
hi3518e淘寶:
1.hisilicon?#?printenv
2.baudrate=115200
3.bootfile="uImage"
4.da=mw.b?0x82000000?ff?1000000;tftp?0x82000000?u-boot.bin.img;sf?probe?0;flwrite
5.du=mw.b?0x82000000?ff?1000000;tftp?0x82000000?user-x.cramfs.img;sf?probe?0;flwrite
6.dr=mw.b?0x82000000?ff?1000000;tftp?0x82000000?romfs-x.cramfs.img;sf?probe?0;flwrite
7.dw=mw.b?0x82000000?ff?1000000;tftp?0x82000000?web-x.cramfs.img;sf?probe?0;flwrite
8.dc=mw.b?0x82000000?ff?1000000;tftp?0x82000000?custom-x.cramfs.img;sf?probe?0;flwrite
9.up=mw.b?0x82000000?ff?1000000;tftp?0x82000000?update.img;sf?probe?0;flwrite
10.ua=mw.b?0x82000000?ff?1000000;tftp?0x82000000?upall_verify.img;sf?probe?0;flwrite
11.tk=mw.b?0x82000000?ff?1000000;tftp?0x82000000?uImage;?bootm?0x82000000
12.dd=mw.b?0x82000000?ff?1000000;tftp?0x82000000?mtd-x.jffs2.img;sf?probe?0;flwrite
13.ipaddr=192.168.1.10
14.serverip=192.168.1.107
15.netmask=255.255.255.0
16.ethaddr=00:12:12:22:b4:71
17.HWID=8043420004048425
18.bootargs=mem=38M?console=ttyAMA0,115200?root=/dev/mtdblock2?rootfstype=jffs2?mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)
19.bootcmd=sf?probe?0;sf?read?0x82000000?0x100000?0x300000;bootm?0x82000000
20.bootdelay=5
21.stdin=serial
22.stdout=serial
23.stderr=serial
24.verify=n
25.ver=U-Boot?2010.06-svn?(Mar?27?2014?-?11:56:37)
26.
27.Environment?size:?1179/65532?bytes
hi3518e自己:
1.hisilicon?#?printenv
2.bootdelay=1
3.baudrate=115200
4.ethaddr=00:00:23:34:45:66
5.ipaddr=192.168.1.10
6.serverip=192.168.1.2
7.netmask=255.255.255.0
8.bootfile=uImage
9.bootcmd=sf?probe?0;sf?read?0x82000000?0x100000?0x400000;bootm?0x82000000
10.bootargs=mem=32M?console=ttyAMA0,115200?root=/dev/mtdblock2?rootfstype=jffs2?mtdparts=hi_sfc:1M(boot),4M(kernel),9M(rootfs)
11.stdin=serial
12.stdout=serial
13.stderr=serial
14.verify=n
15.ver=U-Boot?2010.06?(Jun?01?2017?-?02:38:54)
16.
17.Environment?size:?424/262140?bytes
2主要的啟動(dòng)參數(shù)有bootargs、bootcmd
2.1 bootargs
示例:jz2440:
bootargs=console=ttySAC0,115200root=/dev/mtdblock3 rootfstype=jffs2
bootatgs=noinitrdroot=/dev/nfsnfsroot=192.168.7.21:/home/book/workspace/jz2440/systems/firstbusybox
ip=192.168.7.17:192.168.7.21:192.168.7.1:255.255.255.0::eth0:offinit=/linuxrc console=ttySAC0
hi3518e淘寶:
bootargs=mem=38Mconsole=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)
hi3518e自己:
bootargs=mem=32Mconsole=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2mtdparts=hi_sfc:1M(boot),4M(kernel),9M(rootfs)
詳解:
console=ttySAC0:
console=ttySAC0使用虛擬串口終端設(shè)備.
為什么是ttySAC0:
這個(gè)網(wǎng)址將的比較透徹:
在內(nèi)核中有一個(gè)串口驅(qū)動(dòng)和我們的console參數(shù)比較的一個(gè)過(guò)程邻耕,所以?xún)烧咭恢拢?/p>
jz2440為什么是ttySAC0:
S3C2410的驅(qū)動(dòng)文件drivers/serial/s3c2410.c中將串口驅(qū)動(dòng)的名字定義為:.name?=?S3C24XX_SERIAL_NAME,?//這個(gè)宏被定義為"ttySAC"
driver/serial/s3c2410.c有:#define
S3C24XX_SERIAL_NAME"ttySAC"
hi3518e為什么是ttyAMA0:
因?yàn)楹K荚创a:drivers/tty/serial/amba-pl011.c中將串口驅(qū)動(dòng)的名字定義為:.name = "ttyAMA",
mem:mem=xxM指定內(nèi)存的大小冲呢,不是必須的
root=/dev/mtdblock2:
root=/dev/mtdx rw
root=/dev/mtdblockx rw
root=/dev/mtdblock/x rw
root=31:0x
就是說(shuō)你的root分區(qū)在你flash的第幾分區(qū)舍败,在第幾分區(qū)就是mtdblockx幾,如:mtdblock3\mtdclock2;
hi3518e的板子設(shè)置mtdparts分區(qū)信息時(shí),設(shè)置了三個(gè)分區(qū)第三個(gè)是root分區(qū)所以是root=/dev/mtdblock2
上面的這幾個(gè)在一定情況下是通用的邻薯,當(dāng)然這要看你當(dāng)前的系統(tǒng)是否支持裙戏,不過(guò)mtd是字符設(shè)備,而mtdblock是塊設(shè)備厕诡,有時(shí)候你的挨個(gè)的試到底當(dāng)前的系統(tǒng)支持上面那種情況下累榜,不過(guò)root=/dev/mtdblockx
rw比較通用。此外灵嫌,如果直接指定設(shè)備名可以的話(huà)壹罚,那么使用此設(shè)備的設(shè)備號(hào)也是可以的。
root=/dev/nfs
在文件系統(tǒng)為基于nfs的文件系統(tǒng)的時(shí)候使用寿羞。當(dāng)然指定root=/dev/nfs之后猖凛,還需要指定nfsroot=serverip:nfs_dir,即指明文件系統(tǒng)存在那個(gè)主機(jī)的那個(gè)目錄下面
rootfstype=jffs2:
rootfstype設(shè)置文件系統(tǒng)類(lèi)型rootfstype=jffs2绪穆;
這個(gè)選項(xiàng)需要跟root一起配合使用辨泳,一般如果根文件系統(tǒng)是ext2的話(huà),有沒(méi)有這個(gè)選項(xiàng)是無(wú)所謂的玖院,但是如果是jffs2,squashfs等文件系統(tǒng)的話(huà)菠红,就需要rootfstype指明文件系統(tǒng)的類(lèi)型,不然會(huì)無(wú)法掛載根分區(qū).
mtdparts=hi_sfc:1M(boot),4M(kernel),9M(rootfs):
flash分區(qū)信息司恳;
要想這個(gè)參數(shù)起作用途乃,內(nèi)核中的mtd驅(qū)動(dòng)必須要支持
按這個(gè)格式來(lái)設(shè)置:mtdparts=mtd-id:@(),@()
mtd-id必須要跟你當(dāng)前平臺(tái)的flash的mtd-id一致,不然整個(gè)mtdparts會(huì)失效
init:
init指定的是內(nèi)核啟起來(lái)后扔傅,進(jìn)入系統(tǒng)中運(yùn)行的第一個(gè)腳本耍共,一般init=/linuxrc,或者init=/etc/preinit,preinit的內(nèi)容一般是創(chuàng)建console,null設(shè)備節(jié)點(diǎn)猎塞,運(yùn)行init程序试读,掛載一些文件系統(tǒng)等等操作。請(qǐng)注意荠耽,很多初學(xué)者以為init=/linuxrc是固定寫(xiě)法钩骇,其實(shí)不然,/linuxrc指的是/目錄下面的linuxrc腳本铝量,一般是一個(gè)連接罷了倘屹。
2.2 bootcmd參數(shù)
1.bootcmd=sf?probe?0;sf?read?0x82000000?0x100000?0x400000;bootm?0x82000000
uboot引導(dǎo)完的最后一步就是調(diào)用bootcmd參數(shù)驅(qū)動(dòng)內(nèi)核:怎么啟動(dòng)呢,就是把在flash中的內(nèi)核燒寫(xiě)到ram中慢叨,并運(yùn)行那段代碼纽匙;
前面有說(shuō)過(guò)bootcmd是自動(dòng)啟動(dòng)時(shí)默認(rèn)執(zhí)行的一些命令,因此你可以在當(dāng)前環(huán)境中定義各種不同配置拍谐,不同環(huán)境的參數(shù)設(shè)置烛缔,然后設(shè)置bootcmd為你經(jīng)常使用的那種參數(shù)馏段。
3修改啟動(dòng)參數(shù)
其實(shí)打開(kāi)uboot界面輸入?践瓷,就會(huì)返回uboot下我們可以使用的命令院喜,其中包括參數(shù)設(shè)置的相關(guān)參數(shù)。
修改:bootargs參數(shù)
YAFFS啟動(dòng)參數(shù)設(shè)置:
set bootargs
console=ttySAC0,115200 root=/dev/mtdblock3; save //實(shí)測(cè)有效
jffs2設(shè)置啟動(dòng)參數(shù):
set bootargs
console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2; save
nfs系統(tǒng)啟動(dòng):
改后的信息:setenv bootargs ?noinitrd ? root=/dev/nfs?nfsroot=192.168.7.21:/home/book/workspace/jz2440/systems/firstbusybox?ip=192.168.7.17:192.168.7.21:192.168.7.1:255.255.255.0::eth0:off?init= /linuxrc ?console=ttySAC0
原信息:set?bootargs noinitrd root=/dev/mtdblock3 init=/linuxrcconsole=ttySAC0
saveenv
修改:bootcmd參數(shù)
1.setenv?bootcmd'sf?probe?0;sf?read?0x82000000?0x100000?0x400000;bootm?0x82000000'
1.saveenv
setenv bootargs
'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2
mtdparts=hi_sfc:1M(boot),4M(kernel),9M(rootfs)'