zoukankan      html  css  js  c++  java
  • 向tiny6410中移植中移植linux-4.5.1内核(最新)

    下载linux-4.5.1.tar.gz

    解压在任意目录下。我解压在/home/tiny6410/

    # tar xvzf linux-4.5.1.tar.gz 
    # cd linux-4.5.1/

     修改Makefile文件 在第251和252行上  改成自己的交叉编译器

    251  ARCH              ?= arm
    252  CROSS_COMPILE     ?= arm-linux-        
    

     在linux源码文件中有一个三星Demo板的默认配置

    这里我们的配置文件就先用这个  arch/arm/configs/s3c6400_defconfig 并make

    # make s3c6400_defconfig
    # make

    注:在执行make语句后会报错

    arm-linux-ld: ERROR: Source object virt/built-in.o has EABI version 0, but target .tmp_vmlinux1 has...

    是EABI版本的问题

    我解决的方法是更换了交叉编译器

    # sudo apt-get install gcc-arm-linux-gnueabi
    

    修改Makefile文件

    251  ARCH              ?= arm
    252  CROSS_COMPILE     ?= arm-linux-gnueabi-  
    

    之后make就正常了

      命令行输入:

    # make zImage
    

    将uImage放到tftp服务器目录下,启动开发板,你将会看到内核启动的提示信息

    在通过串口看到传回来的信息后,心里很高兴。不过系统并没有启动成功,因为上面并没有文件系统

    这里我的开发板上tiny6410,故这里用linux内核中的mini6410的相关文件进行修改。

    首先修改资源代码,进入arch/arm/mach-s3c64xx/目录

    在这里我们使用mini6410的资源配置文件,首先复制一份mach-mini6410.c为mach-tiny6410.c。

    修改mach-tiny6410.c

    # cd arch/arm/mach-s3c64xx
    # cp mach-mini6410.c mach-tiny6410.c
    # vim mach-tiny6410.c

    把文件中所有mini6410改为tiny6410

    :%s/mini6410/tiny6410/g

    :%s/MINI6410/TINY6410/g

    在346行左右MACHINE_START(MINI6410,”MINI6410”)不改 就可以不改硬件码

    修改struct mtd_partition结构体内容,此结构体用于保存nandflash分区信息(这些设置与Bootloader有关,不能任意设置)

    static struct mtd_partition tiny6410_nand_part[] = {

             {

                       .name                = "Bootloader",

                       .offset                = 0,

                       .size          = (4 * 128 *SZ_1K),

                       .mask_flags     = MTD_CAP_NANDFLASH,

             },

             {

                       .name                = "Kernel",

                       .offset                = (4 * 128 *SZ_1K),

                       .size          = (5*SZ_1M) ,

                       .mask_flags     = MTD_CAP_NANDFLASH,

             },

             {

                       .name                = "File System",

                       .offset                = MTDPART_OFS_APPEND,

                       .size          = MTDPART_SIZ_FULL,

             }

    };

    这里有个bug我们需要屏蔽掉

    进入driver/mtd/nand/目录,打开nand_base.c文件,找到3265行附近的

       Case 128:

                       Chip->ecc.layout = &nand_oob_128;

                       Break;

    在此行下添加

             Case 436:

                       Chip->ecc.layout = &nand_oob_128;

                       Break;

    之后我们需要关闭ECC校验

    进入driver/mtd/nand/目录,修改s3c2410.c文件

    找到chip->ecc.mode = NAND_ECC_SOFT

    改为chip->ecc.mode = NAND_ECC_NONE;

    然后我们需要增加devfs文件管理器的支持,修改fs/Kconfig,找到menu "Pseudo filesystems"

    在之后添加

    config DEVFS_FS

             bool "/dev file system support (OBSOLETE)"

             default y   

    config DEVFS_MOUNT

    bool "Automatically mount at boot"

    default y

    depends on DEVFS_FS

    修改arch/arm/mach-s3c64xx/Kconfig文件

    找到config MACH_SMDK6410

    Cp一整段MACH_SMDK6410

    把新的MACH_SMDK6410改为MACH_TINY6410 下一行的SMDK6410也改成TINY6410

    修改arch/arm/mach-s3c64xx/Makefile文件

    添加一行obj-$(CONFIG_MACH_TINY6410)         +=mach-tiny6410.o

    在源代码根目录中执行make menuconfig

    (我只列出必选项,必须禁止选项会特殊说明,一般我们只增不减)

    进入System type --->

      ARM system type(Samsung S3C64XX)   //这项一定要正确

            ………………

           *** System MMU ***

            [*]TINY6410                          //在System MMU中选择tiny6410

    进入Device Drivers --->

        <*>Memory Technology Device (MTD) support --->

           ………………

           <*> Caching block device access to MTD devices

           ………………

           <*> NAND Device Support --->

        <*> NAND Flash support for Samsung S3C SoCs

    进入与 <*>Memory Technology Device (MTD) support ---> 同一等级列表的Block devices  选上<*> RAM block device support

     

    退回到主界面,进入File systems,在这里自己选择需要的文件系统,

    进入File systems的 Pseudo filesystems--->

    选上 [*] /dev file system support(OBSOLETE)

          [*]   Automatically mount at boot

    (这两项即为之前我们添加的devfs 文件管理器支持)

     

    回到主界面,进入Boot options,里面有一行是需要我们自己手动填写的,是linux启动参数,在这里我初略说一下

     

    Noinitrd   

    不使用临时的根文件系统

     

    该参数告诉内核启动时使用哪个设备作为根文件系统。比如第3分区作为根文件系统:root=/dev/mtdblock2

     

    Rootfstype=…   

    根文件系统类型(比如rootfstype=cramfs)

     

    Ro/rw         

    ro以只读方式加载根文件系统,rw以读写方式加载(rw为默认值)

    Init=..      

    初始化进程名(使用busybox制作的根文件系统这一项一般为init=/linuxrc)

    Console=…

    字面意思:控制台,就是控制台信息输出到哪,这里TINY6410填ttySAC0,115200

    我的启动参数为root=/dev/mtdblock2 console=ttySAC0,115200 lcd=S70D

    设置完毕,保存信息,编译内核吧.

  • 相关阅读:
    li float后IE下有空格
    [转]输入框对齐问题
    footer贴在底部的布局
    css3.0参考手册
    Java变量的命名规范
    刷题01
    前端面试题
    Cadence学习封装制作(焊盘)
    Cadence学习文档后缀简介
    Cadence学习PCB设计(序)
  • 原文地址:https://www.cnblogs.com/ynxf/p/5398453.html
Copyright © 2011-2022 走看看