【s5p4418嵌入式学习】分步编译之uboot编译03

作者: Linux-小企鹅
博客地址:http://blog.csdn.net/u012319379/article/details/77816782

上一篇分析了 http://blog.csdn.net/u012319379/article/details/77803806,这是一个简化操作流程的脚本,降低操作难度,对于学习的话需要继续深入研究一下。

uboot深入分析

脚本全文在上一篇博客 http://blog.csdn.net/u012319379/article/details/77803806已经全部贴出来了,也做了一些简要分析,接下来我就贴主要的脚本分析一下。

根据设备类型设置宏定义

  • 根据build_android.sh的ROOT_DEVICE_TYPE可以看到类型个为SD
case ${ROOT_DEVICE_TYPE} in
     sd) apply_uboot_sd_root ;;
     nand) apply_uboot_nand_root ;;
esac
  • apply_uboot_sd_root 函数分析
function apply_uboot_sd_root()
{
    echo "====> apply sd root"
    disable_uboot_nand_root
    disable_uboot_nand_memory_layout
    enable_uboot_sd_root
}
  • disable_uboot_nand_root函数分析
function disable_uboot_nand_root()
{
    local src_file=${TOP}/u-boot/include/configs/${CHIP_NAME}_${BOARD_PURE_NAME}.h
    sed -i 's/^#define[[:space:]]CONFIG_CMD_NAND/\/\/#define CONFIG_CMD_NAND/g' ${src_file}
    sed -i 's/^#define[[:space:]]CONFIG_NAND_FTL/\/\/#define CONFIG_NAND_FTL/g' ${src_file}
    sed -i 's/^#define[[:space:]]CONFIG_LOGO_DEVICE_NAND/\/\/#define CONFIG_LOGO_DEVICE_NAND/g' ${src_file}

#关闭三个宏定义
//#define CONFIG_CMD_NAND
//#define CONFIG_NAND_FTL
//#define CONFIG_LOGO_DEVICE_NAND(代码没找到,相当于没有)
}
  • disable_uboot_nand_memory_layout函数分析
function disable_uboot_nand_memory_layout()
{
    local src_file=${TOP}/u-boot/include/configs/${CHIP_NAME}_${BOARD_PURE_NAME}.h

    local config_text_base="#define CONFIG_SYS_TEXT_BASE            0x42C00000"
    sed -i "s/.*#define[[:space:]]CONFIG_SYS_TEXT_BASE.*/${config_text_base}/g" ${src_file}

    local config_malloc_start="#define  CONFIG_MEM_MALLOC_START         0x43000000"
    sed -i "s/.*#define[[:space:]]CONFIG_MEM_MALLOC_START.*/${config_malloc_start}/g" ${src_file}

    local config_malloc_length="#define CONFIG_MEM_MALLOC_LENGTH        32*1024*1024"
    sed -i "s/.*#define[[:space:]]CONFIG_MEM_MALLOC_LENGTH.*/${config_malloc_length}/g" ${src_file}

#定义三个宏
#define CONFIG_SYS_TEXT_BASE            0x42C00000
#define  CONFIG_MEM_MALLOC_START        0x43000000
#define CONFIG_MEM_MALLOC_LENGTH        32*1024*1024
}
  • enable_uboot_sd_root函数分析
function enable_uboot_sd_root()
{
    local src_file=${TOP}/u-boot/include/configs/${CHIP_NAME}_${BOARD_PURE_NAME}.h
    sed -i 's/^\/\/#define[[:space:]]CONFIG_CMD_MMC/#define CONFIG_CMD_MMC/g' ${src_file}
    sed -i 's/^\/\/#define[[:space:]]CONFIG_LOGO_DEVICE_MMC/#define CONFIG_LOGO_DEVICE_MMC/g' ${src_file}
    local root_device_num=$(get_sd_device_number ${TOP}/device/nexell/${BOARD_NAME}/fstab.${BOARD_NAME})
    sed -i 's/^#define[[:space:]]CONFIG_BOOTCOMMAND.*/#define CONFIG_BOOTCOMMAND \"ext4load mmc '"${root_device_num}"':1 0x48000000 uImage;ext4load mmc '"${root_device_num}"':1 0x49000000 root.img.gz;bootm 0x48000000\"/g' ${src_file}
    sed -i 's/.*#define[[:space:]]CONFIG_CMD_LOGO_WALLPAPERS.*/    #define CONFIG_CMD_LOGO_WALLPAPERS \"ext4load mmc '"${root_device_num}"':1 0x47000000 logo.bmp; drawbmp 0x47000000\"/g' ${src_file}
    sed -i 's/.*#define[[:space:]]CONFIG_CMD_LOGO_BATTERY.*/    #define CONFIG_CMD_LOGO_BATTERY \"ext4load mmc '"${root_device_num}"':1 0x47000000 battery.bmp; drawbmp 0x47000000\"/g' ${src_file}
    sed -i 's/.*#define[[:space:]]CONFIG_CMD_LOGO_UPDATE.*/    #define CONFIG_CMD_LOGO_UPDATE \"ext4load mmc '"${root_device_num}"':1 0x47000000 update.bmp; drawbmp 0x47000000\"/g' ${src_file}

#开启宏定义
#define CONFIG_CMD_MMC
#define CONFIG_LOGO_DEVICE_MMC
#define CONFIG_BOOTCOMMAND "ext4load mmc '"${root_device_num}"':1 0x48000000 uImage;ext4load mmc '"${root_device_num}"':1 0x49000000 root.img.gz;bootm 0x48000000"
#define CONFIG_CMD_LOGO_WALLPAPERS "ext4load mmc '"${root_device_num}"':1 0x47000000 logo.bmp; drawbmp 0x47000000"
#define CONFIG_CMD_LOGO_BATTERY \"ext4load mmc '"${root_device_num}"':1 0x47000000 battery.bmp; drawbmp 0x47000000"
#define CONFIG_CMD_LOGO_UPDATE "ext4load mmc '"${root_device_num}"':1 0x47000000 update.bmp; drawbmp 0x47000000"
}

设置Makefile

  • cp Makefile_4418 Makefile

设置配置文件

  • make s5p4418_dron2_config

编译

  • make -j8开启8个线程编译u-boot

总结

  1. 关闭一些宏
//#define CONFIG_CMD_NAND
//#define CONFIG_NAND_FTL
//#define CONFIG_LOGO_DEVICE_NAND(代码没找到,相当于没有)
  1. 设置代码基地址和内存开始地址,内存大小
#define CONFIG_SYS_TEXT_BASE            0x42C00000
#define  CONFIG_MEM_MALLOC_START        0x43000000
#define CONFIG_MEM_MALLOC_LENGTH        32*1024*1024

3.设置宏命令

#define CONFIG_CMD_MMC
#define CONFIG_LOGO_DEVICE_MMC
#define CONFIG_BOOTCOMMAND "ext4load mmc '"${root_device_num}"':1 0x48000000 uImage;ext4load mmc '"${root_device_num}"':1 0x49000000 root.img.gz;bootm 0x48000000"
#define CONFIG_CMD_LOGO_WALLPAPERS "ext4load mmc '"${root_device_num}"':1 0x47000000 logo.bmp; drawbmp 0x47000000"
#define CONFIG_CMD_LOGO_BATTERY \"ext4load mmc '"${root_device_num}"':1 0x47000000 battery.bmp; drawbmp 0x47000000"
#define CONFIG_CMD_LOGO_UPDATE "ext4load mmc '"${root_device_num}"':1 0x47000000 update.bmp; drawbmp 0x47000000"

上一节有个地方补充一下

  • BOARD_PURE_NAME=${BOARD_NAME%_*}
  • BOARD_PURE_NAME=${BOARD_NAME#*_}

来源于百度shell # % ## %%案例解释”

代码如下:
file=/dir1/dir2/dir3/my.file.txt
可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 /  及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 .  及其左边的字符串:file.txt
${file##*.}:删掉最后一个 .  及其左边的字符串:txt
${file%/*}:删掉最后一个  /  及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 /  及其右边的字符串:(空值)
${file%.*}:删掉最后一个  .  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个  .   及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2
也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt

你可能感兴趣的:(【s5p4418嵌入式学习】分步编译之uboot编译03)