mini2440使用nfs掛載的另一種方法
網上一般使用的都是在uboot啟動的時候設定好啟動引數,然後linux啟動的時候使用nfs讓平臺掛載主機上的根檔案系統目錄,這樣的話就不需要燒寫根檔案系統的映象
到開發板中的nandfalsh中了。我因為製作根檔案系統的時候失敗了,所以就直接使用的是mini2440自帶的根檔案系統映象,燒寫到開發板中,這樣可以正常啟動了。
可是如果要進行實驗,編寫的模組檔案怎麼載入到開發板中的檔案系統中去呢。我們可以在平臺linux啟動之後進入檔案系統在命令列中使用nfs,去訪問位於主機上的
一個目錄,我們在主機上寫的程式碼編譯出來的ko檔案放到這個目錄中作為nfs伺服器目錄,讓平臺通過nfs將這個目錄掛載到平臺中的/mnt/目錄中,這樣就可以通過平臺
的/mnt/中開到主機中的ko檔案了,同時可以使用insmod進行載入到平臺中執行。具體方法如下:
1.在主機上安裝nfs服務,我的是Ubuntu12.04
apt-get install apt-get install nfs-kernel-server
2.設定/etc/exports/檔案,在末尾新增
/home/cjx/workspace/nfsdir *(rw,sync,no_root_squash)
3.重啟服務
#sudo /etc/init.d/portmap restart
#sudo /etc/init.d/nfs-kernel-server restart
4.測試
#sudo mount -t nfs 192.168.0.1:/home/cjx/workspace/nfsdir/ /mnt/
#ls /mnt/
5.在平臺上ping主機
如果IP已經在一個網段了,並且設定成了橋接模式但是平臺還是ping不同主機,需要設定虛擬機器。在 編輯->虛擬網路編輯器->橋接模式->橋接到->有線網絡卡。
5.啟動平臺,將平臺的eth0的ip設定成跟主機一個網段,我的主機ip是192.168.0.1,設定平臺為192.168.0.2
方法一:ifconfig ech0 192.168.0.2 只有這次生效,下次重新啟動又會變成原來的治標不治本
方法二:將/etc/eth0-setting中的ip=x.x.x.x設定成你自己想要的,這樣永久生效,下次開機就會預設設定成你設定的ip
6.讓平臺啟動的時候自動掛載
修改/etc/init.d/rcS檔案,在末尾加上如下語句
echo "mount host matchine to platform dir /mnt/ ..."
mount -t nfs -o nolock 192.168.0.1:/home/cjx/workspace/nfsdir /mnt/
這樣每次平臺啟動的時候就會自動將主機上的nfsdir目錄掛載到平臺檔案系統中的/mnt/中去
好了,這樣,你可以在主機上開發,將檔案放到/home/cjx/workspace/nfsdir中去,然後就可以在平臺中的/mnt/中看到了,並且可以載入模組什麼的操作
需要注意的是在主機編譯的時候需要指定編譯器為交叉編譯工具鏈編譯才能在平臺上執行。我的makefile檔案如下所示
ifneq ($(KERNELRELEASE),)
obj-m := platform.o
else
KDIR := /home/cjx/workspace/kernel/linux-2.6.32.2
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=/home/cjx/workspace/software/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers modul*
endif
KDIR表示我的平臺移植的核心的目錄,CROSS_COMPILE是我主機上交叉編譯工具鏈的安裝目錄。