• learning armbian steps(8) ----- armbian 源码分析(三)


    在lib/main.sh当中

     13 if [[ $(basename $0) == main.sh ]]; then
     14         echo "Please use compile.sh to start the build process"
     15         exit -1
     16 fi
     17 
     18 # default umask for root is 022 so parent directories won't be group writeable without this
     19 # this is used instead of making the chmod in prepare_host() recursive
     20 umask 002
     21 
     22 # destination
     23 DEST=$SRC/output
     24 
     25 TTY_X=$(($(stty size | awk '{print $2}')-6)) # determine terminal width
     26 TTY_Y=$(($(stty size | awk '{print $1}')-6)) # determine terminal height
     27 

    13-16行,由于 main.sh脚本的执行需要在compile.sh内 被调用,不可以直接通过lib/main.sh,在上一节当中我们总结了compile.sh的功能。

    23行,设置最终镜像默认的输出目录

    25-25行,主要是后面会使用dialog命令做人机交互时,用来设置对话框的大小。TTY_X TTY_Y会根据终端的变化而变化。

    在lib/main.sh当中

     28 # We'll use this title on all menus
     29 backtitle="Armbian building script, http://www.armbian.com | Author: Igor Pecovnik"
     30 
     31 # if language not set, set to english
     32 [[ -z $LANGUAGE ]] && export LANGUAGE="en_US:en"
     33 
     34 # default console if not set
     35 [[ -z $CONSOLE_CHAR ]] && export CONSOLE_CHAR="UTF-8"
     36 
     37 [[ -z $FORCE_CHECKOUT ]] && FORCE_CHECKOUT=yes
     38 

    29行,用来设置对话框的标题

    32行,用来设置LANGUAGE

    35行,用来设置终端的输出字符集

    37行,用来设置变量FORCE_CHECKOUT,后面拉取代码时会用到,在lib/generate.sh脚本,在fetch_from_repo() 钩子函数当中会用到,如下所示:

    261 # working directory is not clean
    262 if [[ $FORCE_CHECKOUT == yes ]]; then
    263      display_alert "Checking out"
    264      git checkout -f -q HEAD

     继续回到lib/mian.sh当中,如下所示:加载相关的脚本函数,在后面的编译过程当中会用到,里面的内容比较多,我们在调用到的时候再进行详细分析

     39 # Load libraries
     40 source $SRC/lib/debootstrap-ng.sh                       # System specific install
     41 source $SRC/lib/image-helpers.sh                        # helpers for OS image building
     42 source $SRC/lib/distributions.sh                        # System specific install
     43 source $SRC/lib/desktop.sh                                      # Desktop specific install
     44 source $SRC/lib/compilation.sh                          # Patching and compilation of kernel, uboot, ATF
     45 source $SRC/lib/makeboarddeb.sh                         # Create board support package
     46 source $SRC/lib/general.sh                              # General functions
     47 source $SRC/lib/chroot-buildpackages.sh                 # Building packages in chroot

    继续阅读lib/main.sh

    49 # compress and remove old logs
    50 mkdir -p $DEST/debug
    51 (cd $DEST/debug && tar -czf logs-$(<timestamp).tgz *.log) > /dev/null 2>&1
    52 rm -f $DEST/debug/*.log > /dev/null 2>&1
    53 date +"%d_%m_%Y-%H_%M_%S" > $DEST/debug/timestamp
    54 # delete compressed logs older than 7 days
    55 (cd $DEST/debug && find . -name '*.tgz' -mtime +7 -delete) > /dev/null
    56 
    57 if [[ $PROGRESS_DISPLAY == none ]]; then
    58 OUTPUT_VERYSILENT=yes
    59 elif [[ $PROGRESS_DISPLAY == dialog ]]; then
    60 OUTPUT_DIALOG=yes
    61 fi
    62 if [[ $PROGRESS_LOG_TO_FILE != yes ]]; then unset PROGRESS_LOG_TO_FILE; fi
    63 
    64 SHOW_WARNING=yes
    65 
    66 if [[ $USE_CCACHE != no ]]; then
    67 CCACHE=ccache
    68 export PATH="/usr/lib/ccache:$PATH"
    69 # private ccache directory to avoid permission issues when using build script with "sudo"
    70 # see https://ccache.samba.org/manual.html#_sharing_a_cache for alternative solution
    71 [[ $PRIVATE_CCACHE == yes ]] && export CCACHE_DIR=$SRC/cache/ccache
    72 else
    73 CCACHE=""
    74 fi

    49-56行,主要是对之前的log文件进行压缩,并删除超过7天的log.

    57-62行,由于之前的PROGRESS_DISPLAY  PROGRESS_LOG_TO_FILE 都没有设置,流程不会被执行。

    64行, 设置SHOW_WARNING=yes

    66-71行,由于在config-default.conf当中, USE_CCACHE没有被默认设置,67 68 这两行会被执行

    在lib/main.sh当中会调用到prepare_host,

     76 # Check and install dependencies, directory structure and settings
     77 prepare_host
    

     该脚本函数在lib/general.sh, 第501行当中有定义,我们来看一下实现

    495 # prepare_host
    496 #
    497 # * checks and installs necessary packages
    498 # * creates directory structure
    499 # * changes system settings
    500 #
    501 prepare_host()
    502 {
    503         display_alert "Preparing" "host" "info"
    504 
    505         if [[ $(dpkg --print-architecture) != amd64 ]]; then
    506                 display_alert "Please read documentation to set up proper compilation environment"
    507                 display_alert "http://www.armbian.com/using-armbian-tools/"
    508                 exit_with_error "Running this tool on non x86-x64 build host in not supported"
    509         fi
    510 
    511         # exit if package manager is running in the back
    512         while true; do
    513                 fuser -s /var/lib/dpkg/lock
    514                 if [[ $? = 0 ]]; then
    515                                 display_alert "Package manager is running in the background." "retrying in 30 sec" "wrn"
    516                                 sleep 30
    517                         else
    518                                 break
    519                 fi
    520         done
    521 
    522         # need lsb_release to decide what to install
    523         if [[ $(dpkg-query -W -f='${db:Status-Abbrev}
    ' lsb-release 2>/dev/null) != *ii* ]]; then
    524                 display_alert "Installing package" "lsb-release"
    525                 apt -q update && apt install -q -y --no-install-recommends lsb-release
    526         fi
    527 
    528         # packages list for host
    529         # NOTE: please sync any changes here with the Dockerfile and Vagrantfile
    530         local hostdeps="wget ca-certificates device-tree-compiler pv bc lzop zip binfmt-support build-essential ccache debootstrap ntpdate 
    531         gawk gcc-arm-linux-gnueabihf qemu-user-static u-boot-tools uuid-dev zlib1g-dev unzip libusb-1.0-0-dev fakeroot 
    532         parted pkg-config libncurses5-dev whiptail debian-keyring debian-archive-keyring f2fs-tools libfile-fcntllock-perl rsync libssl-dev 
    533         nfs-kernel-server btrfs-tools ncurses-term p7zip-full kmod dosfstools libc6-dev-armhf-cross 
    534         curl patchutils python liblz4-tool libpython2.7-dev linux-base swig libpython-dev aptly acl 
    535         locales ncurses-base pixz dialog systemd-container udev lib32stdc++6 libc6-i386 lib32ncurses5 lib32tinfo5 
    536         bison libbison-dev flex libfl-dev"
    537 
    538         local codename=$(lsb_release -sc)
    539         display_alert "Build host OS release" "${codename:-(unknown)}" "info"
    540 
    541         # Ubuntu Xenial x86_64 is the only fully supported host OS release
    542         # Ubuntu Bionic x86_64 support is WIP, especially for building full images and additional packages
    543         # Using Docker/VirtualBox/Vagrant is the only supported way to run the build script on other Linux distributions
    544         #
    545         # NO_HOST_RELEASE_CHECK overrides the check for a supported host system
    546         # Disable host OS check at your own risk, any issues reported with unsupported releases will be closed without a discussion
    547         if [[ -z $codename || "xenial bionic" != *"$codename"* ]]; then
    548                 if [[ $NO_HOST_RELEASE_CHECK == yes ]]; then
    549                         display_alert "You are running on an unsupported system" "${codename:-(unknown)}" "wrn"
    550                         display_alert "Do not report any errors, warnings or other issues encountered beyond this point" "" "wrn"
    551                 else
    552                         exit_with_error "It seems you ignore documentation and run an unsupported build system: ${codename:-(unknown)}"
    553                 fi
    554         fi
    555 
    556         if grep -qE "(Microsoft|WSL)" /proc/version; then
    557                 exit_with_error "Windows subsystem for Linux is not a supported build environment"
    558         fi
    559 
    560         grep -q i386 <(dpkg --print-foreign-architectures) || dpkg --add-architecture i386
    561         if systemd-detect-virt -q -c; then
    562                 display_alert "Running in container" "$(systemd-detect-virt)" "info"
    563                 # disable apt-cacher unless NO_APT_CACHER=no is not specified explicitly
    564                 if [[ $NO_APT_CACHER != no ]]; then
    565                         display_alert "apt-cacher is disabled in containers, set NO_APT_CACHER=no to override" "" "wrn"
    566                         NO_APT_CACHER=yes
    567                 fi
    568                 CONTAINER_COMPAT=yes
    569                 # trying to use nested containers is not a good idea, so don't permit EXTERNAL_NEW=compile
    570                 if [[ $EXTERNAL_NEW == compile ]]; then
    571                         display_alert "EXTERNAL_NEW=compile is not available when running in container, setting to prebuilt" "" "wrn"
    572                         EXTERNAL_NEW=prebuilt
    573                 fi
    574                 SYNC_CLOCK=no
    575         fi
    576 
    577         # warning: apt-cacher-ng will fail if installed and used both on host and in container/chroot environment with shared network
    578         # set NO_APT_CACHER=yes to prevent installation errors in such case
    579         if [[ $NO_APT_CACHER != yes ]]; then hostdeps="$hostdeps apt-cacher-ng"; fi
    580 
    581         local deps=()
    582         local installed=$(dpkg-query -W -f '${db:Status-Abbrev}|${binary:Package}
    ' '*' 2>/dev/null | grep '^ii' | awk -F '|' '{print $2}' | cut -d ':' -f 1)
    583 
    584         for packet in $hostdeps; do
    585                 if ! grep -q -x -e "$packet" <<< "$installed"; then deps+=("$packet"); fi
    586         done
    587 
    588         # distribution packages are buggy, download from author
    589         if [[ ! -f /etc/apt/sources.list.d/aptly.list ]]; then
    590                 display_alert "Updating from external repository" "aptly" "info"
    591                 apt-key adv --keyserver pool.sks-keyservers.net --recv-keys ED75B5A4483DA07C >/dev/null 2>&1
    592                 echo "deb http://repo.aptly.info/ squeeze main" > /etc/apt/sources.list.d/aptly.list
    593         fi
    594 
    595         if [[ ${#deps[@]} -gt 0 ]]; then
    596                 display_alert "Installing build dependencies"
    597                 apt -q update
    598                 apt -y upgrade
    599                 apt -q -y --no-install-recommends install "${deps[@]}" | tee -a $DEST/debug/hostdeps.log
    600                 update-ccache-symlinks
    601         fi
    602 
    603         # Temorally broken in Bionic, reverting to prvious version
    604         # https://github.com/aptly-dev/aptly/issues/740
    605         if [[ $(dpkg -s aptly | grep '^Version:' | sed 's/Version: //') != "1.2.0" && "$codename" == "bionic" ]]; then
    606                 apt -qq -y --allow-downgrades install aptly=1.2.0
    607         fi
    608 
    609         # sync clock
    610         if [[ $SYNC_CLOCK != no ]]; then
    611                 display_alert "Syncing clock" "host" "info"
    612                 ntpdate -s ${NTP_SERVER:- time.ijs.si}
    613         fi
    614 
    615         if [[ $(dpkg-query -W -f='${db:Status-Abbrev}
    ' 'zlib1g:i386' 2>/dev/null) != *ii* ]]; then
    616                 apt install -qq -y --no-install-recommends zlib1g:i386 >/dev/null 2>&1
    617         fi
    618 
    619         # enable arm binary format so that the cross-architecture chroot environment will work
    620         if [[ $KERNEL_ONLY != yes ]]; then
    621                 modprobe -q binfmt_misc
    622                 mountpoint -q /proc/sys/fs/binfmt_misc/ || mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
    623                 test -e /proc/sys/fs/binfmt_misc/qemu-arm || update-binfmts --enable qemu-arm
    624                 test -e /proc/sys/fs/binfmt_misc/qemu-aarch64 || update-binfmts --enable qemu-aarch64
    625         fi
    626 
    627         # create directory structure
    628         mkdir -p $SRC/{cache,output,userpatches}
    629         if [[ -n $SUDO_USER ]]; then
    630                 chgrp --quiet sudo cache output userpatches
    631                 # SGID bit on cache/sources breaks kernel dpkg packaging
    632                 chmod --quiet g+w,g+s output userpatches
    633                 # fix existing permissions
    634                 find $SRC/output $SRC/userpatches -type d ! -group sudo -exec chgrp --quiet sudo {} ;
    635                 find $SRC/output $SRC/userpatches -type d ! -perm -g+w,g+s -exec chmod --quiet g+w,g+s {} ;
    636         fi
    637         mkdir -p $DEST/debs/extra $DEST/{config,debug,patch} $SRC/userpatches/overlay $SRC/cache/{sources,toolchains,utility,rootfs} $SRC/.tmp
    638 
    639         find $SRC/patch -type d ! -name . | sed "s%/patch%/userpatches%" | xargs mkdir -p
    640 
    641         # download external Linaro compiler and missing special dependencies since they are needed for certain sources
    642 
    643         # Use backup server by default to balance the load
    644 
    645         ARMBIANSERVER=dl.armbian.com
    646 
    647         local toolchains=(
    648                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz"
    649                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz"
    650                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz"
    651                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz"
    652                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz"
    653                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi.tar.xz"
    654                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz"
    655                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-6.4.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz"
    656                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz"
    657                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz"
    658                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz"
    659                 "https://${ARMBIANSERVER}/_toolchains/gcc-linaro-7.2.1-2017.11-x86_64_arm-eabi.tar.xz"
    660                 )
    661 
    662         for toolchain in ${toolchains[@]}; do
    663                 download_toolchain "$toolchain"
    664         done
    665 
    666         rm -rf $SRC/cache/toolchains/*.tar.xz $SRC/cache/toolchains/*.tar.xz.asc
    667         local existing_dirs=( $(ls -1 $SRC/cache/toolchains) )
    668         for dir in ${existing_dirs[@]}; do
    669                 local found=no
    670                 for toolchain in ${toolchains[@]}; do
    671                         local filename=${toolchain##*/}
    672                         local dirname=${filename//.tar.xz}
    673                         [[ $dir == $dirname ]] && found=yes
    674                 done
    675                 if [[ $found == no ]]; then
    676                         display_alert "Removing obsolete toolchain" "$dir"
    677                         rm -rf $SRC/cache/toolchains/$dir
    678                 fi
    679         done
    680 
    681         # download etcher CLI utility
    682         download_etcher_cli
    683 
    684         [[ ! -f $SRC/userpatches/customize-image.sh ]] && cp $SRC/config/templates/customize-image.sh.template $SRC/userpatches/customize-image.sh
    685 
    686         if [[ ! -f $SRC/userpatches/README ]]; then
    687                 rm -f $SRC/userpatches/readme.txt
    688                 echo 'Please read documentation about customizing build configuration' > $SRC/userpatches/README
    689                 echo 'http://www.armbian.com/using-armbian-tools/' >> $SRC/userpatches/README
    690         fi
    691 
    692         # check free space (basic)
    693         local freespace=$(findmnt --target $SRC -n -o AVAIL -b 2>/dev/null) # in bytes
    694         if [[ -n $freespace && $(( $freespace / 1073741824 )) -lt 10 ]]; then
    695                 display_alert "Low free space left" "$(( $freespace / 1073741824 )) GiB" "wrn"
    696                 # pause here since dialog-based menu will hide this message otherwise
    697                 echo -e "Press e[0;33m<Ctrl-C>x1B[0m to abort compilation, e[0;33m<Enter>x1B[0m to ignore and continue"
    698                 read
    699         fi
    700 }
    701 
    

      

     该函数的功能主要:由于armbian的开发环境只支持ubuntu 16.04 18.04,且必须在64位机器上面安装,开发环境需要安装相关的软件包,通过查询已安装的软件包,然后把缺失的软件包都安装上

    由于我们不是在docker容器当中编译,所以不必关心561-575行的内容,609-613行会同步网络时间,

    619-625行,在本机挂载arm rootfs是需要binfmt_mist驱动的支持,参考:https://en.wikipedia.org/wiki/Binfmt_misc

    Miscellaneous Binary Format(binfmt_misc)机制,可以通过要打开文件的特性来选择到底使用哪个程序来打开,该机制根据文件的元属性来选择合适的程序将其打开。

    627-639行,创建相关的目录结构

    645-664行,下载工具链

    682行, 下载etcher_cli工具

    692-700行,用于检测硬盘空间是否足够搭建开发环境

    继续回到lib/mian.sh

     79 # if KERNEL_ONLY, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu
     80 
     81 if [[ -z $KERNEL_ONLY ]]; then
     82         options+=("yes" "U-boot and kernel packages")
     83         options+=("no" "Full OS image for flashing")
     84         KERNEL_ONLY=$(dialog --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags --menu "Select what to build" 
     85                 $TTY_Y $TTY_X $(($TTY_Y - 8)) "${options[@]}")
     86         unset options
     87         [[ -z $KERNEL_ONLY ]] && exit_with_error "No option selected"
     88 
     89 fi
     90 
     91 if [[ -z $KERNEL_CONFIGURE ]]; then
     92         options+=("no" "Do not change the kernel configuration")
     93         options+=("yes" "Show a kernel configuration menu before compilation")
     94         KERNEL_CONFIGURE=$(dialog --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags --menu "Select the kernel configuration" 
     95                 $TTY_Y $TTY_X $(($TTY_Y - 8)) "${options[@]}")
     96         unset options
     97         [[ -z $KERNEL_CONFIGURE ]] && exit_with_error "No option selected"
     98 
     99 fi
    100 
    

      

    上面的代码会出对话框图,如下链接对dialog进行讲解,看了之后,上述代码就比较容易理解

    https://www.cnblogs.com/lianghong881018/p/10315062.html

    其实就是弹出如下对话框:

    x x U-boot and kernel packages x x
    x x Full OS image for flashing x x

    x x Do not change the kernel configuration x x
    x x Show a kernel configuration menu before compilation x x

    在lib/main.sh 

    101 if [[ -z $BOARD ]]; then
    102         WIP_STATE=supported
    103         WIP_BUTTON='CSC/WIP/EOS'
    104         STATE_DESCRIPTION=' - Officially supported boards'
    105         temp_rc=$(mktemp)
    106         while true; do
    107                 options=()
    108                 if [[ $WIP_STATE == supported ]]; then
    109                         for board in $SRC/config/boards/*.conf; do
    110                                 options+=("$(basename $board | cut -d'.' -f1)" "$(head -1 $board | cut -d'#' -f2)")
    111                         done
    112                 else
    113                         for board in $SRC/config/boards/*.wip; do
    114                                 options+=("$(basename $board | cut -d'.' -f1)" "1(WIP)n $(head -1 $board | cut -d'#' -f2)")
    115                         done
    116                         for board in $SRC/config/boards/*.csc; do
    117                                 options+=("$(basename $board | cut -d'.' -f1)" "1(CSC)n $(head -1 $board | cut -d'#' -f2)")
    118                         done
    119                         for board in $SRC/config/boards/*.eos; do
    120                                 options+=("$(basename $board | cut -d'.' -f1)" "1(EOS)n $(head -1 $board | cut -d'#' -f2)")
    121                         done
    122                 fi
    123                 if [[ $WIP_STATE != supported ]]; then
    124                         cat <<-'EOF' > $temp_rc
    125                         dialog_color = (RED,WHITE,OFF)
    126                         screen_color = (WHITE,RED,ON)
    127                         tag_color = (RED,WHITE,ON)
    128                         item_selected_color = (WHITE,RED,ON)
    129                         tag_selected_color = (WHITE,RED,ON)
    130                         tag_key_selected_color = (WHITE,RED,ON)
    131                         EOF
    132                 else
    133                         echo > $temp_rc
    134                 fi
    135                 BOARD=$(DIALOGRC=$temp_rc dialog --stdout --title "Choose a board" --backtitle "$backtitle" --scrollbar --colors 
    136                         --extra-label "Show $WIP_BUTTON" --extra-button --menu "Select the target board. Displaying:
    $STATE_DESCRIPTION" 
    137                         $TTY_Y $TTY_X $(($TTY_Y - 8)) "${options[@]}")
    138                 STATUS=$?
    139                 if [[ $STATUS == 3 ]]; then
    140                         if [[ $WIP_STATE == supported ]]; then
    141                                 [[ $SHOW_WARNING == yes ]] && show_developer_warning
    142                                 STATE_DESCRIPTION=' - 1(CSC)n - Community Supported Configuration
     - 1(WIP)n - Work In Progress
     - 1(EOS)n - End Of Support'
    143                                 WIP_STATE=unsupported
    144                                 WIP_BUTTON='supported'
    145                         else
    146                                 STATE_DESCRIPTION=' - Officially supported boards'
    147                                 WIP_STATE=supported
    148                                 WIP_BUTTON='CSC/WIP/EOS'
    149                         fi
    150                         continue
    151                 elif [[ $STATUS == 0 ]]; then
    152                         break
    153                 fi
    154                 unset options
    155                 [[ -z $BOARD ]] && exit_with_error "No board selected"
    156         done
    157 fi
    158 
    159 if [[ -f $SRC/config/boards/${BOARD}.conf ]]; then
    160         BOARD_TYPE='conf'
    161 elif [[ -f $SRC/config/boards/${BOARD}.csc ]]; then
    162         BOARD_TYPE='csc'
    163 elif [[ -f $SRC/config/boards/${BOARD}.wip ]]; then
    164         BOARD_TYPE='wip'
    165 elif [[ -f $SRC/config/boards/${BOARD}.eos ]]; then
    166         BOARD_TYPE='eos'
    167 fi

    101-157行, 通过枚举$SRC/config/boards/下的文件,弹出对话框,来设置BOARD变量。

       x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
       x x                                                                             bananapi               A20 dual core 1Gb SoC                                                                                                        x x
       x x                                                                             bananapim2plus         H3 quad core 1Gb SoC Wifi                                                                                                    x x
       x x                                                                             bananapipro            A20 dual core 1GB SoC WiFi                                                                                                   x x
       x x                                                                             beelinkx2              H3 quad core 1GB SoC WiFi eMMC                                                                                               x x
       x x                                                                             clearfogbase           Marvell Armada 38x 1xmPCIe M.2 2xGBE SFP                                                                                     x x
       x x                                                                             clearfogpro            Marvell Armada 38x 2xmPCIe M.2 GBE Switch SFP                                                                                x x
       x x                                                                             cubietruck             A20 dual core 2Gb SoC Wifi                                                                                                   x x
       x x                                                                             cubox-i                Freescale iMx dual/quad core Wifi                                                                                            x x
       x x                                                                             espressobin            Marvell Armada 37x 1xmPCIe 2xGBE                                                                                             x x
       x x                                                                             helios4                Marvell Armada 388 2GB-ECC 4xSATA 2xUSB3.0 1xGBE                                                                             x x
       x x                                                                             iotx-3                 AM335X 1Gb SoC eMMC                                                                                                          x x
       x x                                                                             lepotato               S905x Le potato quad core 2Gb SoC eMMC                                                                                       x x
       x x                                                                             lime2                  A20 dual core 1Gb SoC eMMC                                                                                                   x x
       x x                                                                             lime-a33               A33 quad core 1Gb SoC                                                                                                        x x
       x x                                                                             lime                   A20 dual core 512Mb SoC                                                                                                      x x
       x x                                                                             micro                  A20 dual core 1Gb SoC eMMC                                                                                                   x x
       x x                                                                             miqi                   RK3288 quad core 2GB SoC GBE                                                                                                 x x
       x x                                                                             nanopiair              H3 quad core 512MB SoC Headless WiFi/BT eMMC                                                                                 x x
       x x                                                                             nanopiduo              H2+ quad core 256/512MB SoC Wi-Fi/Ethernet                                                                                   x x
       x x                                                                             nanopik1plus           H5 quad core 2GB RAM Wifi GBE eMMC                                                                                           x x
       x x                                                                             nanopik2-s905          S905 K2 quad core 2GB SoC WiFi eMMC                                                                                          x x
       x x                                                                             nanopim1               H3 quad core 1Gb SoC                                                                                                         x x
       x x                                                                             nanopim1plus           H3 quad core 1GB SoC GbE/WiFi/BT eMMC                                                                                        x x
       x x                                                                             nanopineo2             H5 quad core 256/512MB SoC Headless GBE                                                                                      x x
       x x                                                                             nanopineo              H3 quad core 256/512MB SoC Headless                                                                                          x x
       x x                                                                             nanopineocore2         H5 quad core 1GB SoC Headless GBE eMMC                                                                                       x x
       x x                                                                             nanopineoplus2         H5 quad core 1GB SoC Headless GBE eMMC WiFi/BT                                                                               x x
       x x                                                                             odroidc1               S805 C1 quad core                                                                                                            x x
       x x                                                                             odroidc2               S905 C2 quad core                                                                                                            x x
       x x                                                                             odroidxu4              Exynos5422 XU3/XU4 octa core                                                                                                 x x
       x x                                                                             orangepi2              H3 quad core 1GB RAM                                                                                                         x x
       x x                                                                             orangepilite           H3 quad core 512MB RAM WiFi                                                                                                  x x
       x x                                                                             orangepione            H3 quad core 512MB RAM                                                                                                       x x
       x x                                                                             orangepipc2            H5 quad core 1GB RAM                                                                                                         x x
       x x                                                                             orangepipc             H3 quad core 1GB RAM                                                                                                         x x
       x x                                                                             orangepipcplus         H3 quad core 1GB RAM WiFi eMMC                                                                                               x x
       x x                                                                             orangepiplus2e         H3 quad core 2GB RAM WiFi eMMC                                                                                               x x
       x x                                                                             orangepiplus           H3 quad core 1GB/2GB RAM WiFi eMMC                                                                                           x x
       x x                                                                             orangepiprime          H5 quad core 2GB RAM Wi-Fi/BT                                                                                                x x
       x x                                                                             orangepi-r1            H2+ quad core 256MB Wi-Fi + dual Ethernet                                                                                    x x
       x x                                                                             orangepiwin            A64 quad core 1GB SoC GBE WiFi                                                                                               x x
       x x                                                                             orangepizero           H2+ quad core 256/512MB SoC Wi-Fi/Ethernet                                                                                   x x
       x x                                                                             orangepizeroplus2-h3   H3 quad core 512MB SoC Wi-Fi/BT                                                                                              x x
       x x                                                                             orangepizeroplus2-h5   H5 quad core 512MB SoC Wi-Fi/BT                                                                                              x x
       x x                                                                             orangepizeroplus       H5 quad core 512MB RAM, GbE, Wi-Fi                                                                                           x x
       x x                                                                             pine64                 A64 quad core 512MB-2GB SoC GBE                                                                                              x x
       x x                                                                             pine64so               A64 quad core 2GB SoC GBE                                                                                                    x x
       x x                                                                             pinebook-a64           A64 quad core 2GB SoC Wi-Fi/BT                                                                                               x x
       x x                                                                             rock64                 RK3328 quad core SoC 1GB-4GB                                                                                                 x x
       x x                                                                             tinkerboard            RK3288 quad core 2GB SoC GBE WiFi                                                                                            x x
       x x                                                                             udoo                   Freescale iMx dual/quad core Wifi                                                                                            x x
       x x                                                                                                                                                                                                                                 x x
       x x                                                                                                                                                                                                                                 x x
       x x                                                                                                                                                                                                                                 x x
       x x                                                                                                                                                                                                                                 x x
       x x                                                                                                                                                                                                                                 x x
       x x                                                                                                                                                                                                                                 x x

    159-167行,根据$BOARD变量来设置BOARD_TYPE的值。

    停一停,到了这一步,其实已经知道我们到底编译的是哪块板子了。接下来就是读取相关的配置。

    把uboot kernel相关代码拉下来,并选择对应的rootfs版本,如ubuntu debian等,打包最终的镜像

    当然到此处我们也知道如果要自已添加对新板子的支持,$SRC/config/boards/$BOARD.{conf,csc,wip,eos}是必不可少的。

  • 相关阅读:
    iOS加载动态图的两种方法
    python初探
    博客园封笔
    office的分栏技巧
    关于排序...
    LaTex 学习笔记
    vim 学习笔记
    iOS 编程学习笔记之Foundation框架
    数论
    扫描线概览
  • 原文地址:https://www.cnblogs.com/lianghong881018/p/10395772.html
Copyright © 2020-2023  润新知