Linux内核移植简述


以s5pv210为例简要说明。
1、选平台
A、修改顶层Makefile
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
就是在指定arch\arm目录需要交叉编译编译,其他体系平台下的目录则不会。

B、拷贝arch\arm\configs\s5pv210_defconfig到顶层目录下
打开终端,进到内核顶层目录,并执行:
# make s5pv210_defconfig
核心板是抄袭三星公司的demo板,所以我们可以参考三星DEMO板来移植,这一步就是选择三星公司基于s5pv210的基础配置。

C、编译验证
# make
验证环境及选配平台,一般没有问题的话就编译出来内核,把arch\arm\boot\zImage用tftp上传验证下,看能不能起来。

D、常见错误
Uncompressing Linux...  done, booting the kernel.
停下来不动了。
大多数的原因是内核启动参数不对
A、U-bOOT环境变量设置的启动参数错误(console=ttySAC0,115200:这个是在指定输出终端,如果错误,内核跑起来了,没有正确的输出终端,所以看不到信息)
B、目前有内核对启动参数有两种格式解析
Bootloader把传递给内核的参数写死在内存偏移0x100(内核板文件写死的)的位置,内核初始化的时候会从这里去读启动参数。如果bootloader写如参数格式和内核解析格式不一样,也会造成启动参数解析失败。最好验证的方式是先在内核写死启动参数(通过make menuconfig,注意相应的内核启动参数使用方式的选配),也可以试试make mennuconfig选择下老格式支持。

2、板文件修改定制arch\arm\mach-s5pv210\mach-smdkv210.c
开源的设备代码往往是写成platform设备,那板文件实际上最主要的工作就是添加设备。platform_device(IO内存、中断号及参数)就是设备的抽象。
static struct platform_device *smdkv210_devices[] __initdata = {
    &s5pv210_device_iis0,
    &s5pv210_device_ac97,
    &s3c_device_adc,
    &s3c_device_ts,
    &s3c_device_wdt,
};
注:三星公司把某些设备的定义放到了arch\arm\plat-samsung\目录及arch\arm\plat-s5p\目录下。

3、选配内核模块
# make menuconfig
A、选驱动(platform_device对应的驱动platform_driver)
B、逻辑层代码
譬如选择了网卡驱动,就必须要协议模块;NANDFLASH就必须要分区支持及文件系统模块。

相关内容