learning armbian steps(11) ----- armbian 源码分析(六)
接下来我们来分析一下uboot的编写过程:
从 lib/compilation.sh 89开始阅读:
compile_uboot()
{
# not optimal, but extra cleaning before overlayfs_wrapper should keep sources directory clean
if [[ $CLEAN_LEVEL == *make* ]]; then
display_alert "Cleaning" "$BOOTSOURCEDIR" "info"
(cd $SRC/cache/sources/$BOOTSOURCEDIR; make clean > /dev/null >&)
fi if [[ $USE_OVERLAYFS == yes ]]; then
local ubootdir=$(overlayfs_wrapper "wrap" "$SRC/cache/sources/$BOOTSOURCEDIR" "u-boot_${LINUXFAMILY}_${BRANCH}")
else
local ubootdir="$SRC/cache/sources/$BOOTSOURCEDIR"
fi
cd "$ubootdir" # read uboot version
local version=$(grab_version "$ubootdir") display_alert "Compiling u-boot" "$version" "info" local toolchain=$(find_toolchain "$UBOOT_COMPILER" "$UBOOT_USE_GCC")
[[ -z $toolchain ]] && exit_with_error "Could not find required toolchain" "${UBOOT_COMPILER}gcc $UBOOT_USE_GCC" display_alert "Compiler version" "${UBOOT_COMPILER}gcc $(eval env PATH=$toolchain:$PATH ${UBOOT_COMPILER}gcc -dumpversion)" "info"
89-112行,主是是进行uboot源代码的目录 cache/sources/u-boot-am335x/ti-u-boot-2017.01 ,获取uboot的版本信息,找到交叉编译工具链,并导出至环境变量当中。
overlayfs_wrapper
grap_version
find_toolchain
这三个shell函数可自动阅读。
lib/compilation.sh 继续阅读
# create directory structure for the .deb package
local uboot_name=${CHOSEN_UBOOT}_${REVISION}_${ARCH}
rm -rf $SRC/.tmp/$uboot_name
mkdir -p $SRC/.tmp/$uboot_name/usr/lib/{u-boot,$uboot_name} $SRC/.tmp/$uboot_name/DEBIAN
113-118行 创建uboot相关的临时目录。
# process compilation for one or multiple targets
while read -r target; do
local target_make=$(cut -d';' -f1 <<< $target)
local target_patchdir=$(cut -d';' -f2 <<< $target)
local target_files=$(cut -d';' -f3 <<< $target) display_alert "Checking out sources"
git checkout -f -q HEAD if [[ $CLEAN_LEVEL == *make* ]]; then
display_alert "Cleaning" "$BOOTSOURCEDIR" "info"
(cd $SRC/cache/sources/$BOOTSOURCEDIR; make clean > /dev/null >&)
fi advanced_patch "u-boot" "$BOOTPATCHDIR" "$BOARD" "$target_patchdir" "$BRANCH" "${LINUXFAMILY}-${BOARD}-${BRANCH}" # create patch for manual source changes
[[ $CREATE_PATCHES == yes ]] && userpatch_create "u-boot" if [[ -n $ATFSOURCE ]]; then
local atftempdir=$SRC/.tmp/atf-${LINUXFAMILY}-${BOARD}-${BRANCH}
cp -Rv $atftempdir/*.bin .
141 fi
142
143 eval CCACHE_BASEDIR="$(pwd)" env PATH=$toolchain:$PATH \
144 'make $CTHREADS $BOOTCONFIG CROSS_COMPILE="$CCACHE $UBOOT_COMPILER"' 2>&1 \
145 ${PROGRESS_LOG_TO_FILE:+' | tee -a $DEST/debug/compilation.log'} \
146 ${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'}
147
148 # armbian specifics u-boot settings
149 [[ -f .config ]] && sed -i 's/CONFIG_LOCALVERSION=""/CONFIG_LOCALVERSION="-armbian"/g' .config
150 [[ -f .config ]] && sed -i 's/CONFIG_LOCALVERSION_AUTO=.*/# CONFIG_LOCALVERSION_AUTO is not set/g' .config
if [[ $BOOTBRANCH == "tag:v2018".* ]]; then
[[ -f .config ]] && sed -i 's/^.*CONFIG_ENV_IS_IN_FAT.*/# CONFIG_ENV_IS_IN_FAT is not set/g' .config
[[ -f .config ]] && sed -i 's/^.*CONFIG_ENV_IS_IN_EXT4.*/CONFIG_ENV_IS_IN_EXT4=y/g' .config
[[ -f .config ]] && sed -i 's/^.*CONFIG_ENV_IS_IN_MMC.*/# CONFIG_ENV_IS_IN_MMC is not set/g' .config
[[ -f .config ]] && sed -i 's/^.*CONFIG_ENV_IS_NOWHERE.*/# CONFIG_ENV_IS_NOWHERE is not set/g' .config | echo "# CONFIG_ENV_IS_NOWHERE is not set" >> .config
[[ -f .config ]] && echo 'CONFIG_ENV_EXT4_INTERFACE="mmc"' >> .config
[[ -f .config ]] && echo 'CONFIG_ENV_EXT4_DEVICE_AND_PART="0:auto"' >> .config
[[ -f .config ]] && echo 'CONFIG_ENV_EXT4_FILE="/boot/boot.env"' >> .config
fi
[[ -f tools/logos/udoo.bmp ]] && cp $SRC/packages/blobs/splash/udoo.bmp tools/logos/udoo.bmp
touch .scmversion # $BOOTDELAY can be set in board family config, ensure autoboot can be stopped even if set to
[[ $BOOTDELAY == ]] && echo -e "CONFIG_ZERO_BOOTDELAY_CHECK=y" >> .config
[[ -n $BOOTDELAY ]] && sed -i "s/^CONFIG_BOOTDELAY=.*/CONFIG_BOOTDELAY=${BOOTDELAY}/" .config || [[ -f .config ]] && echo "CONFIG_BOOTDELAY=${BOOTDELAY}" >> .config eval CCACHE_BASEDIR="$(pwd)" env PATH=$toolchain:$PATH \
'make $target_make $CTHREADS CROSS_COMPILE="$CCACHE $UBOOT_COMPILER"' >& \
${PROGRESS_LOG_TO_FILE:+' | tee -a $DEST/debug/compilation.log'} \
${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Compiling u-boot..." $TTY_Y $TTY_X'} \
${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'} [[ ${PIPESTATUS[]} -ne ]] && exit_with_error "U-boot compilation failed" [[ $(type -t uboot_custom_postprocess) == function ]] &&
# copy files to build directory
for f in $target_files; do
local f_src=$(cut -d':' -f1 <<< $f)
if [[ $f == *:* ]]; then
local f_dst=$(cut -d':' -f2 <<< $f)
else
local f_dst=$(basename $f_src)
fi
[[ ! -f $f_src ]] && exit_with_error "U-boot file not found" "$(basename $f_src)"
cp $f_src $SRC/.tmp/$uboot_name/usr/lib/$uboot_name/$f_dst
done
done <<< "$UBOOT_TARGET_MAP"
从126行 133行可以看出其主要目地是获取源码,及打上相应的补丁
163行主要是用于设计BOOTDELAY 选项
167-171主要是开始编译uboot
175行 uboot_custom_postprocess 这个shell 函数主要是用于客户定制功能,比如对MLO u-boot.img进行重新命令等处理
177-186行主要是用于后续针对将uboot镜像制作成deb包做准备。
learning armbian steps(11) ----- armbian 源码分析(六)的更多相关文章
- ABP源码分析六:依赖注入的实现
ABP的依赖注入的实现有一个本质两个途径:1.本质上是依赖于Castle这个老牌依赖注入的框架.2.一种实现途径是通过实现IConventionalDependencyRegistrar的实例定义注入 ...
- Duilib源码分析(六)整体流程
在<Duilib源码分析(一)整体框架>.<Duilib源码分析(二)控件构造器—CDialogBuilder>以及<Duilib源码分析(三)XML解析器—CMarku ...
- motan源码分析六:客户端与服务器的通信层分析
本章将分析motan的序列化和底层通信相关部分的代码. 1.在上一章中,有一个getrefers的操作,来获取所有服务器的引用,每个服务器的引用都是由DefaultRpcReferer来创建的 pub ...
- Vue.js 源码分析(六) 基础篇 计算属性 computed 属性详解
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护,比如: <div id="example">{{ messag ...
- vuex 源码分析(六) 辅助函数 详解
对于state.getter.mutation.action来说,如果每次使用的时候都用this.$store.state.this.$store.getter等引用,会比较麻烦,代码也重复和冗余,我 ...
- [Abp 源码分析]六、工作单元的实现
0.简介 在 Abp 框架内部实现了工作单元,在这里讲解一下,什么是工作单元? Unit Of Work(工作单元)模式用来维护一个由已经被业务事物修改(增加.删除或更新)的业务对象组成的列表.Uni ...
- MyBatis框架的使用及源码分析(六) MapperRegistry
我们先Mapper接口的调用方式,见<MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用>的示例: public void findUserById() { Sql ...
- docker 源码分析 六(基于1.8.2版本),Docker run启动过程
上一篇大致了解了docker 容器的创建过程,其实主要还是从文件系统的视角分析了创建一个容器时需要得建立 RootFS,建立volumes等步骤:本章来分析一下建立好一个容器后,将这个容器运行起来的过 ...
- Heritrix源码分析(六) Heritrix的文件结构分析(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/642618 本博客已迁移到本人独立博客: http://www.yun5u. ...
- phpcms 源码分析六:index文件
这次是逆雪寒对index.php的分析: /* [/php] [ 本帖最后由 逆雪寒 于 2007-12-25 16:12 编辑 ] 尽量每天都有新的东西每天都能进一小步 现在开始讲 index.ph ...
随机推荐
- Python进阶(十一)----包,logging模块
Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文 ...
- 【DATAGUARD】物理dg配置客户端无缝切换 (八.4)--ora-16652 和 ora-16603错误
[DATAGUARD]物理dg配置客户端无缝切换 (八.4)--ora-16652 和 ora-16603错误 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各 ...
- windows安装redis服务
下载地址: https://github.com/microsoftarchive/redis/releases 解压. git执行:
- unittest使用
unittest:单元测试框架主要包含四部分: 1.测试固件(test fixture): 定义:包含执行测试前的准备setUP().测试执行完后的清扫工作tearDown() 注意: setUp() ...
- Java开发环境之Solr
查看更多Java开发环境配置,请点击<Java开发环境配置大全> 玖章:Solr安装教程 1)官网下载Solr安装包 http://lucene.apache.org/solr/downl ...
- SQL SERVER升级2017
SQL SERVER升级2017 摘要 本文只介绍了SQL SERVER升级到2017(在简单环境下),分为开始升级前的检查事项,升级操作步骤,升级后对新实例的配置. 检查事项 1.检查当前版本是否可 ...
- 使用SSH配置git服务器免密提交
1. 生成SSH 1.1下载 下载工具 puttygen.exe ,当然其他工具请自行搜索. 下载地址: 下载地址1 百度网盘 (提取码: if8g)https://pan.baidu.com/s ...
- Linux 应用程序的安装和管理
在Linux中,有三种安装软件的方式,分别是RPM包安装.YUM源安装.源代码编译安装. 常见应用程序目录结构 类型 路径 普通用户可执行文件 /usr/bin 管理员可执行文件 /usr/sbin ...
- JAVA 容器配置 JVM 监控
目前世面上较流行的JAVA容器工具有:tomcat,jboss,weblogic 在日常工作中,经常会遇到开发需要查看JVM相关信息,这时就需要开启JVM. 一.tomcat 1 修改jdk认证配置文 ...
- 用session防止网站页面被频繁刷新
session防止网站页面频繁被刷新 <?php //公司网站老是受到攻击,这是之前在网上看到的一个用session防止IP频繁访问的方法,我们公司用的是Memcache,都差不多,就是存储方式 ...