平台:虛擬機Ubuntu 12.04 內核:linux-2.6.30 開發板:TQ2440
包括編譯內核、制作文件系統,到目前可以在虛擬機上可以通過交叉網線可以和開發板互通,用了弄了差不多快兩天時間吧。現在回想起來覺得本來很容易的事,卻拉了這麼長時間,很小的一個錯誤,本來可以在編譯錯誤時,迅速定位到錯誤位置,但本人算是個菜鳥,再者在網卡驅動移植時,tq2440的說明修改代碼的位置很是模糊,加上對代碼的含義不甚了解,就浪費了好多時間。所以把我慘痛的經歷寫下來與諸君共享之……
首先,至於說怎麼從網上下載linux內核源碼,制作文件系統,tq2440的資料上說的很清了,網上也一搜就好多,我就不說了,重點說說網卡的移植。
天嵌以2.6.25和2.6.30.4版本的內核為例說linux網卡的移植,我用的是2.6.30版本的,我不知道他和2.6.30.4到底有多大區別,在移植步驟中,移植手冊不斷的說明要往dm9000.c哪行添加代碼,也不說清這些行是以修改前為准,還是以前面修改後的行為准,代碼位置也不敢隨便加。在這個過程中糾結了好久好久。直到看到點擊打開鏈接此篇博客,他把需要添加定義的宏,全部放到dm9000_init(void)中去,就是在加載模塊時,就執行這些宏,不過,要說明的是,在移植手冊中,一共需要在不同的地方定義oldval_bwscon、oldval_bankcon4 、S3C2410_BWSCON、S3C2410_BANKCON4,並且,後兩個變量在不同的地方定義了兩次,可能是需要程序選擇執行,但是在dm9000_init(void)中只需要用一次即可,否則,會出現矛盾,雖然它也能編譯過(我都編譯通過了,把內核下載到板子上就啟動不起來,後來檢查代碼是才發現定義的六個變量有兩個是兩兩重復的。刪除一對後,就可以通過了)。後續工作移植手冊都說的很詳細,不再細表!
剩下的工作就是ubuntu和板子的通信了,下面一篇文章說的很好,貼過來:
一:安裝 NFS 服務器
sudo apt-get install nfs-kernel-server
二:配置該服務器
sudo vi /etc/exports
在打開的空的文件中,添加想要共享的目錄
/opt/FL2440 *(rw,sync,no_root_squash)
這裡 /opt/FL2440 是 ubuntu 給其他平台 ( 開發板,其他遠程終端等 ) 提供的共享目錄; * 表示所有客戶機都可以掛載上述共享目錄, rw 表示掛接此目錄的客戶機對該目錄有讀寫的權力, no_root_squash 表示允許掛接此目錄的客戶機享有該主機的root 身份。
三:啟動 NFS 服務
sudo /etc/init.d/nfs-kernel-server start
然後,在開發板上做如下設置:
四:打開超級終端或者 DNW ,保持串口處於通信狀態
五:通過交叉網線連接 PC 和開發板。這一步千萬不能忘, NFS 靠的就是這根線啊,線路都不通了,如何能夠配置成功?
六:確保 ubuntu 下的 IP 地址與開發板的 IP 地址在同一網段。二者皆可以通過ifconfig 查詢,以及通過它設置 IP 地址。如果不在同一網段,請手動設置為同一網段。
以上六步已經配置好 NFS 了,下面具體測試是否通信正常:
七:在開發板的 linux 啟動後的命令行裡輸入如下指令:
mount –t nfs –o nolock 192.168.1.168:/work/nfs_root /mnt
其中 192.168.1.103 為 PC 端 ubuntu 的 IP 地址。我這裡本身開發板的 IP 地址不在這一網段,通過如下命令:
ifconfig eth0 192.168.1.101
這時,開發板的 IP 就設置成 192.168.1.101 了。前面的掛載命令將會把 PC 端的ubuntu 下的 /opt/FL2440 目錄掛載到開發板的 /mnt 目錄。當然,前提是開發板的linux 系統必須具備這個目錄了。試試先在 ubuntu 的 /opt/FL2440 路徑放個文件,然後在開發板的命令行終端敲入 ls /mnt ,是不是看到剛才所放的文件了?
八:如果第七步沒有成功,請仔細檢查以上七步,重復一到七步!
以上內容算是這兩天的成果總結吧,後續的驅動的加載,都是在此基礎上,所以,這些基礎工作還是先打牢,再前進!