zoukankan      html  css  js  c++  java
  • 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分区的根文件系统了,移植成功

  • 相关阅读:
    图像检索(image retrieval)- 11
    图像检索(image retrieval)- 10相关
    Mock.js简易教程,脱离后端独立开发,实现增删改查功能
    Azure Monitor (3) 对虚拟机磁盘设置自定义监控
    Azure Monitor (1) 概述
    Azure SQL Managed Instance (2) 备份SQL MI
    Azure Virtual Network (17) Private Link演示
    Azure Virtual Network (16) Private Link
    Azure Virtual Network (15) Service Endpoint演示
    Azure Virtual Network (14) Service Endpoint服务终结点
  • 原文地址:https://www.cnblogs.com/andyfly/p/9389677.html
Copyright © 2011-2022 走看看