硬件平台:FL2440
交叉编译工具:3.4.1(飞凌的开发板好像只用3.4.1和)
首先下载打开光盘资料找到2440-linux-2.6.28.tar,把它拷贝到samba服务器上解压缩为linux-2.6.28.7(注意直接在samba服务器上解压缩,就避免了内核文件修改权限)然后打开终端进入linux-2.6.28.7直接运行menuconfig ,进入配置界面,这里是别人配置好的。不需要配置,直接make zImage。就可以直接生成zImage可执行文件下载到开发板运行就可以了。
如果是从网上下载的源码,就需要自己进行修改和配置内核文件具体:步骤如下:
Linux-2.6.31.tar.bz2(在光盘资料/源码包/kernel源码目录下)
解压源码,进入目录
修改 Makefile: 183行:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux- (注意这里也可以直接交叉编译器的绝对路径)
修改时钟:
修改arch/arm/mach-s3c2440/mach-smdk2440.c 163行
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
这个一定要设置对,否则会打印出乱码。
修改机器码(根据实际情况,这个要和bootloader的匹配):
修改:arch/arm/tools/mach-types 379行:
s3c2440 ……………………… XXX 后面那个数就是机器码
配置:
#make menuconfig
在System Type选单下,s3c24XX Machine那部分,只选中
SMDK2410/A9M2410
SMDK2440
SMDK2440 with S3C2440 cpu moudle
编译过程中遇到了一下三个错误:
1,、编译2.6.2.87版本Linux,采用s3c2440的ARM,按照步骤一步一步编译完成后,当执行make zImage后出现了三个错误,错误如下:
(1)make[3]: *** [drivers/video/console/vgacon.o] Error 1
make[2]: *** [drivers/video/console] Error 2
make[1]: *** [drivers/video] Error 2
make: *** [drivers] Error 2
可以看出是device中的vga方面出现问题了,于是在网上找原因,发现很多人都出现了这个问题,于是按照网上DX们的指点,修改了Linux配置:
Device Drivers
---->Graphics support
----->Console display driver support
----->VGA text Console (这个选项不选就能解决此问题)
保存退出后,执行
make clean
make zImage
(2)make[1]: *** No rule to make target `|', needed by `firmware/keyspan/usa19qi.fw.gen.S'. Stop
make: *** [firmware] Error 2
我看不出来这个问题的根源所在,网上的DX们也说不出什么,困惑了我好几天,结果在一个论坛(忘了是哪个论坛了)的帖子上解决了这个问题,同样是修改Linux配置:
Device Drivers
---->Generic Driver Options
---->Include in-kernel firmware blobs in kernel binary
External firmware blobs to build into the kernel binary(取消这两个选项)
保存退出后,再执行
make clean
make zImage
解决方法:
删除源码根目录下的include/asm,文件夹,问题解决。
分析原因:linux/include/asm 文件夹是内核编译过程中创建的,创建结果就是一个指向文件夹asm-arm的链接,表明该系统的平台是arm架构的,而编译系统内核之前,是没有asm这个链接的,所以,在编译过程中,创建该链接时文件名字与asm文件夹的名字发生冲突,报错了。