learning armbian steps(10) ----- armbian 源码分析(五)

在上一节的分析当中,已经知道了uboot kernel的源代码路径及编译选项,以及rootfs的版本,相关信息如下所示:

## BUILD CONFIGURATION

Build target:
Board: iotx-3
Branch: default
Desktop:

Kernel configuration:
Repository: git://git.ti.com/processor-sdk/processor-sdk-linux.git
Branch: branch:processor-sdk-linux-04.03.00
Config file: linux-cloudwsn-default

U-boot configuration:
Repository: git://git.ti.com/ti-u-boot/ti-u-boot.git
Branch: branch:ti-u-boot-2017.01
Config file: am335x_iotx3_config

Partitioning configuration:
Root partition type: ext4
Boot partition type: (none)
User provided boot partition size: 0
Offset: 4

CPU configuration:
 -  with interactive
Displaying message: Downloading sources  info
Displaying message: Checking git sources u-boot-am335x ti-u-boot-2017.01 info

 继续回到/ib/mian.sh当中

218 
219 # optimize build time with 100% CPU usage
220 CPUS=$(grep -c 'processor' /proc/cpuinfo)
221 if [[ $USEALLCORES != no ]]; then
222         CTHREADS="-j$(($CPUS + $CPUS/2))"
223 else
224         CTHREADS="-j1"
225 fi
226 
227 start=`date +%s`
228 

219-225行的代码用来判断是否满负荷编译代码

227行,将编译的起始秒数保存至start变量当中。

接着看lib/main.sh脚本:

228 
229 [[ $CLEAN_LEVEL == *sources* ]] && cleaning "sources"
230 
231 # ignore updates help on building all images - for internal purposes
232 # fetch_from_repo <url> <dir> <ref> <subdir_flag>
233 if [[ $IGNORE_UPDATES != yes ]]; then
234         display_alert "Downloading sources" "" "info"
235         fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes"
236         fetch_from_repo "$KERNELSOURCE" "$KERNELDIR" "$KERNELBRANCH" "yes"
237         if [[ -n $ATFSOURCE ]]; then
238                 fetch_from_repo "$ATFSOURCE" "$ATFDIR" "$ATFBRANCH" "yes"
239         fi
240         fetch_from_repo "https://github.com/linux-sunxi/sunxi-tools" "sunxi-tools" "branch:master"
241         fetch_from_repo "https://github.com/rockchip-linux/rkbin" "rkbin-tools" "branch:29mirror"
242         fetch_from_repo "https://github.com/MarvellEmbeddedProcessors/A3700-utils-marvell" "marvell-tools" "branch:A3700_utils-armada-17.10"
243         fetch_from_repo "https://github.com/armbian/odroidc2-blobs" "odroidc2-blobs" "branch:master"
244 fi
245 
246 if [[ $BETA == yes ]]; then
247         IMAGE_TYPE=nightly
248 elif [[ $BETA != "yes" && $BUILD_ALL == yes && -n $GPG_PASS ]]; then
249         IMAGE_TYPE=stable
250 else
251         IMAGE_TYPE=user-built
252 fi

228-252行代码:主要是用于通过git 拉取相关的代码。相关的源代码会保存至caach/sources 目录下面,如下所示, 默认的IMAGE_TYPE=user-built

cache/sources$ ls -al
total 60
drwxrwxr-x 15 root root 4096 1月  25 09:09 .
drwxrwxr-x  7 root sudo 4096 1月  24 13:11 ..
drwxrwxr-x  6 root root 4096 1月  25 09:02 armbian-config
drwxrwxr-x  4 root root 4096 1月  25 09:02 armbian-firmware
drwxrwxr-x  4 root root 4096 1月  25 09:09 armbian-firmware-full
drwxrwxr-x 19 root root 4096 1月  25 09:02 armbian-firmware-git
drwxrwxr-x  4 root root 4096 1月  24 15:45 hostapd-cloudwsn
drwxrwxr-x  3 root root 4096 1月  25 14:36 linux-am335x
drwxrwxr-x  8 root root 4096 1月  24 15:08 marvell-tools
drwxrwxr-x  6 root root 4096 1月  24 15:08 odroidc2-blobs
drwxrwxr-x  7 root root 4096 1月  24 15:08 rkbin-tools
drwxrwxr-x  2 root root 4096 1月  25 09:02 rs485-cloudwsn
drwxrwxr-x  9 root root 4096 1月  25 09:11 rt8188eu
drwxrwxr-x  7 root root 4096 1月  24 15:08 sunxi-tools
drwxrwxr-x  3 root root 4096 1月  24 14:59 u-boot-am335x

继续阅读lib/main.sh

254 compile_sunxi_tools
255 install_rkbin_tools

这两个工具在自已配置的板子上面是用不到的,所示跳过不分析。

这个跟厂家的镜像打包有关系统,比如rockchip的RK3328 会通过rkbin_tools工具将其uboot kernel rootfs,打包成GPT格式的镜像。

通过dd命令或者通过带校验功能的etcher命令进行烧录。

继续阅读lib/main.sh  257行开始:

257 BOOTSOURCEDIR=$BOOTDIR/${BOOTBRANCH##*:}
258 LINUXSOURCEDIR=$KERNELDIR/${KERNELBRANCH##*:}
259 [[ -n $ATFSOURCE ]] && ATFSOURCEDIR=$ATFDIR/${ATFBRANCH##*:}
260 
261 # define package names
262 DEB_BRANCH=${BRANCH//default}
263 # if not empty, append hyphen
264 DEB_BRANCH=${DEB_BRANCH:+${DEB_BRANCH}-}
265 CHOSEN_UBOOT=linux-u-boot-${DEB_BRANCH}${BOARD}
266 CHOSEN_KERNEL=linux-image-${DEB_BRANCH}${LINUXFAMILY}
267 CHOSEN_ROOTFS=linux-${RELEASE}-root-${DEB_BRANCH}${BOARD}
268 CHOSEN_DESKTOP=armbian-${RELEASE}-desktop
269 CHOSEN_KSRC=linux-source-${BRANCH}-${LINUXFAMILY}

相关的变量如下所示:

BOOTSOURCEDIR=u-boot-am335x/ti-u-boot-2017.01
LINUXSOURCEDIR=linux-am335x/processor-sdk-linux-04.03.00

CHOSE_UBOOT=linux-u-boot-iotx-3
CHOSE_KERNEL=linux-image-cloudwsn
CHOSE_ROOTFS=linux--root-iotx-3
CHOSE_DESKTOP=armbian--desktop
CHOSE_KSRC=linux-source-default-cloudwsn

继续阅读lib/main.sh  

275 # Compile u-boot if packed .deb does not exist
276 if [[ ! -f $DEST/debs/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]]; then
277         if [[ -n $ATFSOURCE ]]; then
278                 compile_atf
279         fi
280         compile_uboot
281 fi
282 
283 # Compile kernel if packed .deb does not exist
284 if [[ ! -f $DEST/debs/${CHOSEN_KERNEL}_${REVISION}_${ARCH}.deb ]]; then
285         compile_kernel
286 fi

上述的代码主要是判断uboot kernel 的deb包是否存在,否则的话就通过shell函数 compile_uboot compile_kernel进行编译。

我们先来看一下compile_boot

先跳至在 lib/compilation.sh:当中,里面有compile_uboot的实现,然后再回到/lib/main.sh脚本当中

compile_uboot()。

在下一章节我们会来好好分析compile_uboot的编译过程。

 

posted @ 2019-04-19 16:41  嵌入式实操  阅读(585)  评论(0编辑  收藏  举报