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

来源:互联网 发布:奥利奥爆浆油条淘宝 编辑:程序博客网 时间:2024/05/21 08:39

作者: 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