最近由于要做TQ2440(ARM9)开发板上的驱动实验,所以要在主机(ubuntu13.10)上针对前面的目标板上的系统内核进行交叉编译。下面来谈谈如何进行交叉编译。
一,内核的交叉编译:
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
完!