操作系统: Ubuntu 9.04 交叉编译工具: arm-linux-gcc-4.1.1 开发板: 2410-S(s3c2410s)注意:蓝色为命令,橘红色为要添加或修改的代码和脚步,浅绿色是对mdev的支持,红色为要注意的地方本文使用mdev(udev的BusyBox简化版),并且不再额外添加代码使内核能够支持devfs(devfs是linux-2.6.12及其以前版本的设备文件系统,但是在linux-2.6.13及其以后的版本中用的是udev。既然已经淘汰了,就不要再添加回来了)。使内核能够支持devfs,主要目的是使内核启动后并在/sbin/init运行之前能自动挂载/dev为devfs文件系统。这样可以避免没有控制台(控制台设备文件)可供init用来按照inittab 的指示开一个shell。本人使用了另一种方法来避免这一问题:直接将串口0/devs3c2410_serial0当/dev/console,这样在mdev -s还没执行前(mdev -s通过扫描/sys/class目录下,所有的dev属性文件,并从这些dev属性文件获取到设备的主次设备号,再为其在/dev目录下创建相应的设备节点。mdev -s还没执行前,/dev目录下一般只有/dev/console、 /dev/null。这两个设备文件是init至少要用到的)init就可以直接使用/dev/console作为控制台开一个shell。因此,本文制作的内核可能需要有一定根文件系统的特殊要求,可参考本人另一篇文章《使用BusyBox制作linux根文件系统(CramFS+mdev》:若你还是想用devfs,可参考另一篇文章《移植Linux2.6.24.7到博创2410-S(s3c2410s),包括AX88796移植》: 一、下载并解压Linux2.6.24.7内核源码 从网上下载linux-2.6.24.7内核源码到/arm2410s目录下,并解压 lingd@ubuntu:~/arm2410s$ tar xzvf linux2.6.24.7.tar.gz lingd@ubuntu:~/arm2410s$ cd linux2.6.24.7 进入内核解压后的目录 注:以后示例中,只要是相对路径全部是相对于~/arm2410s/linux2.6.24.7/此目录 内核下载地址: 二、修改内核源码根目录下的Makefile文件 lingd@ubuntu:~/arm2410s/linux-2.6.24.7$ vi Makefile 修改Makefile中的ARCH和CROSS_COMPILE变量,修改为 ARCH = arm CROSS_COMPILE = arm-linux- //该值是交叉编译器的前缀,具体值因人而异 注:arm和arm-linux-后面不能有空格,否则make menuconfig时会出现“/arm2410s/linux-2.6.24.7/arch/arm: 是一个目录”错误。 三、设置nand flash分区信息 修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息(这部分信息应该与vivi中的flash(mtd)分区对应起来,不可随便设置)。 (LED 器件的初始化也在这个文件里,但是博创的平台没有那四个LED管,所以要不要那些程序都无所谓。我就把它们放在那里,反正启动时不会有影响,也没有出错信息。) 修改的内容如下: static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "vivi", .size = SZ_128K, .offset = 0, }, [1] = { .name = "param", .offset = SZ_128K, .size = SZ_1M-SZ_128K, }, [2] = { .name = "kernel", .offset = SZ_1M, .size = SZ_1M * 3, }, [3] = { .name = "root", .offset = SZ_4M, .size = SZ_4M * 5, }, [4] = { .name = "user", .offset = SZ_4M * 6, .size = SZ_4M * 10, }, }; 注意:请不要画蛇添足地在进行自定义nand flash分区时仍然按照以前内核的移植步骤,在devs.c中自己添加分区信息,不然系统启动时会有出错信息: kobject_add failed for s3c2410-nand with -EEXIST, don't try to register things with the same name in the same directory. [<c00290a8>] (dump_stack+0x0/0x14) from [<c0110a9c>] (kobject_shadow_add+0x160/0x1a8) [<c011093c>] (kobject_shadow_add+0x0/0x1a8) from [<c0110af8>] (kobject_add+0x14/0x18) [<c0110ae4>] (kobject_add+0x0/0x18) from [<c015117c>] (device_add+0xa0/0x568) [<c01510dc>] (device_add+0x0/0x568) from [<c0155180>] (platform_device_add+0x100/0x150) [<c0155080>] (platform_device_add+0x0/0x150) from [<c01551f0>] (platform_device_register+0x20/0x24) r7:c0022a10 r6:c0020a1c r5:00000000 r4:c02cab30 [<c01551d0>] (platform_device_register+0x0/0x24) from [<c01553f8>] (platform_add_devices+0x24/0x6c) r4:00000000 [<c01553d4>] (platform_add_devices+0x0/0x6c) from [<c0011df4>] (smdk_machine_init+0x84/0x98) r8:c03b8000 r7:00000000 r6:c0020a1c r5:00000000 r4:c0021404 [<c0011d70>] (smdk_machine_init+0x0/0x98) from [<c0011178>] (smdk2410_init+0x1c/0x24) [<c001115c>] (smdk2410_init+0x0/0x24) from [<c000f0bc>] (customize_machine+0x20/0x2c) [<c000f09c>] (customize_machine+0x0/0x2c) from [<c0008914>] (kernel_init+0xb8/0x284) [<c000885c>] (kernel_init+0x0/0x284) from [<c003d688>] (do_exit+0x0/0x76c) 我一开始就犯了这个毛病。具体情况请参阅:以及/arch/arm/plat-s3c24xx文件夹下的common-smdk.c和devs.c。
S(含AX88796驱动及mdev支持)
内容版权声明:除非注明,否则皆为本站原创文章。