1、首先是要修改顶层的Makfile
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
这一步是在安装了交叉编译连的前提下进行的
2、去内核里面找到对应的开发板的名字,由于linux-2.6.34这个内核已经更新到能直接支持mini2440,所以省掉了我们修改系统时钟的一些步骤,之前的内核版本不支持mini2440通过以下方式修改
修改arch/arm/mach-s3c2440/mach-smdk2440.c ln163 static void __init smdk2440_map_io(void){s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));s3c24xx_init_clocks(12000000); //default is 16934400, changed by yangdks3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));}新版本的内核当中的mach-mini2440.c对比与mach-smdk2440.c的以上部分已经得到了修改。
3. 修改对nand的分区信息。要让内核知道nand flash的分区信息,设置成跟bootloader一致,这里我们的分区用的是韦东山的典型的分区,方便以后做实验用。当然如果我们这里不修改内核里面指定的nand flash分区那么我们就势必要修改u-boot里的nand flash 的分区了。在arch/arm/plat-s3c24xx/common-smdk.c中修改smdk_default_nand_part[]也可以在这个地方修改我们的LED的初始化,已经被我修改了.[0] = { .name = "bootloader",//to startfrom nand flash .size = SZ_128K*2,//256k .offset = 0, }, [1]= { .name = "params", .offset = SZ_128K *2, .size = SZ_128K, }, [2]= { .name = "kernel", .offset = SZ_128K*3, .size = SZ_2M, } [3]= { .name = "root", .offset = SZ_128K*3+SZ_2M, .size =SZ_32M*8-SZ_128K*3-SZ_2M, }4、添加DM9000网卡驱动,发现我们的板子需要make menuconfig 添加网卡就行了,
/home/yl/linux_kernel_yangliu/linux-2.6.34.1/arch/arm/configs这个目录下能找到一些配置恩见注意的是1. make mini2440_defconfig,这一步是生成.config(生成了针对mini2440的配置)是在内核的根目录的隐藏文件,我们可以用vi .config来产看用/MINI2440来搜索看是真的生成了这个配置 其中的第一步是默认的配置,但是这个要用make menuconfig的话就能图形化配置2.make uImage,编译内核的镜像文件编译结束得到arch/arm/boot/uImage文件,(需要编译uboot将编译命令mkimage移动到虚拟机的交叉编译文件夹的/bin目录下)
每次重新编译之前都要make clean 然后再次执行上面的步骤
5、如何裁剪内核使他只支持单个的mini2440单板,我们去./config查看搜索/MINI2440,有很多并列的单板,这个时候我们可以通过make menuconfig删除它们。还可以选择文件系统的支持sudo apt-get updatesudo apt-get install build-essentialsudo apt-get install libncurses5
sudo apt-get install libncurses5-dev这些步骤就能使用make menuconfig了
6实现文件的挂载,那个版本的内核就用那个版本的内核下载到开发板,这样才能保证insmod .ko的时候不会出错 |