• Linux移植之移植步骤


    在这里总结一下我在移植Linux2.6.22.6内核过程时的步骤。移植成功后最终能挂接做好的根文件系统,并且启动第一个init程序。移植的步骤如下:

    1、将网上下载的内核源码文件linux-2.6.22.6.tar.bz2放入/work/system路径下。

    2、切换到/work/system,使用tar xjf linux-2.6.22.6.tar.bz2解压缩内核源码文件得到一个名为linux-2.6.22.6的文件夹

    3、cd linux-2.6.22.6切换到内核文件夹

    4、修改顶层Makefile文件使得 ARCH ?= arm;CROSS_COMPILE  ?= arm-linux-

    5、执行make s3c2410_defconfig修改内核配置,最终会生成一个.confg文件

    6、执行make menuconfig配置内核,会读取.confg文件然后根据这个文件的基础上更改配置,这里配置先不用更改,直接退出

    7、make uImage之后,将产生的uImage文件通过UBOOT的usb下载功能下载到指定地址,内核分区

    8、在uboot界面执行boot启动内核,可以看到内核启动之后出现一片乱码

    9、更改CPU的时钟晶振,找到 (archarmmach-s3c2440Mach-smdk2440.c)文件,将327行的s3c24xx_init_clocks函数里的16934400改为12000000,代表12M晶振

    324        static void __init smdk2440_map_io(void)
    325        {
    326            s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
    327            s3c24xx_init_clocks(12000000);//将16934400改为12000000
    328            s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
    329        }

    10、将更改过的代码继续编译make uImage,重复第7步骤。

    11、发现乱码消失了,但是还是不能启动位于nand flash上的第四分区的根文件系统

    12、更改MTD分区,找到 (archarmplat-s3c24xxCommon-smdk.c)文件,将smdk_default_nand_part数组改为如下的形式,这表示将nandflash分为四个区:bootloader区、params区、kernel区、root区。

    118    static struct mtd_partition smdk_default_nand_part[] = {
    119        [0] = {
    120            .name    = "bootloader",
    121            .size    = 0x00040000,
    122            .offset    = 0,
    123        },
    124        [1] = {
    125            .name    = "params",
    126            .offset = 0x00040000,
    127            .size    = 0x00020000,
    128        },
    129        [2] = {
    130            .name    = "kernel",
    131            .offset = 0x00060000,
    132            .size    = 0x00200000,
    133        },
    134        [3] = {
    135            .name    = "root",
    136            .offset    = 0x00260000,
    137            .size    = 0x0fda0000,
    138        }
    139    };

    13、将更改过的代码继续编译make uImage,重复第7步骤。

    14、发现内核还是不能挂接根文件系统,出现No filesystem could mount root, tried:  ext3 ext2 cramfs msdos vfat romfs字样。

    15、增加yaffs2文件系统支持nandfalsh

      a、从网上下载的yaffs_source.tar.gz放到/work/system目录下
      b、tar xzf yaffs_source.tar.gz解压得到Development目录下分别有yaffs2和yaffs两个文件夹,其中yaffs2是比较新的文件系统
      c、进入yaffs2文件夹后,./patch-ker.sh c /work/system/linux-2.6.22.6打补丁到内核所在目录

        上述命令完成以下三件事情

          1)、修改内核fs/Kconfig文件,增加source "fs/yaffs2/Kconfig",表示读入fs/yaffs2/Kconfig这个Kconfig文件。

          2)、修改内核fs/Makefile文件,增加obj-$(CONFIG_YAFFS_FS) += yaffs2/,表示增加yaffs2/目录编译

          3)、将yaffs2源码目录下的Makefile.kernel文件复制为内核fs/yaffs2/Makefile

              将yaffs2源码目录下的Kconfig文件复制到内核fs/yaffs2/目录下

              将yaffs2源码目录下的*.c、*.h文件(不包括子目录下的文件)复制到内核fs/yaffs2/目录下
      d、make menuconfig配置内核支持yaffs2文件系统
        File systems
        Miscellaneous filesystems
        <*>YAFFS file system support

    16、将更改过的代码继续编译make uImage,重复第7步骤。

    17、发现内核可以启动位于root分区的根文件系统了,移植成功

  • 相关阅读:
    将Tue Feb 22173124 CST2022换为20220222
    curl命令
    部署高可用kafka暴露外网访问并使用go代码测试
    转发:自定义博客园cnblog主题样式Ⅱ(SimpleMemory)
    npm与cnpm切换使用
    从层序遍历构造一棵二叉树
    【ORACLE】“IMP00013: 只有 DBA 才能导入…”解决方法
    vimeasymotion操作
    fd详解
    fasd用法
  • 原文地址:https://www.cnblogs.com/andyfly/p/9389677.html
Copyright © 2020-2023  润新知