最近由於要做TQ2440(ARM9)開發板上的驅動實驗,所以要在主機(Ubuntu 13.10)上針對前面的目標板上的系統內核進行交叉編譯。
Ubuntu下搭建TQ2440的程序下載環境 http://www.linuxidc.com/Linux/2011-03/32869.htm
Ubuntu 12.04(32位)下TQ2440開發板環境搭建 http://www.linuxidc.com/Linux/2014-04/100085.htm
【Linux驅動】TQ2440 LED驅動程序 http://www.linuxidc.com/Linux/2014-06/103328.htm
一,內核的交叉編譯:
1.准備2.6.30.4版本的內核源碼包,這個我使用的是天嵌公司提供的內核源碼包linux-2.6.30.4_20121214.tar.bz2。
2.打開終端輸入指令:tar vxjf linux-2.6.30.4_20121214.tar.bz2 解壓內核源碼包得到一個名字為opt的文件夾,然後輸入指令:sudo mv opt /usr/local/ 將源碼剪切至usr/local下,當然這個你可以選擇移動到其他你喜歡的文件夾下。
3.輸入指令:cd /usr/local/opt/EmbedSky/linux-2.6.30.4 進入到內核源碼的目錄,然後輸入指令:ls 查看文件,找到一個名字為config_EmbedSky_W43(我的觸摸屏是4.3寸的,所以選擇這個),然後在當前目錄下輸入指令:cp config_EmbedSky_W43 .config,復制一份把他的名字修改為 .config。
4.登錄root,輸入指令:make menuconfig,然後彈出linux配置的界面--Linux Kernel Configuration,選擇最後一項--Save an Alternate Configuration File,然後選擇ok保存配置。
5.輸入指令:make 進行編譯即可(root權限)。什麼交叉編譯路徑的配置和支持平台的配置,人家天嵌公司在源碼裡面的Makefile文件裡早就給你配置好了,這個無需擔心。等待編譯結束後,進入內核的源碼文件夾下vmlinux,交叉編譯成功!
二,驅動程序的移植:
當順利完成內核的交叉編譯工作後,接下來就可以著手把驅動程序移植到目標板的系統內核中了,你只需要注意Makefile文件的編寫,把2.6.30.4內核的路徑和交叉編譯工具鏈arm-linux-gcc加進去,然後接下來直接輸入make指令,便編譯出了可以加載進TQ2440目標板系統內核的驅動模塊了。
具體Makefile的源碼如下(假設我要編譯的驅動程序的名字為mybeep):
obj-m:=mybeep.o
CC=arm-linux-gcc
KERNELDIR=/usr/local/opt/EmbedSky/linux-2.6.30.4
PWD:=$(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install