uboot及kernel移植配置步骤

本文详细介绍了U-Boot与Linux内核的移植步骤,包括如何配置和编译U-Boot,解决烧写单板问题,以及内核裁剪配置方法。特别关注了CPU时钟、内存控制器、环境变量、分区设置等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

 uboot-2012.04

linux-3.4.2

***************************************************************************************************************************

若uboot和内核版本源码所支持的默认配置文件不包括要移植单板的型号,则该uboot和内核修改时,只有其核心功能可以使用,外围功能都不能使用!

**********************************************************************************************************************************

一、uboot移植步骤:

只需修改三处即可成功配置和编译:

1、board/sansung/:cp   smdk2410/   smdk2440    -rf  、mv    smdk2410.c   smkd2440.c

2、include/configs/: cp   smdk2410.h    smdk2440.h   //ubootdanb单板相关配置文件很关键,uboot裁剪及很多配置都在此文件                                                                                           中修改

3、vi   boards.cfg:  添加smdk2440信息

4、配置       make smdk2440_config        //在单板名后加“_config”

5、编译      make

*****************************配置、编译   success!*****************************************************************

但是烧写单板不成功,调试:

6、uboot配置、编译通过后,要烧写到新单板上运行,必须修改设置适合新单板的CPU时钟设置内存时钟设置

主要是针对CPU时钟和内存进行设置:

1)CPU时钟设置:

      start.S中先以60MHz时钟参数来设置内存控制器,但是CPU时钟MPLL还未设置;

改进:在arch/arm/cpu/arm920t/start.S中添加时钟分频系数设置和CPU时钟设置,(删除start.S中原分频系数设置,并取消board_init_f到init_sequence到board_early_init_f中对MPLL的设置)

2)内存时钟设置:

     在cpu_init_crit到lowlevel_init到SMRDATA:修改13个内存控制器寄存器数据;

3)乱码现象:修改串口波特率

        在board_init_f到init_sequence到serial_init到serial_init_dev到serial_setbrg到get_pclk到get_pclk:发现需要定义CONFIG_S3C2440;

改进:在include/configs.smdk2440.h中:

           添加  #define  s3c2440_CONFIG

           删除 #define  s3c2410_CONFIG

4)修改乱码后编译uboot报错,关于nand

       改进:在include/configs.smdk2440.h中:

                  屏蔽/*  #define CONFIG_CMD_NAND*/

5)重新编译烧写单板,有正确串口信息输出

      但提示:WARNING:Cache  not  enable

                     Flash:***failed ***

                     ###ERROR###  Please RESET the board###          //说明不支持flash

********************************************************************************************************************************

接下来进行uboot的flash设置

7、uboot支持nand启动的设置

8、uboot支持DM9000网卡的设置

9、uboot环境变量的设置

        uboot执行时会读取设置的环境参数,并判断是否有效,若有效则用,若无效则使用默认环境参数;

     注:在uboot界面使用命令擦除环境参数分区,即可是uboot使用默认环境参数

                nand   erase 40000 20000 

   1)默认环境参数配置在common/env_common.c中default_environment[  ]该数组包含了所有默认启动环境参数:bootargs、             bootcmd、ipaddr、serverip、ethaddr等,这些默认环境参数的具体配置均在include/configs/smdk2440.h中添加宏定义来           设置。

   2)uboot环境参数是在include/configs/smdk240.h中添加设置:

           #define   CONFIG_BOOTARGS    "console=ttySAC0,115200    root=/dev/mtdblock3"

           #define   CONFIG_BOOTCMD      "nand read.jffs2   30000000     60000 200000; bootm   30000000"

          smdk2440.h中还可以添加其它启动配置参数的hong宏定义

     3)在smdk2440.h中可以添加设置uboot分区mtdparts的宏定义:

             #define   CONFIG_CMD_MTDPARTS

             #define   CONFIG_CMD_DEVICE

             #define    MTDIDS_DEFAULT         "nand0=jz2440-0"            //名字可以随便写

             #define    MTDPARTS_DEFAULT     "mtdparts=jz2440-0:256k(u-boot),"          \

                                                                        "128k(params),"                                    \

                                                                          "2m(kernel),"                                     \

                                                                           "-(rootfs),"

           此外需要在board.c中tian添加:

                 mtdparts_init();

                 run_command("mtdparts  default", 0);

     uboot划分分区之后就可以在uboot界面使用mtdparts命令chak查看分区,也可以使用分区名代替地址进行擦除烧写;

 

 

**************************************************************************************************************************

kernel移植步骤:

1、修改顶层Makefile:

           ARCH       ?= arm

           CROSS_COMPILE         ?=     arm-linux-

2、find ./  -name   "*defconfig"         //查找内核默认支持哪些单板配置文件

          例:有s3c2410_defconfig

3、配置

          make   s3c2410_defconfig

     在此基础上,参考.config文件执行make menuconfigjinx进行裁剪配置:

      {注:

              1)kernel裁剪主要就是在make menuconfig界面进行peiz配置,

                    而且主要是针对编译进内核的-y选项进行取消来裁剪或添加来设置功能,

                    -m选项是编译成模块的,不bian编译进内核,不影响uImage大小;

              2)内核裁剪一般主要是针对三大类进行取消设置来裁剪:

                    a)system type          //单板board类型相关

                    b)file systems           //文件系统leix类型相关

                    c)device drivers        //设备驱动相关 

   }

      在.config文件中可以查看其支持的CPU类型;

4、编译    make uImage

     注:若编译失败,有可能是交叉编译工具链arm-linux-gcc版本不匹配问题

 

在内核中修改分区:

       arch/arm/mach-s3c24xx/common-smdk.c中:

             smdk_default_nand_part[  ]

       注:内核与uboot的分区大小必须一致。

       bootloader        256k

       params             128k

       kernel                2m

       rootfs                 -

6、在uboot中修改机器ID:

     在arch/arm/mach-s3c24xx/mach-smdk2440.c:

     修改s3c24xx_init_clock(16934400)为

             s3c24xx_init_clock(12000000)

******************************************************************************************************************************************

*************************************************************************************************************************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值