JZ2440的uboot-2009-11 移植<1>

整理下自己之前的移植uboot时记录的笔记!

移植环境:

arm板子:JZ2440

uboot版本:2009-11

交叉编译链:arm-none-linux-gcc-4.4.3

下载:

uboot官方下载地址:uboot官方下载,

交叉编译链:github.com/funful/Tools

uboot的启动流程

第一阶段

  1. 硬件设备初始化
  2. 加载u-boot第二阶段代码到RAM的空间
  3. 设置好栈
  4. 跳转到第二阶段的代码入口

第二阶段

  1. 初始化本阶段所使用的硬件设备
  2. 检测系统内存映射
  3. 将内核从Flash读取到RAM中
  4. 为内核设置启动参数
  5. 调用内核

建立2440的配置

uboot-2009-11和之前的版本相比,有一点变化,我们在u-boot-2016.09/configs 可以看到各种板级支持配置,由于2440和2410相差不大,所以我们根据2410,来添加2440的配置

修改根目录的Makefile

1
2
3
#设置股下面两个变量
ARCH = arm
CROSS_COMPILE = arm-none-linux-gnueabi-

添加my2440配置文件

新建配置文件

1
cp u-boot-2016.05/configs/smdk2410_defconfig   u-boot-2016.05/configs/my2440_defconfig

上面这条命令新建了my2440的板子配置

修改

1
gedit u-boot-2016.05/configs/my2440_defconfig

改动前后的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
改动前:
CONFIG_ARM=y
CONFIG_TARGET_SMDK2410=y
CONFIG_HUSH_PARSER=y
CONFIG_SYS_PROMPT="SMDK2410 # "
CONFIG_CMD_USB=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_FAT=y
改动后:
CONFIG_ARM=y
CONFIG_TARGET_MY2440=y
CONFIG_HUSH_PARSER=y
CONFIG_SYS_PROMPT="MY2440 # " #修改成我们自己板子名称
CONFIG_CMD_USB=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_FAT=y

添加my2440板级支持文件

上一个步骤我们已经添加了配置文件,下面我们来添加支持文件,让编译器通过.UBoot源码中大部分和板子相关的代码在board目录下

新建板级支持.c文件

1
cp -rf u-boot-2016.05/board/samsung/smdk2410/     u-boot-2016.05/board/samsung/my2440/

将板级支持文件和板级配置文件关联

  1. 1
    gedit u-boot-2016.05/arch/arm/Kconfig
  2. 找到2410的配置,来在下面添加2440配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    在:
    config TARGET_SMDK2410
    bool "Support smdk2410"
    select CPU_ARM920T
    添加: #注意Kconfig的语法,需要使用[Tab]键,缩进
    config TARGET_MY2440
    bool "Support my2440"
    select CPU_ARM920T
    在:
    source "board/samsung/smdk2410/Kconfig"
    添加:
    source "board/samsung/myff2440/Kconfig"

修改板级支持文件夹里的Kconfig

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    gedit u-boot-2016.05/board/samsung/my2440/Kconfig
    配置文件打开后,可以看到很多配置还都是smdk2410的配置:
    if TARGET_SMDK2410
    config SYS_BOARD
    default "smdk2410"

    config SYS_VENDOR
    default "samsung"
    config SYS_SOC
    default "s3c24x0"
    config SYS_CONFIG_NAME
    default "smdk2410"
    endif
    修改为:
    if TARGET_MYFF2440

    config SYS_BOARD
    default "myff2440"
    config SYS_VENDOR
    default "samsung"
    config SYS_SOC
    default "s3c24x0"
    config SYS_CONFIG_NAME
    default "myff2440"
    endif

修改板级支持文件名字

1
mv u-boot-2016.05/board/samsung/my2440/smdk2410.c   u-boot-2016.05/board/samsung/my2440/my2440.c

修改板级支持文件夹里的my2440.c

1
2
3
4
5
6
gedit u-boot-2016.05/board/samsung/my2440/my2440.c
打开后搜索: SMDK2410

gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
该为:
gd->bd->bi_arch_number = MACH_TYPE_MINI2440;

这里板子底层初始化部分先暂时使用MINI2440板子的参数配置,目的先是为了编译能通过。

修改板级支持文件夹里的Makefile

1
2
3
4
5
6
7
gedit u-boot-2016.05/board/samsung/my2440/Makefile
修改前:
obj-y := smdk2410.o
obj-y += lowlevel_init.o
修改后:
obj-y:= my2440.o
obj-y += lowlevel_init.o

修改my2440.c的头文件

  1. 添加my2440的头文件

    1
    2
    cp u-boot-2016.05/include/configs/smdk2410.h
    u-boot-2016.05/include/configs/my2440.h
  2. 1
    2
    3
    4
    5
    6
    7
    8
    9
    gedit   u-boot-2016.05/include/configs/my2440.h
    修改前:
    #define CONFIG_S3C24X0 /* This is a SAMSUNG S3C24x0-type SoC */
    #define CONFIG_S3C2410 /* specifically a SAMSUNG S3C2410 SoC */
    #define CONFIG_SMDK2410 /* on a SAMSUNG SMDK2410 Board */
    修改后:
    #define CONFIG_S3C24X0 /* This is a SAMSUNG S3C24x0-type SoC */
    #define CONFIG_S3C2440/* specifically a SAMSUNG S3C2440 SoC */
    #define CONFIG_MY2440/* on custom my2440 Board */

编译调试

  1. 进入源码目录,cd u-boot-2016.09-11

  2. 在编译前先清空一次目录,sudo make distclean

  3. 修改编译配置,make my2440_config

  4. make

  5. sudo make

  6. 不出意外的话,就能顺利通过,如果没有通过的话,我们可以看看根目录下的.config文件的配置是够正确

-------------本文结束感谢您的阅读-------------