我使用的不是SMDK2412的开发板,而是公司已经出货的2412的机器,原来用的是自己的一个OS,现在打算在他上面运行linux.
编译2.6的内核,需要比较新的gcc, 我暂时能找到的新版arm-linux-gcc也就是3.4.1。,之前用arm-none-linux-eabi-gcc 4.1编出来的zImage好大,基本不能用。对于开发工具和内核版本,我觉得还是越新越好(稳定版),否则可能会遇到一些稀奇古怪的问题。
1.修改Boot
使用公司原有的Boot, 在Boot启动Kernel的时候,加入的参数设定,然后用公司专用的usb更新工具烧录kernel到flash中,启动机器以后显示了一堆乱码,在启动参数 console=ttySAC0后面加上了,115200,设定波特率以后一切OK.
2.MTD分区:修改文件common-smdk.c , 修改其中的MTD设备的分区。
新的kernel里面已经有了默认分区表,我们只要根据我们需要来做部分修改就可以,我的nand有512MB, 我目前只是将前面的2M分给boot,kernel, 紧接下来的4M分给rootfs,打算暂时加载一个 简单的cramfs。其他的nand都还没有用。
3.取消NAND驱动中的ECC读校验,以及坏块监测部分, 因为NAND操作部分,boot和kernel有一些不同。
重启以后,mount root分区失败,还打出了I/O 错误。 关闭了ECC校验,修改了pc工具的烧录地址以后,ok. 这都是因为我们的烧录工具使用的地址表示方法和ecc的方式有一些不同。
4.烧录 root 文件系统。
拿了一个在kernel2.4 2440 上用过得cramfs直接来用,提示找不到dev/console, 上网查了一遍,应该是因为现在新版的kernel去掉了devfs的缘故,为了先快速的有一个可执行环境,所以在网上找了一个现成的,已经自己建立好节点的cramfs,里面的busybox版本也比较新。
开机运行,总算见到了亲爱的shell.