2023-03-14

先快速过一遍 有个概念先~

init

shell启动 传参 init ------> build_select_board

    90 BOARD_CONFIG=$TOP_DIR/device/rockchip/.BoardConfig.mk                                                                                                                                                          
    91 TARGET_PRODUCT="$TOP_DIR/device/rockchip/.target_product"
    92 TARGET_PRODUCT_DIR=$(realpath ${TARGET_PRODUCT})
    38 function choose_target_board()
    39 {
    40     echo    
    41     echo "You're building on Linux"
    42     echo "Lunch menu...pick a combo:"
    43     echo ""
    44     
    45     echo "0. default BoardConfig.mk"
    46     echo ${RK_TARGET_BOARD_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/\n/. /"
    47 
    48     local INDEX
    49     read -p "Which would you like? [0]: " INDEX
    50     INDEX=$((${INDEX:-0} - 1))
    51     
    52     if echo $INDEX | grep -vq [^0-9]; then
    53         RK_BUILD_TARGET_BOARD="${RK_TARGET_BOARD_ARRAY[$INDEX]}"
    54     else
    55         echo "Lunching for Default BoardConfig.mk boards..."
    56         #RK_BUILD_TARGET_BOARD=BoardConfig.mk
    57         RK_BUILD_TARGET_BOARD=${RK_TARGET_BOARD_ARRAY[0]}
    58     fi
    59 }
    60 
    61 function build_select_board()
    62 {
    63     RK_TARGET_BOARD_ARRAY=( $(cd ${TARGET_PRODUCT_DIR}/; ls BoardConfig*.mk | sort) )
    64 
    65     RK_TARGET_BOARD_ARRAY_LEN=${#RK_TARGET_BOARD_ARRAY[@]}
    66     if [ $RK_TARGET_BOARD_ARRAY_LEN -eq 0 ]; then
    67         echo "No available Board Config"
    68         return
    69     fi
    70 
    71     choose_target_board                                                                                                                                                                                        
    72 
    73     ln -rfs $TARGET_PRODUCT_DIR/$RK_BUILD_TARGET_BOARD device/rockchip/.BoardConfig.mk
    74     echo "switching to board: `realpath $BOARD_CONFIG`"
    75 }

init命令,会显示TARGET_PRODUCT_DIR目录下所有以BoardConfig开头mk结尾的文件。
然后你选一个,脚本会将你选的文件创建一个软链接到device/rockchip/.BoardConfig.mk,默认是没有这个文件的。

kernel

check_config RK_KERNEL_DTS RK_KERNEL_DEFCONFIG || return 0

    24 function check_config(){                                                                                                                                                                                       
    25     unset missing
    26     for var in $@; do
    27         eval [ \$$var ] && continue
    28     
    29         missing="$missing $var"
    30     done 
    31 
    32     [ -z "$missing" ] && return 0
    33     
    34     echo "Skipping ${FUNCNAME[1]} for missing configs: $missing."
    35     return 1
    36 }

首先检查变量 RK_KERNEL_DTS 、 RK_KERNEL_DEFCONFIG这俩变量没有赋值的话就退出了。
这里扩展一下,这两个变量在上一步init中选中的MK文件中进行export。这个被选中的MK文件在shell启动的时候被source:

    85 CMD=`realpath $0`
    86 COMMON_DIR=`dirname $CMD`
    87 TOP_DIR=$(realpath $COMMON_DIR/../../..)
    88 cd $TOP_DIR
    89 
    90 BOARD_CONFIG=$TOP_DIR/device/rockchip/.BoardConfig.mk
    91 TARGET_PRODUCT="$TOP_DIR/device/rockchip/.target_product"
    92 TARGET_PRODUCT_DIR=$(realpath ${TARGET_PRODUCT})                                                                                                                                                               
    93 
    94 if [ ! -L "$BOARD_CONFIG" -a  "$1" != "init" ]; then
    95     build_select_board
    96 fi
    97 unset_board_config_all
    98 [ -L "$BOARD_CONFIG" ] && source $BOARD_CONFIG


   450 function build_check_cross_compile(){
   451 
   452     case $RK_ARCH in
   453     arm|armhf)
   454         if [ -d "$TOP_DIR/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf" ]; then
   455             CROSS_COMPILE=$(realpath $TOP_DIR)/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-                                                  
   456         export CROSS_COMPILE=$CROSS_COMPILE
   457         fi
   458         ;;
   459     arm64|aarch64)
   460         if [ -d "$TOP_DIR/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu" ]; then
   461             CROSS_COMPILE=$(realpath $TOP_DIR)/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
   462         export CROSS_COMPILE=$CROSS_COMPILE
   463         fi
   464         ;;
   465     *)
   466         echo "the $RK_ARCH not supported for now, please check it again\n"
   467         ;;
   468     esac
   469 }

根据RK_ARCH变量,决定CROSS_COMPILE变量,指定交叉编译链的位置(RK_ARCH上面说到了,参考kernel节)


   763     cd kernel
   764     if [ ! -f ".config" ]; then
   765     make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG $RK_KERNEL_DEFCONFIG_FRAGMENT
   766     fi
   767     cd -

这里就是开始编译内核了,指定了架构(ARCH)、默认配置(RK_KERNEL_DEFCONFIG)、默认配置片段(RK_KERNEL_DEFCONFIG_FRAGMENT这里错了,这里是判断是否有默认配置文件,没有的话创建默认配置文件(.config)。


   769     echo "------ start build dtb------"
   770     ¦  if [[ $MULTI_DTB = "true" ]] ; then
   771     ¦   ¦  export MULTI_DTB=false
   772     ¦   ¦   ¦  create_multi_dts
   773     ¦   ¦   ¦  build_resource_multi_dtb
   774     ¦   ¦  export MULTI_DTB=true
   775     ¦   ¦   ¦  MULTI_DTB="MULTI_DTB=true"
   776     ¦  fi
   777     echo "------ end build dtb------"
   778 
   779     cd kernel
   780     make ARCH=$RK_ARCH $MULTI_DTB $RK_KERNEL_DTS.img -j$RK_JOBS
  782   cd -
  • create_multi_dts 这个略复杂,没有看太细,大意是:根据变量SUPPORT_BOARD 和 DTB_DIR(都在.mk文件中声明)找到dts文件,dts文件有关于lcddtsi include,出时状态是注释掉的,关闭注释,然后编译设备数源码生成dtb文件。 这块处理的是lcd的设备树
  • build_resource_multi_dtb cd kernel && ./scripts/mkmultidtb.py $RK_KERNEL_DTS && cp resource.img resource_multi_dtb.img && cd ..
  • make ARCH=$RK_ARCH $MULTI_DTB $RK_KERNEL_DTS.img -j$RK_JOBS又是编译设备树。
  • 这里小总结一下 设备树这块目前不熟,看样子是根据传入的设备树名称.img来确定编译哪个设备树。后续再看把。
  • 编译内核在这里make ARCH=$RK_ARCH $MULTI_DTB $RK_KERNEL_DTS.img -j$RK_JOBS,其中XX_DTS.img决定了要编译哪个dts文件。
   783   if [[ $MULTI_DTB = "MULTI_DTB=true" ]] ; then
   784     build_resource_multi_dtb
   785   fi
  • 看上面
   786   cd kernel
   787 
   788     if [ -f "$TOP_DIR/device/rockchip/$RK_TARGET_PRODUCT/$RK_KERNEL_FIT_ITS" ]; then
   789         $COMMON_DIR/mk-fitimage.sh $TOP_DIR/kernel/$RK_BOOT_IMG \                                                                                                                                              
   790             $TOP_DIR/device/rockchip/$RK_TARGET_PRODUCT/$RK_KERNEL_FIT_ITS
   791     fi
   792 
   793     if [ -f "$TOP_DIR/kernel/$RK_BOOT_IMG" ]; then
   794         mkdir -p $TOP_DIR/rockdev
   795         ln -sf  $TOP_DIR/kernel/$RK_BOOT_IMG $TOP_DIR/rockdev/boot.img
   796     fi
   797 
   798     if [ "$RK_RAMDISK_SECURITY_BOOTUP" = "true" ];then
   799         cp $TOP_DIR/kernel/$RK_BOOT_IMG \
   800             $TOP_DIR/u-boot/boot.img
   801     fi
  • 引导相关。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容