下面以運(yùn)行在Nor flash上的ramdisk文件系統(tǒng)為例說明。下面提到的Flash,如果沒有指定為Nand Flash,則Flash就指的是Nor Flash。
1,燒寫uboot
(1)編譯uboot
目前我們使用uboot1.1.4 ,在Linux下,進(jìn)入uboot1.1.4目錄,
依次輸入如下命令:
make clobber
make davinci_config
make ARCH=arm
就生成了可執(zhí)行文件 u-boot.bin 。
(2)燒寫uboot
將uboot燒寫進(jìn)Flash,有兩種方法:一是使用JTAG頭連接仿真器,使用仿真器燒寫;二是使用串口進(jìn)行燒寫。
注意:
在連接仿真器及串口線,撥動S3開關(guān),切換J4跳線時,必須要在斷電情況下操作。
仿真器燒寫:
將Davinci板卡斷電,
將DM6446開發(fā)板上的S3開關(guān)撥到全部為ON,在J4跳線處選上Nor Flash,連接仿真器;
將Davinci板卡上電,
打開CCS(需要設(shè)置CCS為仿真模式),在菜單中選擇 File-- Load Program ,找到Flash的燒寫程序flashwrite.out ,然后運(yùn)行,根據(jù)提示分別輸入uboot文件名u-boot.bin,及偏移地址0,等燒寫完畢即可;
將Davinci板卡斷電,
將S3切換到Nor Flash啟動,即撥為1011111111,運(yùn)行串口控制軟件Tera Term ,選擇COM1口,設(shè)置波特率為115200;
將Davinci板卡上電,
在Tera Term窗口會有uboot的啟動信息顯示。
串口燒寫:
由于dvflasher運(yùn)行需要 .net FrameWork 2.0,所以先安裝這個程序。
將Davinci板卡斷電,
將DM6446開發(fā)板上的S3開關(guān)撥到全部為ON,在J4跳線處選上Nor Flash,用串口線連接PC主機(jī)與Davinci板卡;
將Davinci板卡上電,
在主機(jī)上運(yùn)行命令行,在命令行輸入命令:dvflasher -r u-boot.bin,等燒寫完畢;
將Davinci板卡斷電,
將S3切換到Nor Flash啟動,即撥為1011111111,運(yùn)行串口控制軟件Tera Term ,選擇COM1口,設(shè)置波特率為115200;
將Davinci板卡上電,
在Tera Term窗口會有uboot的啟動信息顯示。
串口燒寫nand flash:
將Davinci板卡斷電,
將DM6446開發(fā)板上的S3開關(guān)撥到:1101111111,在J4跳線處選上Nand Flash CS2,用串口線連接PC主機(jī)與Davinci板卡;
將Davinci板卡上電,
在主機(jī)上運(yùn)行命令行,在命令行輸入命令:dvflasher -fnandbin u-boot_nand.bin,等燒寫完畢;
將Davinci板卡斷電,
將S3切換為Nand Flash啟動,即撥為全部為OFF,運(yùn)行串口控制軟件Tera Term ,選擇COM1口,設(shè)置波特率為115200;
將Davinci板卡上電,
在Tera Term窗口會有uboot的啟動信息顯示。
2,燒寫Linux內(nèi)核
內(nèi)核指的是一個提供硬件抽象層、磁盤及文件系統(tǒng)控制、多任務(wù)等功能的系統(tǒng)軟件。一個內(nèi)核不是一套完整的操作系統(tǒng)。一套基于Linux內(nèi)核的完整操作系統(tǒng)叫作Linux操作系統(tǒng)。
在Linux 內(nèi)核中,包括了:進(jìn)程管理、定時器、中斷管理、內(nèi)存管理、模塊管理、虛擬文件系統(tǒng)接口、文件系統(tǒng)管理、設(shè)備驅(qū)動程序、進(jìn)程間通信、網(wǎng)絡(luò)管理、系統(tǒng)啟動等操作系統(tǒng)功能的實現(xiàn)。
(1)編譯Linux內(nèi)核
當(dāng)板卡硬件有改動,或需要增加某些底層功能時,需要改動內(nèi)核模塊,可以使用如下命令來更改內(nèi)核模塊的配置:
make menuconfig
生成的配置文件保存在
mv_pro_4.0\montavista\pro\devkit\lsp\ti-davinci\arch\arm\defconfig
然后在:
mv_pro_4.0\montavista\pro\devkit\lsp\ti-davinci
目錄下輸入如下命令:
make ARCH=arm CROSS_COMPILE=arm_v5t_le- davinci_dm644x_defconfig
make ARCH=arm CROSS_COMPILE=arm_v5t_le- checksetconfig
make ARCH=arm CROSS_COMPILE=arm_v5t_le- uImage
cp arch/arm/boot/uImage /tftpboot/uImage
chmod a+r /tftpboot/uImage
就可以編譯出新的內(nèi)核。
更多的細(xì)節(jié)請參考《Building a Small Embedded Linux Kernel Example spraah2.pdf》。
(2)燒寫Linux內(nèi)核
從Linux服務(wù)器下載內(nèi)核映象文件并燒寫進(jìn)Davinci板卡的Nor Flash中,我們使用板卡上的uboot,通過tftp協(xié)議,從Linux服務(wù)器上下載編譯好的內(nèi)核,過程如下:
a,將內(nèi)核文件uImage復(fù)制到Linux服務(wù)器的 /tftpboot/ 目錄下,
b,連接PC與Davinci板卡,需要連接串口線及網(wǎng)線,在連接串口線時需要將Davinci板卡斷電。
c,啟動運(yùn)行串口控制軟件Tera Term
d,將Davinci板卡上電,在Tera Term窗口中按下任意鍵,進(jìn)入輸入命令狀態(tài)
e,依次輸入如下命令:
tftpboot 0x80080000 uImage //從tftp服務(wù)器拷貝至內(nèi)存中
erase 0x2100000 22fffff //擦除2M的空間
cp.b 0x80080000 0x2100000 0x200000 //從內(nèi)存拷貝至Flash中
等待命令執(zhí)行完畢,就成功燒寫內(nèi)核文件進(jìn)Nor Flash中了。
最后,在正式啟動板卡時要讀取flash上的內(nèi)核文件,還需要設(shè)置環(huán)境變量為從flash啟動,使用如下命令設(shè)置即可:
setenv bootcmd ‘bootm 0x2100000’
3,燒寫根文件系統(tǒng)
Linux引導(dǎo)啟動時,默認(rèn)使用的文件系統(tǒng)是根文件系統(tǒng)。其中一般都包括這樣一些子目錄: etc, dev, usr, usr/bin, bin, var等。 etc目錄主要含有一些系統(tǒng)配置文件;dev含有設(shè)備特殊文件,用于使用文件操作語句操作設(shè)備;usr存放庫函數(shù)、手冊和其它一些文件。bin存放執(zhí)行程序;var用于存放系統(tǒng)運(yùn)行時可變的數(shù)據(jù)或者是日志等信息。
根文件系統(tǒng)有多種格式,例如romfs、ramfs、jffs2、yaffs2等,我們以ramfs為例說明編譯及燒寫過程。
(1)制作ramdisk
在Linux服務(wù)器中制作ramdisk過程如下:
a,開辟一塊硬盤空間,這里定為14M,名字為ramrootfs,并格式化為ext2文件系統(tǒng):
dd if=/dev/zero of=ramrootfs bs=1k count=14336
mke2fs -F -m 0 -i 2000 ramrootfs
b,把虛擬盤掛載到目錄ramfs:
mount -o loop -t ext2 ramrootfs ramfs
c,復(fù)制所需根文件系統(tǒng)內(nèi)容至ramfs中
d,使用nfs方式調(diào)試,確認(rèn)文件系統(tǒng)可用。
e,跳到ramfs目錄外,卸載ramfs,并壓縮文件系統(tǒng)映象:
umount ramfs
cat ramrootfs | gzip -9 > ramdisk.gz
(2)燒寫ramdisk
從Linux服務(wù)器下載ramdisk.gz文件并燒寫進(jìn)Davinci板卡的Nor Flash中, 我們使用板卡上的uboot,通過tftp協(xié)議,從Linux服務(wù)器上下載壓縮好的ramdisk.gz,過程如下:
a,將ramdisk.gz復(fù)制到Linux服務(wù)器的 /tftpboot/ 目錄下;
b,連接PC與Davinci板卡,需要連接串口線及網(wǎng)線,在連接串口線時需要將Davinci板卡斷電;
c,啟動運(yùn)行串口控制軟件Tera Term;
d,將Davinci板卡上電,在Tera Term窗口中按下任意鍵,進(jìn)入輸入命令狀態(tài);
e,依次輸入如下命令:
tftpboot 0x80080000 ramdisk.gz //從tftp服務(wù)器拷貝至內(nèi)存中
erase 0x2300000 0x28fffff //擦除6M的空間
cp.b 0x80080000 0x2300000 0x600000 //從內(nèi)存拷貝至Flash中
等待命令執(zhí)行完畢,就成功燒寫ramdisk根文件系統(tǒng)進(jìn)Nor Flash中了。
最后,在正式啟動板卡時要讀取flash上的根文件系統(tǒng),還需要設(shè)置環(huán)境變量為從flash讀取,使用如下兩個命令設(shè)置即可:
setenv bootcmd 'cp.b 0x2300000 0x85000000 0x600000; bootm 0x2100000'
setenv bootargs console=ttyS0,57600n8 video=dm64xxfb:interface=composite:mode=pal ip=192.168.1.82::192.168.1.1 root=/dev/ram0 rw initrd=0x85000000,14M mem=112M
第一個命令中主要相關(guān)部分是cp.b 0x2300000 0x85000000 0x600000 ,作用是在Davinci板卡啟動時拷貝根文件系統(tǒng)至內(nèi)存中; 第一個命令中主要相關(guān)部分是root=/dev/ram0 rw initrd=0x85000000,14M ,作用是設(shè)置Davinci板卡啟動時采用ramdisk根文件系統(tǒng)。 |
|
來自: rookie > 《技術(shù)帖》