• Linux内核移植到JZ2440


    一、准备工作:
    1、Linux内核:Linux2.6.22.6,可从www.kernel.org上下载;
    2、交叉工具编译链:arm-linux-gcc-3.4.5-glibc-2.3.6;
    3、yaffs2文件代码;
    4、ubuntu9.10;
    5、JZ2440;
    二、内核移植:

    1、修改Makefile:
    修改内核源码根目录下的Makefile文件

    1 #ARCH        ?= arm
    2 #CROSS_COMPILE    ?=arm-linux-

    2、make s3c2410_defconfig其实就是使用./arch/arm/configs/s3c2410_defconfig配置内核生成根目录下的.config文件,
    以后就可以使用make menuconfig命令来修改配置
    3、使用make uImage生成内核
    4、通过nfs 30000000 192.168.1.20:/work/nfs_root/image/uImage;bootm 30000000,
    结果是乱码:原因是内核配置的晶振时钟不对,开发板V3使用的是12M晶振
    5、修改晶振
    修改arch/arm/mach-s3c2440/mach-smdk2440.c

    1 static void __init smdk2440_map_io(void)
    2 {
    3     s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
    4     s3c24xx_init_clocks(12000000);
    5     s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
    6 }

    6、重新make uImage生成内核并复制到Dram中启动,结果是找不到文件系统。
    7、修改MTD分区://此处需与uboot的分区参数一致,才能让内核找到文件系统
    修改文件 /arch/arm/plat-s3c24xx/common-smdk.c

     1 static struct mtd_partition smdk_default_nand_part[] = {
     2     [0] = {
     3     .name = "bootloader",
     4     .offset = 0,
     5     .size = 0x00040000,
     6     },
     7     [1] = {
     8     .name = "params",
     9     .offset = MTDPART_OFS_APPEND,
    10     .size = 0x00020000,
    11     },
    12     [2] = {
    13     .name = "kernel",
    14     .offset = MTDPART_OFS_APPEND,
    15     .size = 0x00200000,
    16     },
    17 
    18     [3] = {
    19     .name = "root",
    20     .offset = MTDPART_OFS_APPEND,
    21     .size = MTDPART_SIZ_FULL,
    22     }
    23 };

    再修改s3c2410_platform_nand_smdk_nand_info smdk_nand_info = { //此处可不改

    1 2 .tacls = 0,
    3 .twrph0 = 30,
    4 .twrph1=0,

    8、修改支持4.3寸LCD://可先不改,但没有图形界面
    copy JZ2440光盘中的“4.3寸LCD_mach_smdk2440.c”文件覆盖arch/arm/mach-s3c2440/mach_smdk2440.c
    9、向内核打yaffs2补丁
    cd yaffs2
    ./patch-ker.sh c linux-2.6.22.6/
    10、内核配置:
    进入内核目录,cp /arch/arm/configs/s3c2410_defconfig .config
    make menuconfig
    修改配置:
    ①.General setup ---> //可不改
    [*] Configure standard kernel features (for small systems) --->
    ②. System Type ---->
    [*] S3C2410 DMA support [*] Support ARM920T processor
    S3C2410 Machines --->
    [*] SMDK2410/A9M2410
    S3C2440 Machines --->
    [*] SMDK2440
    [*] SMDK2440 with S3C2440 CPU module
    ③.Boot options ---> //可不改
    将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
    改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )
    这里要特别注意root=/dev/mtdblock2 这个参数,mtdblock2是你的根文件系统所在的位置,和你在bootloader的分配有关,当然也和上述2。步骤的密切相关。不行的话多试几次。
    ④.[*] Enable loadable module support ---> //可不改
    [*] Module unloading
    [*] Automatic kernel module loading
    选择这两个,剩下的可以去掉
    ⑤.Device Drivers --->
    <*> Memory Technology Device (MTD) support --->
    [*] MTD partitioning support
    <*> NAND Device Support --->
    <*> NAND Flash support for S3C2410/S3C2440 SoC
    [ ] S3C2410 NAND Hardware ECC //这个要去掉

    ⑥.File systems----->
    Miscellaneous filesystems --->
    <*>YAFFS2 file system support

    11、重新make uImage生成内核并复制到Dram中启动,启动成功。//需要在Nand Flash上有fs_qtopia.yaffs2文件系统,还不支持nfs(network file system)

  • 相关阅读:
    NOIP模拟测试17
    C++11下的关键字
    Tyvj 1518 CPU监控(线段树)
    单身三连之三
    论求解线性方程
    单身三连之二
    单身三连之一
    20190719总结
    卡常
    论突变为零(不定更新)
  • 原文地址:https://www.cnblogs.com/hwli/p/9312225.html
Copyright © 2020-2023  润新知