linux+arm驅動入手問題解答

 

昨天寫了一篇驅動入手遇到的問題的文章來給自己鼓氣,今天終於是把第一個驅動模塊給加載進去並且能夠運行了。對於昨天的問題還有倆個問題沒有答案,不過那倆個問題就先放着。

首先大概說一下交叉編譯來開發,以前對於交叉編譯開發我的理解就是要安裝一個交叉編譯工具arm-linux-gcc然後其他的就不用管了,其實不是這樣的,而且對於交叉編譯環境的搭建一定要明確,那就是要在你開發的系統中(我們一般是在虛擬機中搭建的linux系統)搭建一個和你開發板中的系統完全一樣的開發環境,這個環境包括安裝相同的內核源碼,庫文件,各種內核配置等等,要完整的照着手冊要做,包括安裝linux源碼,定製linux內核等等,一開始我不明白怎麼又要安裝linux內核幹嘛的。其實這個搭建的環境編譯後生成的內核鏡像和你開發板的一樣,你可以燒寫到開發板中試一試。到這裏的時候我就可以想到昨天出現的其他那倆個問題,開發機linux的內核編譯和nfs問題就和這個不一樣了,因爲交叉編譯的環境,內核代碼,頭文件庫文件,各種配置都是在搭建的這個開發環境中,和你開發主機linux的內核沒有關係。現在你可以看一下一般你的開發主機的內核和搭建的開機環境的內核一般是不一樣的,我的pc機的linux內核是2.6.25-14.fc9.i686而我搭建的開發環境的linux內核是2.6.32.2.熟悉了的人看起來這種問題很簡單,但是剛開始的時候我是很暈的,要不然我不會去編譯PC開發機的linux內核的。

說了很多廢話,回到主題,關於前一篇問題的問題1,前一篇文章 linux+arm驅動入手問題

有倆個方面的問題導致加載模塊不成功,一是編譯模塊前需要一些配置,還有開發環境的搭建中的一些問題。二是minicom串口傳輸文件,這個也是昨天琢磨了好久的,今天發現用這個傳文件的時候傳完了一定要檢查一下,昨天我看到了有一個命令可以檢查的但是今天找不到了,不過檢查大小也是一樣的,我以前就是因爲傳的文件不完整,大小不大,我該了之後就好了。

這是我在網上找到的一份MINI2440開發環境及模塊安裝至少我現在覺得很好

 

1.安裝Fedora9.0
mini2440推薦安裝9.0的版本。
在VM虛擬機中默認安裝即可。
2.安裝gcc
在Fedora9.0.ISO中的package文件夾下可以找到gcc的rpm安裝包,就不需要到網上費勁下載了。
rpm -ivh gcc*.rpm
首次安裝會提示依賴包確實,按照提示一個一個的安裝上,這些rpm包都在ISO裏。
順別說一次,如果需要相互依賴的包,可以通過rpm -Uvh a.rpm b.rpm同時安裝這兩個包。
安裝完成後,輸入gcc -v查詢版本信息,如果能執行,表明gcc已安裝成功。
3.安裝arm-linux-gcc
在mini2440的光盤中linux文件夾下找到arm-linux-gcc.tar.gz文件,複製到/opt/下
然後tar xvzf arm-linux-gcc.tar.gz -C 解壓縮
然後gedit /root/.bashrc
在最後一行追加
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
重新登錄linux後
執行arm-linux-gcc -v,如果能執行,表明arm-linux-gcc已安裝成功。
4.解壓縮arm-linux源碼
在mini2440光盤中linux下找到文件
linux-2.6.32.2-mini2440-20100728.tar.gz,將它複製到/opt下,然後解壓縮,壓縮後會生成
/opt/FriendlyARM/mini2440/linux2.6.32.2文件夾
cd /opt/FriendlyARM/mini2440/linux2.6.32.2

配置缺省config
cp config_mini2440_t35 .config
make menuconfig
如果提示ncurses有問題,需要通過rpm方式安裝ncurses,其rpm包在Fedora9.0.ISO中可以找到。
然後 make menucofig,一般不需要改。
然後 make
5.編譯模塊
make menuconfig 配置要編譯的模塊
make modules
make modules_install
這樣就可以生成.ko模塊文件
將這個文件ftp(記住是bin模式)上傳到mini2440開發板下的/lib/modules/2.6.32.2-FriendlyARMxia
然後modprobe yourmodulename,不要帶擴展名.ko。如果通過insmod命令安裝
通過lsmod查看模塊安裝情況
通過rmmod yourmodulename卸載

 

錯誤

insmod: error inserting 'helloworld.ko': -1 Invalid module format

原因是編譯問題,必須嚴格按照步驟。

可以通過cat /var/log/messages查看詳細的錯誤信息。

不過我這裏說一下關於/var/log/messages 也是網上找到的,簡單的說明了一下

日誌文件其實是純文本的文件,每一行就是一個消息。只要是在Linux下能夠處理純文本的工具都能用來查看日誌文件。日誌文件總是很大的,因爲從你第一次啓動Linux開始,消息就都累積在日誌文件中。看日誌文件的一個比較好的方法是用像More或Less那樣的分頁顯示程序,或者用Grep查找特定的消息。我們先用Less顯示“/var/log/messages”,可以看到從日誌文件中取出來的一些消息。每一行表示一個消息,而且都由四個域的固定格式組成:

*時間標籤(Timestamp),表示消息發出的日期和時間。

*主機名(Hostname),表示生成消息的計算機的名字。如果只有一臺計算機,主機名就可能沒有必要了。但是,如果在網絡環境中使用Syslog,那麼就可能要把不同主機的消息發送到一臺服務器上集中處理。在我們的例子中主機名爲lcbj。

*生成消息的子系統的名字。可以是“Kernel”,表示消息來自內核或者是進程的名字,表示發出消息的程序的名字。在方括號裏的是進程的PID。

*消息(Message),即消息的內容。


我根據這個我查看了一下我的messages信息,發現你們說的是裏面信息來自進程的名字那裏寫的是az 這個是串口的命令啊,所以我就去看看文件有沒有完整,果然有問題。

今天暫時就先寫到這裏吧,其他的倆個問題或者關於messages的詳解我一直沒找到,那就以後看到了在來寫。2011-08-29 16:53

今天終於是發現問題的所在了, 一個非常非常菜的問題,這樣的問題都不好意思說出來,但是不說出來又意味着什麼了?下面是引用別人的。

kernel devel和kernel source的區別

區別:kernel-devel包只包含用於內核開發環境所需的內核頭文件以及Makefile,而kernel-souce包含所有內核源代碼。
如果僅僅是用於你自己編寫的模塊開發的話,因爲只需引用相應的內核頭文件,所以只有devel包即可,如果你要修改現有的內核源代碼並重新編譯,那必須是kernel-souce。

kernel-souce在RH某些版本之後不再附帶在發行版中了,必須自己通過kernel-XXX.src.rpm做出來。


kernel-devel是用做內核一般開發的,比如編寫內核模塊,原則上,可以不需要內核的原代碼。
kernel則是專指內核本身的開發,因此需要內核的原代碼。

 

關於kernel source的有kernel和kernel-devel兩個rpm,其中kernel rpm包含源文件和頭文件(就像2.4下的kernel-source rpm),而kernel-devel則主要是頭文件。

這就是我折騰了好久今天終於弄明白的一件事,那就是我其實沒有安裝源代碼,而我只是安裝的一個kernel-devel,因爲fedora安裝VMware-tools的時候需要安裝這個包,所以我一直編譯不成功的內核源碼原來是一直在編譯沒有源代碼的頭文件,因爲編譯不成功後面修改了內核的配置,所以導致nfs服務啓動失敗,cdrom無法掛載等等問題。而這些問題緣由是改變了內核,相當於傷到了筋骨,所以一般的辦法無法修復。所以我搜遍了google baidu都沒有一個辦法可以解決,最後果斷重裝了。果然內核的修改傷不起啊!這個慢慢來,有空多練練內功。

2011-08-31 21:18


發佈了53 篇原創文章 · 獲贊 21 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章