驅(qū)動開發(fā)前期準(zhǔn)備工作(NFS掛載):
那為什么要用NFS掛載來作為驅(qū)動開發(fā)的首選呢?因為你在未開發(fā)正確的驅(qū)動的時候,你要不停地做修改,如果你每改一次就要燒寫一次根文件系統(tǒng)這樣很浪費時間,而NFS掛載是把你的根文件系統(tǒng)放在你的開發(fā)機上,而開發(fā)板上并沒有,所以有修改,立刻可以體現(xiàn)在開發(fā)板上。
言歸正傳,首先講一下應(yīng)該怎樣NFS掛載根文件系統(tǒng),我也是網(wǎng)上搜集了一些資料和跟同事要了一些資料,如果跟別人寫的一樣的,那請見諒,因為這些資料我也不知道來源。
平臺:Windows7用虛擬機Fedora14
準(zhǔn)備已經(jīng)編譯好的u-boot.bin uImage rootfs。
一、u-boot編譯與燒寫
1、打開DNW,選擇NOR端口,輸入“v”,講u-boot.bin燒寫進(jìn)nand flash
2、選擇NAND端口,重啟開發(fā)板,出現(xiàn)以下界面:(此為超級終端下運行)
二、U-BOOT相關(guān)設(shè)置
1、在超級終端下鍵入u-boot的命令
# setenv ipaddr ****** (開發(fā)板IP)
# setenv serverip ****** (虛擬機IP)# setenv gatewayip ****** (網(wǎng)關(guān))
(以上為設(shè)置環(huán)境參數(shù))
# saveenv (保存環(huán)境參數(shù)到flash)
(由于要進(jìn)行tftp下載,所以要先搭建tftp服務(wù)器)
三、TFTP服務(wù)器搭建(Linux環(huán)境下)
1.安裝以下兩個軟件(安裝程序見TFTP安裝包)
[root@localhost Packages]# rpm -ivhxinetd-2.3.14-32.fc14.i686.rpm[root@localhost Packages]# rpm -ivhtftp-server-0.49-6.fc14.i686.rpm
2.修改配置文件
修改文件vi /etc/xinetd.d/tftp。
主要是設(shè)置TFTP服務(wù)器的根目錄,開啟服務(wù)。修改后的文件如下:
service tftp
{
socket_type =dgram
protocol =udp
wait =yes
user =root
server =/usr/sbin/in.tftpd
server_args =-s /home/user/tftproot -c
disable =no
per_source =11
cps =100 2
flags =IPv4
}
修改項server_args= -s <path> -c,其中<path>處可以改為你的tftp-server的根目錄,參數(shù)-s指定chroot,-c指定了可以創(chuàng)建文件
3.創(chuàng)建tftp根目錄,啟動tftp-server
#mkdir /home/user/tftpboot
#chmod 777 /home/user/tftpboot
#/etc/init.d/xinetd restart
這樣,tftp-server就啟動了。
4.測試
可以使用#netstat -a |grep tftp命令察看是否啟動tftp服務(wù),如果出現(xiàn)
udp 0 0 *:tftp *:* 則起動了
檢查tftp服務(wù)是否打開
[root@localhostbtools]#chkconfig –list
(查看是否有xinetd這一項)
如果tftp的服務(wù)沒有打開,則用下面命令打開tftp服務(wù)開關(guān)
[root@localhostbtools]#chkconfig tftp on
重啟服務(wù)
#/etc/init.d/xinetdrestart
四、下載內(nèi)核到開發(fā)板內(nèi)存
1、先確定開發(fā)板是否能ping通虛擬機下的Linux,如果是:host192.168.1.111 is alive,那么就表示連接 成功。
2、將編譯好的uImage放入/home/user/tftpboot目錄中。(Linux下)
3、在超級終端下輸入:
# tftp uImage (將uImage鏡像下載到開發(fā)板的SDRAM的0x30008000位置)
# nand erase 80000 size (擦除Nand Flash中80000開始大小為size的空間)
# nand write 30008000 80000 size (將內(nèi)存中30008000位置開始的內(nèi)容拷貝到NandFlash 中80000開始的位置大小為size)
備注:TFTP下載內(nèi)核映像時傳輸?shù)臄?shù)據(jù)總量會在完成時顯示(down_size),而燒寫 nand_flash時數(shù)據(jù)大小必須是2k對齊的,所以我們要對下載的數(shù)據(jù)大小做一點小小的改變以適應(yīng)nand_flash,如果down_size百位>8,則size= down_size+1000 后把低3位清零;如果down_size百位<8,則size = down_size低3位清零+800。比如down_size **a967,則size = **b000;down_size **a567,則size = **a800。
如:
五、利用nfs掛載根文件系統(tǒng)
1、在Linux下設(shè)置共享目錄
運行命令:gedit/etc/exports
編輯nfs服務(wù)的配置文件(第一次打開時文件是空的),添加以下內(nèi)容
/opt/rootfs *(rw,sync,no_root_squash) //自己根文件系統(tǒng)路徑
*:表示所有的客戶機都可以掛載此目錄
rw:表示掛接此目錄的客戶機對該目錄有讀寫的權(quán)限
no_root_squash:表示允許掛接此目錄的客戶機享有該主機的root身份
2、運行命令:service iptables stop 關(guān)閉防火墻
3、啟動NFS 服務(wù)
在命令行下運行:
#/etc/init.d/nfs start
這將啟動nfs 服務(wù),可以輸入以下命令檢驗 nfs 該服務(wù)是否啟動。
# mkdir /mnt/nfs
# mount -t nfs -o nolock 192.168.1.232(主機IP):/opt/rootfs(需要掛載的文件的路徑) /mnt/nfs
如果沒有出現(xiàn)錯誤信息,您將可以瀏覽到 /mnt/nfs 目錄中的內(nèi)容和/opt/rootfs 是一致的。
使用這個命令可以停止 nfs 服務(wù):
#/etc/init.d/nfs stop
六、在U-BOOT設(shè)置環(huán)境變量
1、setenv bootargs "noinitrd root=/dev/nfs rw nfsroot=192.168.1.232:/opt/rootfs/ ip=192.168.1.25:192.168.1.232:192.168.1.254:255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M"
(192.168.1.25)是開發(fā)板的臨時IP
(192.168.1.232)開發(fā)主機IP
(192.168.1.254)目標(biāo)板上網(wǎng)關(guān)
(255.255.255.0)子網(wǎng)掩碼
注意:如果使用的是虛擬機,則使用虛擬機的IP。
2、# setenv bootcmd “nand read 30008000 80000500000;bootm 30008000”
(將bootcmd命令改成上面的內(nèi)容,因為我們內(nèi)核鏡像在Nand Flash的位置是80000,所以u-boot執(zhí)行完之后,內(nèi)核的入口點就在80000這個位置。)
3、重啟開發(fā)板。只要保持網(wǎng)絡(luò)聯(lián)通,就能夠啟動Linux內(nèi)核及其根文件系統(tǒng)了,第一次寫博客,有什么錯誤敬請諒解。