1、linux内核移植

 

操作系统:ubuntu 8.10

交叉编译工具:arm-linux-gcc 4.3.3

内核:从2.6.30.6移植到2.6.31.6中

一、移植内核

1.解压内核源码

   从www.kernel.org/下载源码包:linux-2.6.31.6.tar.gz,并解压

 #mkdir /opt/EmbedSky  

 #tar zxvf linux-2.6.31.6.tar.gz –C /opt/EmbedSky/

 #cd /opt/EmbedSky/linux-2.6.31.6

2.在系统中添加对ARM的支持

进入linux 2.6.31.6内核中,修改顶层Makefile,如下所示:

    183 ARCH = arm

    184 CROSS_COMPILE = arm-linux-  

3.修改平台时钟

   修改平台的时钟频率,以满足TQ2440开发板的工作频率。修改内核源码“arch/arm/mach-s3c2440/mach-smdk2440.c”文件的163行,把16.9344M改为12M,因为TQ2440使用的是12M的外部时钟源



4.修改机器码

在TQ2440使用的uboot中设定了机器码为168,所以内核需要修改机器码,在内核源码的“arch/arm/tools/mach-types”文件中,在第379行把原来的362改为168

5.修改MTD分区

改变分区时,修改“arch/arm/plat-s3c24xx/common-smdk.c”文件中的smdk_default_nand_part结构体即可

#vim arch/arm/plat-s3c24xx/common-smdk.c,添加自己的分区即可,如下所示:

 

 

    同时修改drivers\mtd\nand\s3c2410.c,

chip->ecc.mode        = NAND_ECC_SOFT

改成

chip->ecc.mode        = NAND_ECC_NONE

6.给内核打yaffs2文件系统的补丁

 http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/网站上下载yaffs源代码包cvs-root.tar.gz,放在linux系统的/home/liwenjie/share目录下

      #cd ~liwenjie/share

      #tar zxvf cvs-root.tar.gz –C  .

      #cd cvs/yaffs2/        

      #./patch-ker.sh c /opt/EmbedSky/linux-2.6.31.6

7.修改串口名称(可以省略)

该步骤可以省略,前提是你的根文件系统中/etc/inittab文件中的串口名称与内核中的串口名称一致。由于我的根文件系统中/etc/inittab中的串口名称为s3c2440_serial0,因此需要修改内核中的串口名称。
        1)#vim drivers/serial/samsung.c
      2)修改该文件中s3c24xx_uart_drv变量的dev_name成员为s3c2440_serial即可

如下图所示:



8.把生成的镜像放在指定位置(可选)

   修改linux-2.6.31.6\arch\arm\boot下的Makefile,这样就可以把生成的zImage压缩成zImage.bin。58行加入@cp -f arch/arm/boot/zImage zImage.bin,如下所示:

 

   如果想要make distclean的时候,能够把生成的zImage也一起删除,就要修改linux-2.6.31.6下的Makefile。在1242行最后加上rm -f zImage.bin   


二、配置内核

   先调用“arch/arm/configs/s3c2410_defconfig”这个默认配置单,然后在此基础上增加、去除一些配置选项

1. 进入配置界面,调用arch/arm/configs/s3c2410_defconfig

# make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

选择选项:“Load an Alternate Configuration File”,然后调用“arch/arm/configs/s3c2410_defconfig”这个默认配置单



    或直接执行 #make s3c2410_defconfig ,导入默认配置单

2. 选择支持开发板类型

System Type--->

         S3C2410 Machines--->

           [*]SMDK2410/A9M2410选上 其余不选

        S3C2440 Machines--->

           [*]SMDK2440

           [*]SMDK2440 with S3C2440 CPU module,其余不选

其余的Machines下选项全部不选(如2400,2412,2442,2443)

3. 选择支持EABI(交叉编译器)

Kernel Features--->

[*]Use the ARM EABI to compile the kernel

4.选择支持yaffs2文件系统

Filesystem--->

       Miscellaneous filesystems--->

           <*>YAFFS2  file system support

           [*] Lets Yaffs do its own ECC

       Native language support

<*> Codepage 437 (United States,Canada)

<*>Simplified Chinese charset(GB2312)

<*>Traditional Chinese charset(Big5)

<*>NLS ISO 8859-1(Latin1:Western European Languages)

<*>NLS UTF-8

5.对MTD的配置

Device Drivers--->

       Memory Technology Device(MTD) support--->

            [*]MTD partitioning support

            [*]Command line partition table parsing

            <*>Direct char device access to MTD devices

            <*>Caching block device access to MTD devices

             NAND Device Support--->

                   <*>NAND Flash support for Samsung S3C SoCs

                   < >Samsung S3C NAND Hardware ECC

6.对Boot options的配置(对刚用busybox制作的文件系统时,要选上此项)

   Boot options->

       在Default kernel command string中输入  bootargs=noinitrd init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock2 rw rootfstype=yaffs

其中的init指明kernel执行后要加载的第一个应用程序,缺省为/sbin/init,此处指定为/linuxrc

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值