FL2440移植linux-3.0全过程(1)内核启动

时间:2021-06-08 16:31:56

1解压缩文件

tar -jxf linux-3.0.tar.bz2

cd linux-3.0

2修改makefile,配置CPU类型和交叉编译器(195,196行)

ARCH        ?= arm

CROSS_COMPILE   ?= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-

注意:在配置交叉编译器路径的时候,不要多加多余的空格,否则编译器不会被找到,我刚刚修改的cross_compile的时候,就是因为在arm-linux-后面多加了一个空格,然后编译器找不到,害得我搞了很久才发现。

添加zImage头制作(559行后面)

    cp arch/arm/boot/zImage . -f

    ../u-boot-2010.09.bak/tools/mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n "Linux Kernel" -d   zImage    

linuxrom-s3c2440.bin

rm -f zImage

该段是在linux编译的内核的前面,加上一个64字节的头,让u-boot能够引导内核启动

3拷贝 arch/arm/configs/s3c2410_defconfig作为.config的模板,

make menuconfig

System Type  --->

       [*] SMDK2440   

       [*] SMDK2440 with S3C2440 CPU module      

Kernel Features  --->

       [*]UsetheARMEABItocompilethekernel                                                     

       [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTAL)

 

4修改时钟和串口

arch/arm/mach-s3c2440/mach-smdk2440.c中的__init smdk2440_map_io()函数中对时钟的初始化修改为12MHz:

s3c24xx_init_clocks(12000000);

drivers/tty/serial/samsung.c中设置如下:

#define S3C24XX_SERIAL_NAME  "ttyS"

uart_driver s3c24xx_uart_drv结构体中的.driver_name设置为如下

.driver_name    = "ttyS",

5修改arch/arm/tools/mach-types,将machine_ID配置为如下

s3c2440         ARCH_S3C2440        S3C2440         1999

mini2440        MACH_MINI2440       MINI2440        362 

6 开始编译:make 

编译好了之后,把linxurom-s3c2440.bin 下载到开发板的30008000地址下,启动,这时候我们发现,我们的开发板已经跑起来了,可以进入内核了。高兴一下吧,这几天都在调试内核,配置make menuconfig,把我搞晕了,太多的选项要选。。。。。。。。。慢慢来吧!