经过一段时间的摸索,今天总算将2.6.35.5内核成功移植到了tq2440上,总体来说和2.6.30.4内核移植变化不大,可以参考文章tq2440 Linux 2.6.30.4内核移植完成大部分工作,文件系统也采用该文章中制作的即可。但移植过程中也存在一些差异,在这里总结出来。
(1) General setup --->
Choose SLAB allocator (SLAB)
这里使用SLAB,虽然采用SLUB性能更好,但如果采用SLUB,在运行时出现错误:can't run '/etc/init.d/rcS': No such file or directory,从天嵌论坛看到采取这个办法可以解决,试了,的确可以,但原因在哪里仍待查找,毕竟还是希望使用SLUB。
(2) System Type --->
MMU-based Paged Memory Management Support
一定要选上,不然在挂载根文件系统时会出现很多错误,实践证明,而且这个项就是开启页管理,应该的。
(3) 串口驱动移植有变化,配置方面没有变化,但修改内核文件出现变化,在修改 drivers/serial/samsung.c时,参考http://blog168.chinaunix.net/space.php?uid=24189228&do=blog&id=34993
头文件添加为
#include <mach/regs-gpio.h>
#include <mach/gpio-fns.h>
#include <mach/gpio-nrs.h>
修改语句为
if (port->line == 2) {
s3c2410_gpio_cfgpin(S3C2410_GPIONO(S3C2410_GPIO_BANKH, 6), S3C2410_GPH6_TXD2);
s3c2410_gpio_pullup(S3C2410_GPIONO(S3C2410_GPIO_BANKH, 6), 1);
s3c2410_gpio_cfgpin(S3C2410_GPIONO(S3C2410_GPIO_BANKH, 7), S3C2410_GPH7_RXD2);
s3c2410_gpio_pullup(S3C2410_GPIONO(S3C2410_GPIO_BANKH, 7), 1);
}
这里的操作发生了改变,参考2.6.30.4与2.6.35.5的内核代码,可以看到
2.6.30.4 #define S3C2410_GPH6 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 6)
2.6.35.5 中没有这个定义,但有S3C2410_GPIONO和S3C2410_GPIO_BANKH的定义,因此需要自己构造S3C2410_GPH6
另外,如果深入内核去看,2.6.35.5中,定义了一个新的结构体struct s3c_gpio_chip,该结构体封装了gpio的相关的实现,里面还封装了对配置寄存器的操作方法甚至于还分配了一个自旋锁,具体有哪些内容需要参看内核源码,其中的注释也说明的很详细。因此,在该版本内核中,对ARM的gpio的处理把它真正当做了一个设备。