Commit c66ac2dcc24293a7b5909ed4f61e296d328d72ac
1 parent
89ed589067
Exists in
debian_stretch_mx8m_smarc01
Make changes to hardware revision 00F0: Replace Ethernet PHY by RTL8211FD-CG
Showing 1 changed file with 3 additions and 2 deletions Inline Diff
make_smarc_mx8m_debian.sh
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | # It is designed to build Debian linux for Embedian SMARC-imx8m modules | 2 | # It is designed to build Debian linux for Embedian SMARC-imx8m modules |
| 3 | # prepare host OS system: | 3 | # prepare host OS system: |
| 4 | # sudo apt-get install binfmt-support qemu qemu-user-static debootstrap kpartx | 4 | # sudo apt-get install binfmt-support qemu qemu-user-static debootstrap kpartx |
| 5 | # sudo apt-get install lvm2 dosfstools gpart binutils git lib32ncurses5-dev python-m2crypto | 5 | # sudo apt-get install lvm2 dosfstools gpart binutils git lib32ncurses5-dev python-m2crypto |
| 6 | # sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev | 6 | # sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev |
| 7 | # sudo apt-get install autoconf libtool libglib2.0-dev libarchive-dev | 7 | # sudo apt-get install autoconf libtool libglib2.0-dev libarchive-dev |
| 8 | # sudo apt-get install python-git xterm sed cvs subversion coreutils texi2html | 8 | # sudo apt-get install python-git xterm sed cvs subversion coreutils texi2html |
| 9 | # sudo apt-get install docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev | 9 | # sudo apt-get install docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev |
| 10 | # sudo apt-get install libglu1-mesa-dev mercurial automake groff curl lzop asciidoc u-boot-tools mtd-utils | 10 | # sudo apt-get install libglu1-mesa-dev mercurial automake groff curl lzop asciidoc u-boot-tools mtd-utils |
| 11 | # | 11 | # |
| 12 | 12 | ||
| 13 | # -e Exit immediately if a command exits with a non-zero status. | 13 | # -e Exit immediately if a command exits with a non-zero status. |
| 14 | set -e | 14 | set -e |
| 15 | 15 | ||
| 16 | SCRIPT_NAME=${0##*/} | 16 | SCRIPT_NAME=${0##*/} |
| 17 | readonly SCRIPT_VERSION="0.5" | 17 | readonly SCRIPT_VERSION="0.5" |
| 18 | 18 | ||
| 19 | 19 | ||
| 20 | #### Exports Variables #### | 20 | #### Exports Variables #### |
| 21 | #### global variables #### | 21 | #### global variables #### |
| 22 | readonly ABSOLUTE_FILENAME=`readlink -e "$0"` | 22 | readonly ABSOLUTE_FILENAME=`readlink -e "$0"` |
| 23 | readonly ABSOLUTE_DIRECTORY=`dirname ${ABSOLUTE_FILENAME}` | 23 | readonly ABSOLUTE_DIRECTORY=`dirname ${ABSOLUTE_FILENAME}` |
| 24 | readonly SCRIPT_POINT=${ABSOLUTE_DIRECTORY} | 24 | readonly SCRIPT_POINT=${ABSOLUTE_DIRECTORY} |
| 25 | readonly SCRIPT_START_DATE=`date +%Y%m%d` | 25 | readonly SCRIPT_START_DATE=`date +%Y%m%d` |
| 26 | readonly LOOP_MAJOR=7 | 26 | readonly LOOP_MAJOR=7 |
| 27 | 27 | ||
| 28 | # default mirror | 28 | # default mirror |
| 29 | readonly DEF_DEBIAN_MIRROR="http://httpredir.debian.org/debian" | 29 | readonly DEF_DEBIAN_MIRROR="http://httpredir.debian.org/debian" |
| 30 | readonly DEB_RELEASE="stretch" | 30 | readonly DEB_RELEASE="stretch" |
| 31 | readonly DEF_ROOTFS_TARBAR_NAME="rootfs.tar.gz" | 31 | readonly DEF_ROOTFS_TARBAR_NAME="rootfs.tar.gz" |
| 32 | 32 | ||
| 33 | ## display | 33 | ## display |
| 34 | readonly DISPLAY="-hdmi" | 34 | readonly DISPLAY="-hdmi" |
| 35 | 35 | ||
| 36 | ## base paths | 36 | ## base paths |
| 37 | readonly DEF_BUILDENV="${ABSOLUTE_DIRECTORY}" | 37 | readonly DEF_BUILDENV="${ABSOLUTE_DIRECTORY}" |
| 38 | readonly DEF_SRC_DIR="${DEF_BUILDENV}/src" | 38 | readonly DEF_SRC_DIR="${DEF_BUILDENV}/src" |
| 39 | readonly G_ROOTFS_DIR="${DEF_BUILDENV}/rootfs" | 39 | readonly G_ROOTFS_DIR="${DEF_BUILDENV}/rootfs" |
| 40 | readonly G_TMP_DIR="${DEF_BUILDENV}/tmp" | 40 | readonly G_TMP_DIR="${DEF_BUILDENV}/tmp" |
| 41 | readonly G_TOOLS_PATH="${DEF_BUILDENV}/toolchain" | 41 | readonly G_TOOLS_PATH="${DEF_BUILDENV}/toolchain" |
| 42 | readonly G_EMBEDIAN_PATH="${DEF_BUILDENV}/embedian" | 42 | readonly G_EMBEDIAN_PATH="${DEF_BUILDENV}/embedian" |
| 43 | 43 | ||
| 44 | ## LINUX kernel: git, config, paths and etc | 44 | ## LINUX kernel: git, config, paths and etc |
| 45 | readonly G_LINUX_KERNEL_SRC_DIR="${DEF_SRC_DIR}/kernel" | 45 | readonly G_LINUX_KERNEL_SRC_DIR="${DEF_SRC_DIR}/kernel" |
| 46 | readonly G_LINUX_KERNEL_GIT="git@git.embedian.com:developer/smarc-fsl-linux-kernel.git" | 46 | readonly G_LINUX_KERNEL_GIT="git@git.embedian.com:developer/smarc-fsl-linux-kernel.git" |
| 47 | readonly G_LINUX_KERNEL_BRANCH="smarc_8m_imx_4.14.78_1.0.0_ga" | 47 | readonly G_LINUX_KERNEL_BRANCH="smarc_8m_imx_4.14.78_1.0.0_ga" |
| 48 | readonly G_LINUX_KERNEL_REV="505564416eacf8b48162b150974ae28823e113ec" | 48 | readonly G_LINUX_KERNEL_REV="f87f42a63189a693346c3a5d2a83953b614fe3bd" |
| 49 | readonly G_LINUX_KERNEL_DEF_CONFIG='smarcimx8m_defconfig' | 49 | readonly G_LINUX_KERNEL_DEF_CONFIG='smarcimx8m_defconfig' |
| 50 | readonly G_LINUX_DTB='embedian/fsl-smarcimx8mq.dtb embedian/fsl-smarcimx8mq-dcss-lvds.dtb embedian/fsl-smarcimx8mq-hdmi.dtb embedian/fsl-smarcimx8mq-lcdif-lvds.dtb embedian/fsl-smarcimx8mq-dual-display.dtb embedian/fsl-smarcimx8mq-dp.dtb embedian/fsl-smarcimx8mq-edp.dtb' | 50 | readonly G_LINUX_DTB='embedian/fsl-smarcimx8mq.dtb embedian/fsl-smarcimx8mq-dcss-lvds.dtb embedian/fsl-smarcimx8mq-hdmi.dtb embedian/fsl-smarcimx8mq-lcdif-lvds.dtb embedian/fsl-smarcimx8mq-dual-display.dtb embedian/fsl-smarcimx8mq-dp.dtb embedian/fsl-smarcimx8mq-edp.dtb' |
| 51 | 51 | ||
| 52 | ## uboot | 52 | ## uboot |
| 53 | readonly G_UBOOT_SRC_DIR="${DEF_SRC_DIR}/uboot" | 53 | readonly G_UBOOT_SRC_DIR="${DEF_SRC_DIR}/uboot" |
| 54 | readonly G_UBOOT_GIT="git@git.embedian.com:developer/smarc-t335x-uboot.git" | 54 | readonly G_UBOOT_GIT="git@git.embedian.com:developer/smarc-t335x-uboot.git" |
| 55 | readonly G_UBOOT_BRANCH="smarc-imx_v2018.03_4.14.78_1.0.0_ga" | 55 | readonly G_UBOOT_BRANCH="smarc-imx_v2018.03_4.14.78_1.0.0_ga" |
| 56 | readonly G_UBOOT_REV="44d379cf3d846b046b2edf2df5c302159a5b1ac5" | 56 | readonly G_UBOOT_REV="4e4f4cd1fe0b62a27fd4e8c5854f867e402cc5d7" |
| 57 | readonly G_UBOOT_DEF_CONFIG='smarcimx8mq_4g_ser3_defconfig' | 57 | readonly G_UBOOT_DEF_CONFIG='smarcimx8mq_4g_ser3_defconfig' |
| 58 | readonly G_UBOOT_NAME='imx-boot-sd.bin' | 58 | readonly G_UBOOT_NAME='imx-boot-sd.bin' |
| 59 | 59 | ||
| 60 | ## CROSS_COMPILER config and paths | 60 | ## CROSS_COMPILER config and paths |
| 61 | readonly G_CROSS_COMPILER_NAME="gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu" | 61 | readonly G_CROSS_COMPILER_NAME="gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu" |
| 62 | readonly G_CROSS_COMPILER_ARCHIVE="${G_CROSS_COMPILER_NAME}.tar.xz" | 62 | readonly G_CROSS_COMPILER_ARCHIVE="${G_CROSS_COMPILER_NAME}.tar.xz" |
| 63 | readonly G_CROSS_COMPILER_PATH="${G_TOOLS_PATH}/${G_CROSS_COMPILER_NAME}/bin" | 63 | readonly G_CROSS_COMPILER_PATH="${G_TOOLS_PATH}/${G_CROSS_COMPILER_NAME}/bin" |
| 64 | readonly G_CROSS_COMPILER_PREFIX="aarch64-linux-gnu-" | 64 | readonly G_CROSS_COMPILER_PREFIX="aarch64-linux-gnu-" |
| 65 | readonly G_CROSS_COMPILER_JOPTION="-j 4" | 65 | readonly G_CROSS_COMPILER_JOPTION="-j 4" |
| 66 | readonly G_EXT_CROSS_COMPILER_LINK="http://releases.linaro.org/components/toolchain/binaries/6.4-2017.11/aarch64-linux-gnu/${G_CROSS_COMPILER_ARCHIVE}" | 66 | readonly G_EXT_CROSS_COMPILER_LINK="http://releases.linaro.org/components/toolchain/binaries/6.4-2017.11/aarch64-linux-gnu/${G_CROSS_COMPILER_ARCHIVE}" |
| 67 | 67 | ||
| 68 | ############## user rootfs packages ########## | 68 | ############## user rootfs packages ########## |
| 69 | readonly G_USER_PACKAGES="" | 69 | readonly G_USER_PACKAGES="" |
| 70 | 70 | ||
| 71 | export LC_ALL=C | 71 | export LC_ALL=C |
| 72 | 72 | ||
| 73 | SOM="smarc-imx8m" | 73 | SOM="smarc-imx8m" |
| 74 | 74 | ||
| 75 | #### Input params ##### | 75 | #### Input params ##### |
| 76 | PARAM_DEB_LOCAL_MIRROR="${DEF_DEBIAN_MIRROR}" | 76 | PARAM_DEB_LOCAL_MIRROR="${DEF_DEBIAN_MIRROR}" |
| 77 | PARAM_OUTPUT_DIR="${DEF_BUILDENV}/output" | 77 | PARAM_OUTPUT_DIR="${DEF_BUILDENV}/output" |
| 78 | PARAM_DEBUG="0" | 78 | PARAM_DEBUG="0" |
| 79 | PARAM_CMD="all" | 79 | PARAM_CMD="all" |
| 80 | PARAM_BLOCK_DEVICE="na" | 80 | PARAM_BLOCK_DEVICE="na" |
| 81 | 81 | ||
| 82 | 82 | ||
| 83 | ### usage ### | 83 | ### usage ### |
| 84 | function usage() { | 84 | function usage() { |
| 85 | echo "This program version ${SCRIPT_VERSION}" | 85 | echo "This program version ${SCRIPT_VERSION}" |
| 86 | echo " Used for make debian(${DEB_RELEASE}) image for \"smarc-imx8m\" board" | 86 | echo " Used for make debian(${DEB_RELEASE}) image for \"smarc-imx8m\" board" |
| 87 | echo " and create booted sdcard" | 87 | echo " and create booted sdcard" |
| 88 | echo "" | 88 | echo "" |
| 89 | echo "Usage:" | 89 | echo "Usage:" |
| 90 | echo " ./${SCRIPT_NAME} options" | 90 | echo " ./${SCRIPT_NAME} options" |
| 91 | echo "" | 91 | echo "" |
| 92 | echo "Options:" | 92 | echo "Options:" |
| 93 | echo " -h|--help -- print this help" | 93 | echo " -h|--help -- print this help" |
| 94 | echo " -c|--cmd <command>" | 94 | echo " -c|--cmd <command>" |
| 95 | echo " Supported commands:" | 95 | echo " Supported commands:" |
| 96 | echo " deploy -- prepare environment for all commands" | 96 | echo " deploy -- prepare environment for all commands" |
| 97 | echo " all -- build or rebuild kernel/bootloader/rootfs" | 97 | echo " all -- build or rebuild kernel/bootloader/rootfs" |
| 98 | echo " bootloader -- build or rebuild bootloader (u-boot+SPL)" | 98 | echo " bootloader -- build or rebuild bootloader (u-boot+SPL)" |
| 99 | echo " kernel -- build or rebuild linux kernel for this board" | 99 | echo " kernel -- build or rebuild linux kernel for this board" |
| 100 | echo " modules -- build or rebuild linux kernel modules and install in rootfs directory for this board" | 100 | echo " modules -- build or rebuild linux kernel modules and install in rootfs directory for this board" |
| 101 | echo " rootfs -- build or rebuild debian rootfs filesystem (includes: make debian apks, make and install kernel moduled," | 101 | echo " rootfs -- build or rebuild debian rootfs filesystem (includes: make debian apks, make and install kernel moduled," |
| 102 | echo " make and install extern modules (wifi/bt), create rootfs.tar.gz)" | 102 | echo " make and install extern modules (wifi/bt), create rootfs.tar.gz)" |
| 103 | echo " rtar -- generate or regenerate rootfs.tar.gz image from rootfs folder " | 103 | echo " rtar -- generate or regenerate rootfs.tar.gz image from rootfs folder " |
| 104 | echo " clean -- clean all build artifacts (not delete sources code and resulted images (output folder))" | 104 | echo " clean -- clean all build artifacts (not delete sources code and resulted images (output folder))" |
| 105 | echo " sdcard -- create bootting sdcard for this device" | 105 | echo " sdcard -- create bootting sdcard for this device" |
| 106 | echo " -o|--output -- custom select output directory (default: \"${PARAM_OUTPUT_DIR}\")" | 106 | echo " -o|--output -- custom select output directory (default: \"${PARAM_OUTPUT_DIR}\")" |
| 107 | echo " -d|--dev -- select sdcard device (exmple: -d /dev/sde)" | 107 | echo " -d|--dev -- select sdcard device (exmple: -d /dev/sde)" |
| 108 | echo " --debug -- enable debug mode for this script" | 108 | echo " --debug -- enable debug mode for this script" |
| 109 | echo "Examples of use:" | 109 | echo "Examples of use:" |
| 110 | echo " make only linux kernel for board: sudo ./${SCRIPT_NAME} --cmd kernel" | 110 | echo " make only linux kernel for board: sudo ./${SCRIPT_NAME} --cmd kernel" |
| 111 | echo " make only rootfs for board: sudo ./${SCRIPT_NAME} --cmd rootfs" | 111 | echo " make only rootfs for board: sudo ./${SCRIPT_NAME} --cmd rootfs" |
| 112 | echo " create boot sdcard: sudo ./${SCRIPT_NAME} --cmd sdcard --dev /dev/sdX" | 112 | echo " create boot sdcard: sudo ./${SCRIPT_NAME} --cmd sdcard --dev /dev/sdX" |
| 113 | echo " deploy and build: ./${SCRIPT_NAME} --cmd deploy && sudo ./${SCRIPT_NAME} --cmd all" | 113 | echo " deploy and build: ./${SCRIPT_NAME} --cmd deploy && sudo ./${SCRIPT_NAME} --cmd all" |
| 114 | echo "" | 114 | echo "" |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | ###### parse input arguments ## | 117 | ###### parse input arguments ## |
| 118 | readonly SHORTOPTS="c:o:d:s:h" | 118 | readonly SHORTOPTS="c:o:d:s:h" |
| 119 | readonly LONGOPTS="cmd:,output:,dev:,som:,help,debug" | 119 | readonly LONGOPTS="cmd:,output:,dev:,som:,help,debug" |
| 120 | 120 | ||
| 121 | ARGS=$(getopt -s bash --options ${SHORTOPTS} \ | 121 | ARGS=$(getopt -s bash --options ${SHORTOPTS} \ |
| 122 | --longoptions ${LONGOPTS} --name ${SCRIPT_NAME} -- "$@" ) | 122 | --longoptions ${LONGOPTS} --name ${SCRIPT_NAME} -- "$@" ) |
| 123 | 123 | ||
| 124 | eval set -- "$ARGS" | 124 | eval set -- "$ARGS" |
| 125 | 125 | ||
| 126 | while true; do | 126 | while true; do |
| 127 | case $1 in | 127 | case $1 in |
| 128 | -c|--cmd ) # script command | 128 | -c|--cmd ) # script command |
| 129 | shift | 129 | shift |
| 130 | PARAM_CMD="$1"; | 130 | PARAM_CMD="$1"; |
| 131 | ;; | 131 | ;; |
| 132 | -o|--output ) # select output dir | 132 | -o|--output ) # select output dir |
| 133 | shift | 133 | shift |
| 134 | PARAM_OUTPUT_DIR="$1"; | 134 | PARAM_OUTPUT_DIR="$1"; |
| 135 | ;; | 135 | ;; |
| 136 | -d|--dev ) # block device (for create sdcard) | 136 | -d|--dev ) # block device (for create sdcard) |
| 137 | shift | 137 | shift |
| 138 | [ -e ${1} ] && { | 138 | [ -e ${1} ] && { |
| 139 | PARAM_BLOCK_DEVICE=${1}; | 139 | PARAM_BLOCK_DEVICE=${1}; |
| 140 | }; | 140 | }; |
| 141 | ;; | 141 | ;; |
| 142 | --debug ) # enable debug | 142 | --debug ) # enable debug |
| 143 | PARAM_DEBUG=1; | 143 | PARAM_DEBUG=1; |
| 144 | ;; | 144 | ;; |
| 145 | -h|--help ) # get help | 145 | -h|--help ) # get help |
| 146 | usage | 146 | usage |
| 147 | exit 0; | 147 | exit 0; |
| 148 | ;; | 148 | ;; |
| 149 | -s|--som ) # target SOM | 149 | -s|--som ) # target SOM |
| 150 | shift | 150 | shift |
| 151 | SOM="$1"; | 151 | SOM="$1"; |
| 152 | ;; | 152 | ;; |
| 153 | -- ) | 153 | -- ) |
| 154 | shift | 154 | shift |
| 155 | break | 155 | break |
| 156 | ;; | 156 | ;; |
| 157 | * ) | 157 | * ) |
| 158 | shift | 158 | shift |
| 159 | break | 159 | break |
| 160 | ;; | 160 | ;; |
| 161 | esac | 161 | esac |
| 162 | shift | 162 | shift |
| 163 | done | 163 | done |
| 164 | 164 | ||
| 165 | ## enable tarce options in debug mode | 165 | ## enable tarce options in debug mode |
| 166 | [ "${PARAM_DEBUG}" = "1" ] && { | 166 | [ "${PARAM_DEBUG}" = "1" ] && { |
| 167 | echo "Debug mode enabled!" | 167 | echo "Debug mode enabled!" |
| 168 | set -x | 168 | set -x |
| 169 | }; | 169 | }; |
| 170 | 170 | ||
| 171 | if [ "${SOM}" = "smarc-imx8m" ]; then | 171 | if [ "${SOM}" = "smarc-imx8m" ]; then |
| 172 | IMXGSTPLG="imx-gst1.0-plugin-mx8mq" | 172 | IMXGSTPLG="imx-gst1.0-plugin-mx8mq" |
| 173 | else | 173 | else |
| 174 | echo "Unknown target SOM ${SOM}" | 174 | echo "Unknown target SOM ${SOM}" |
| 175 | exit 1 | 175 | exit 1 |
| 176 | fi | 176 | fi |
| 177 | 177 | ||
| 178 | if [ -d ${G_EMBEDIAN_PATH}/${SOM} ]; then | 178 | if [ -d ${G_EMBEDIAN_PATH}/${SOM} ]; then |
| 179 | echo "Building Debian for SOM ${SOM}" | 179 | echo "Building Debian for SOM ${SOM}" |
| 180 | else | 180 | else |
| 181 | echo "Missing custom files for SOM ${SOM}" | 181 | echo "Missing custom files for SOM ${SOM}" |
| 182 | exit 1 | 182 | exit 1 |
| 183 | fi | 183 | fi |
| 184 | 184 | ||
| 185 | ## declarate dinamic variables ## | 185 | ## declarate dinamic variables ## |
| 186 | readonly G_ROOTFS_TARBAR_PATH="${PARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME}" | 186 | readonly G_ROOTFS_TARBAR_PATH="${PARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME}" |
| 187 | 187 | ||
| 188 | ###### local functions ###### | 188 | ###### local functions ###### |
| 189 | 189 | ||
| 190 | ### printing functions ### | 190 | ### printing functions ### |
| 191 | 191 | ||
| 192 | # print error message | 192 | # print error message |
| 193 | # $1 - printing string | 193 | # $1 - printing string |
| 194 | function pr_error() { | 194 | function pr_error() { |
| 195 | echo "E: $1" | 195 | echo "E: $1" |
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | # print warning message | 198 | # print warning message |
| 199 | # $1 - printing string | 199 | # $1 - printing string |
| 200 | function pr_warning() { | 200 | function pr_warning() { |
| 201 | echo "W: $1" | 201 | echo "W: $1" |
| 202 | } | 202 | } |
| 203 | 203 | ||
| 204 | # print info message | 204 | # print info message |
| 205 | # $1 - printing string | 205 | # $1 - printing string |
| 206 | function pr_info() { | 206 | function pr_info() { |
| 207 | echo "I: $1" | 207 | echo "I: $1" |
| 208 | } | 208 | } |
| 209 | 209 | ||
| 210 | # print debug message | 210 | # print debug message |
| 211 | # $1 - printing string | 211 | # $1 - printing string |
| 212 | function pr_debug() { | 212 | function pr_debug() { |
| 213 | echo "D: $1" | 213 | echo "D: $1" |
| 214 | } | 214 | } |
| 215 | 215 | ||
| 216 | ### work functions ### | 216 | ### work functions ### |
| 217 | 217 | ||
| 218 | # get sources from git repository | 218 | # get sources from git repository |
| 219 | # $1 - git repository | 219 | # $1 - git repository |
| 220 | # $2 - branch name | 220 | # $2 - branch name |
| 221 | # $3 - output dir | 221 | # $3 - output dir |
| 222 | # $4 - commit id | 222 | # $4 - commit id |
| 223 | function get_git_src() { | 223 | function get_git_src() { |
| 224 | # clone src code | 224 | # clone src code |
| 225 | git clone ${1} -b ${2} ${3} | 225 | git clone ${1} -b ${2} ${3} |
| 226 | cd ${3} | 226 | cd ${3} |
| 227 | git reset --hard ${4} | 227 | git reset --hard ${4} |
| 228 | RET=$? | 228 | RET=$? |
| 229 | cd - | 229 | cd - |
| 230 | return $RET | 230 | return $RET |
| 231 | } | 231 | } |
| 232 | 232 | ||
| 233 | # get remote file | 233 | # get remote file |
| 234 | # $1 - remote file | 234 | # $1 - remote file |
| 235 | # $2 - local file | 235 | # $2 - local file |
| 236 | function get_remote_file() { | 236 | function get_remote_file() { |
| 237 | # download remote file | 237 | # download remote file |
| 238 | wget -c ${1} -O ${2} | 238 | wget -c ${1} -O ${2} |
| 239 | return $? | 239 | return $? |
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | function make_prepare() { | 242 | function make_prepare() { |
| 243 | ## create src dir | 243 | ## create src dir |
| 244 | mkdir -p ${DEF_SRC_DIR} && :; | 244 | mkdir -p ${DEF_SRC_DIR} && :; |
| 245 | 245 | ||
| 246 | ## create toolchain dir | 246 | ## create toolchain dir |
| 247 | mkdir -p ${G_TOOLS_PATH} && :; | 247 | mkdir -p ${G_TOOLS_PATH} && :; |
| 248 | 248 | ||
| 249 | ## create rootfs dir | 249 | ## create rootfs dir |
| 250 | mkdir -p ${G_ROOTFS_DIR} && :; | 250 | mkdir -p ${G_ROOTFS_DIR} && :; |
| 251 | 251 | ||
| 252 | ## create out dir | 252 | ## create out dir |
| 253 | mkdir -p ${PARAM_OUTPUT_DIR} && :; | 253 | mkdir -p ${PARAM_OUTPUT_DIR} && :; |
| 254 | 254 | ||
| 255 | ## create tmp dir | 255 | ## create tmp dir |
| 256 | mkdir -p ${G_TMP_DIR} && :; | 256 | mkdir -p ${G_TMP_DIR} && :; |
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | # function generate rootfs in input dir | 259 | # function generate rootfs in input dir |
| 260 | # $1 - rootfs base dir | 260 | # $1 - rootfs base dir |
| 261 | function make_debian_rootfs() { | 261 | function make_debian_rootfs() { |
| 262 | local ROOTFS_BASE=$1 | 262 | local ROOTFS_BASE=$1 |
| 263 | 263 | ||
| 264 | pr_info "Make debian(${DEB_RELEASE}) rootfs start..." | 264 | pr_info "Make debian(${DEB_RELEASE}) rootfs start..." |
| 265 | 265 | ||
| 266 | ## umount previus mounts (if fail) | 266 | ## umount previus mounts (if fail) |
| 267 | umount ${ROOTFS_BASE}/{sys,proc,dev/pts,dev} 2>/dev/null && :; | 267 | umount ${ROOTFS_BASE}/{sys,proc,dev/pts,dev} 2>/dev/null && :; |
| 268 | 268 | ||
| 269 | ## clear rootfs dir | 269 | ## clear rootfs dir |
| 270 | rm -rf ${ROOTFS_BASE}/* && :; | 270 | rm -rf ${ROOTFS_BASE}/* && :; |
| 271 | 271 | ||
| 272 | pr_info "rootfs: debootstrap" | 272 | pr_info "rootfs: debootstrap" |
| 273 | debootstrap --verbose --foreign --arch arm64 ${DEB_RELEASE} ${ROOTFS_BASE}/ ${PARAM_DEB_LOCAL_MIRROR} | 273 | debootstrap --verbose --foreign --arch arm64 ${DEB_RELEASE} ${ROOTFS_BASE}/ ${PARAM_DEB_LOCAL_MIRROR} |
| 274 | 274 | ||
| 275 | ## prepare qemu | 275 | ## prepare qemu |
| 276 | pr_info "rootfs: debootstrap in rootfs (second-stage)" | 276 | pr_info "rootfs: debootstrap in rootfs (second-stage)" |
| 277 | cp /usr/bin/qemu-aarch64-static ${ROOTFS_BASE}/usr/bin/ | 277 | cp /usr/bin/qemu-aarch64-static ${ROOTFS_BASE}/usr/bin/ |
| 278 | mount -o bind /proc ${ROOTFS_BASE}/proc | 278 | mount -o bind /proc ${ROOTFS_BASE}/proc |
| 279 | mount -o bind /dev ${ROOTFS_BASE}/dev | 279 | mount -o bind /dev ${ROOTFS_BASE}/dev |
| 280 | mount -o bind /dev/pts ${ROOTFS_BASE}/dev/pts | 280 | mount -o bind /dev/pts ${ROOTFS_BASE}/dev/pts |
| 281 | mount -o bind /sys ${ROOTFS_BASE}/sys | 281 | mount -o bind /sys ${ROOTFS_BASE}/sys |
| 282 | chroot $ROOTFS_BASE /debootstrap/debootstrap --second-stage | 282 | chroot $ROOTFS_BASE /debootstrap/debootstrap --second-stage |
| 283 | 283 | ||
| 284 | # delete unused folder | 284 | # delete unused folder |
| 285 | chroot $ROOTFS_BASE rm -rf ${ROOTFS_BASE}/debootstrap | 285 | chroot $ROOTFS_BASE rm -rf ${ROOTFS_BASE}/debootstrap |
| 286 | 286 | ||
| 287 | pr_info "rootfs: generate default configs" | 287 | pr_info "rootfs: generate default configs" |
| 288 | mkdir -p ${ROOTFS_BASE}/etc/sudoers.d/ | 288 | mkdir -p ${ROOTFS_BASE}/etc/sudoers.d/ |
| 289 | echo "user ALL=(root) /usr/bin/apt-get, /usr/bin/dpkg, /usr/bin/vi, /sbin/reboot" > ${ROOTFS_BASE}/etc/sudoers.d/user | 289 | echo "user ALL=(root) /usr/bin/apt-get, /usr/bin/dpkg, /usr/bin/vi, /sbin/reboot" > ${ROOTFS_BASE}/etc/sudoers.d/user |
| 290 | chmod 0440 ${ROOTFS_BASE}/etc/sudoers.d/user | 290 | chmod 0440 ${ROOTFS_BASE}/etc/sudoers.d/user |
| 291 | 291 | ||
| 292 | mkdir -p ${ROOTFS_BASE}/srv/local-apt-repository | 292 | mkdir -p ${ROOTFS_BASE}/srv/local-apt-repository |
| 293 | cp -r ${G_EMBEDIAN_PATH}/deb/* ${ROOTFS_BASE}/srv/local-apt-repository | 293 | cp -r ${G_EMBEDIAN_PATH}/deb/* ${ROOTFS_BASE}/srv/local-apt-repository |
| 294 | 294 | ||
| 295 | ## added mirror to source list | 295 | ## added mirror to source list |
| 296 | echo "deb ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE} main contrib non-free | 296 | echo "deb ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE} main contrib non-free |
| 297 | deb-src ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE} main contrib non-free | 297 | deb-src ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE} main contrib non-free |
| 298 | deb ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE}-backports main contrib non-free | 298 | deb ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE}-backports main contrib non-free |
| 299 | deb-src ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE}-backports main contrib non-free | 299 | deb-src ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE}-backports main contrib non-free |
| 300 | " > etc/apt/sources.list | 300 | " > etc/apt/sources.list |
| 301 | 301 | ||
| 302 | ## raise backports priority | 302 | ## raise backports priority |
| 303 | echo "Package: * | 303 | echo "Package: * |
| 304 | Pin: release n=${DEB_RELEASE}-backports | 304 | Pin: release n=${DEB_RELEASE}-backports |
| 305 | Pin-Priority: 500 | 305 | Pin-Priority: 500 |
| 306 | " > etc/apt/preferences.d/backports | 306 | " > etc/apt/preferences.d/backports |
| 307 | 307 | ||
| 308 | ## maximize local repo priority | 308 | ## maximize local repo priority |
| 309 | echo "Package: * | 309 | echo "Package: * |
| 310 | Pin: origin "" | 310 | Pin: origin "" |
| 311 | Pin-Priority: 1000 | 311 | Pin-Priority: 1000 |
| 312 | " > etc/apt/preferences.d/local | 312 | " > etc/apt/preferences.d/local |
| 313 | 313 | ||
| 314 | echo " | 314 | echo " |
| 315 | # /dev/mmcblk0p1 /boot vfat defaults 0 0 | 315 | # /dev/mmcblk0p1 /boot vfat defaults 0 0 |
| 316 | " > etc/fstab | 316 | " > etc/fstab |
| 317 | 317 | ||
| 318 | echo "smarc-imx8m" > etc/hostname | 318 | echo "smarc-imx8m" > etc/hostname |
| 319 | 319 | ||
| 320 | echo "auto lo | 320 | echo "auto lo |
| 321 | iface lo inet loopback | 321 | iface lo inet loopback |
| 322 | " > etc/network/interfaces | 322 | " > etc/network/interfaces |
| 323 | 323 | ||
| 324 | echo " | 324 | echo " |
| 325 | locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 | 325 | locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 |
| 326 | locales locales/default_environment_locale select en_US.UTF-8 | 326 | locales locales/default_environment_locale select en_US.UTF-8 |
| 327 | console-common console-data/keymap/policy select Select keymap from full list | 327 | console-common console-data/keymap/policy select Select keymap from full list |
| 328 | keyboard-configuration keyboard-configuration/variant select 'English (US)' | 328 | keyboard-configuration keyboard-configuration/variant select 'English (US)' |
| 329 | openssh-server openssh-server/permit-root-login select true | 329 | openssh-server openssh-server/permit-root-login select true |
| 330 | " > debconf.set | 330 | " > debconf.set |
| 331 | 331 | ||
| 332 | pr_info "rootfs: prepare install packages in rootfs" | 332 | pr_info "rootfs: prepare install packages in rootfs" |
| 333 | ## apt-get install without starting | 333 | ## apt-get install without starting |
| 334 | cat > ${ROOTFS_BASE}/usr/sbin/policy-rc.d << EOF | 334 | cat > ${ROOTFS_BASE}/usr/sbin/policy-rc.d << EOF |
| 335 | #!/bin/sh | 335 | #!/bin/sh |
| 336 | exit 101 | 336 | exit 101 |
| 337 | EOF | 337 | EOF |
| 338 | 338 | ||
| 339 | chmod +x ${ROOTFS_BASE}/usr/sbin/policy-rc.d | 339 | chmod +x ${ROOTFS_BASE}/usr/sbin/policy-rc.d |
| 340 | 340 | ||
| 341 | ## third packages stage | 341 | ## third packages stage |
| 342 | cat > third-stage << EOF | 342 | cat > third-stage << EOF |
| 343 | #!/bin/bash | 343 | #!/bin/bash |
| 344 | # apply debconfig options | 344 | # apply debconfig options |
| 345 | debconf-set-selections /debconf.set | 345 | debconf-set-selections /debconf.set |
| 346 | rm -f /debconf.set | 346 | rm -f /debconf.set |
| 347 | 347 | ||
| 348 | 348 | ||
| 349 | function protected_install() { | 349 | function protected_install() { |
| 350 | local _name=\${1} | 350 | local _name=\${1} |
| 351 | local repeated_cnt=5; | 351 | local repeated_cnt=5; |
| 352 | local RET_CODE=1; | 352 | local RET_CODE=1; |
| 353 | 353 | ||
| 354 | echo Installing \${_name} | 354 | echo Installing \${_name} |
| 355 | for (( c=0; c<\${repeated_cnt}; c++ )) | 355 | for (( c=0; c<\${repeated_cnt}; c++ )) |
| 356 | do | 356 | do |
| 357 | apt install -y \${_name} && { | 357 | apt install -y \${_name} && { |
| 358 | RET_CODE=0; | 358 | RET_CODE=0; |
| 359 | break; | 359 | break; |
| 360 | }; | 360 | }; |
| 361 | 361 | ||
| 362 | echo "" | 362 | echo "" |
| 363 | echo "###########################" | 363 | echo "###########################" |
| 364 | echo "## Fix missing packages ###" | 364 | echo "## Fix missing packages ###" |
| 365 | echo "###########################" | 365 | echo "###########################" |
| 366 | echo "" | 366 | echo "" |
| 367 | 367 | ||
| 368 | sleep 2; | 368 | sleep 2; |
| 369 | 369 | ||
| 370 | apt --fix-broken install -y && { | 370 | apt --fix-broken install -y && { |
| 371 | RET_CODE=0; | 371 | RET_CODE=0; |
| 372 | break; | 372 | break; |
| 373 | }; | 373 | }; |
| 374 | done | 374 | done |
| 375 | 375 | ||
| 376 | return \${RET_CODE} | 376 | return \${RET_CODE} |
| 377 | } | 377 | } |
| 378 | 378 | ||
| 379 | # update packages and install base | 379 | # update packages and install base |
| 380 | apt-get update || apt-get upgrade | 380 | apt-get update || apt-get upgrade |
| 381 | 381 | ||
| 382 | # local-apt-repository support | 382 | # local-apt-repository support |
| 383 | protected_install local-apt-repository | 383 | protected_install local-apt-repository |
| 384 | 384 | ||
| 385 | # update packages and install base | 385 | # update packages and install base |
| 386 | apt-get update || apt-get upgrade | 386 | apt-get update || apt-get upgrade |
| 387 | 387 | ||
| 388 | protected_install locales | 388 | protected_install locales |
| 389 | protected_install ntp | 389 | protected_install ntp |
| 390 | protected_install openssh-server | 390 | protected_install openssh-server |
| 391 | protected_install nfs-common | 391 | protected_install nfs-common |
| 392 | 392 | ||
| 393 | # packages required when flashing emmc | 393 | # packages required when flashing emmc |
| 394 | protected_install dosfstools | 394 | protected_install dosfstools |
| 395 | 395 | ||
| 396 | # fix config for sshd (permit root login) | 396 | # fix config for sshd (permit root login) |
| 397 | sed -i -e 's/#PermitRootLogin.*/PermitRootLogin\tyes/g' /etc/ssh/sshd_config | 397 | sed -i -e 's/#PermitRootLogin.*/PermitRootLogin\tyes/g' /etc/ssh/sshd_config |
| 398 | 398 | ||
| 399 | # net-tools (ifconfig, etc.) | 399 | # net-tools (ifconfig, etc.) |
| 400 | protected_install net-tools | 400 | protected_install net-tools |
| 401 | protected_install network-manager | 401 | protected_install network-manager |
| 402 | 402 | ||
| 403 | # sdma package | 403 | # sdma package |
| 404 | protected_install imx-firmware-sdma | 404 | protected_install imx-firmware-sdma |
| 405 | 405 | ||
| 406 | # graphical packages | 406 | # graphical packages |
| 407 | protected_install libdrm-vivante1 | 407 | protected_install libdrm-vivante1 |
| 408 | protected_install imx-gpu-viv-core | 408 | protected_install imx-gpu-viv-core |
| 409 | protected_install weston | 409 | protected_install weston |
| 410 | 410 | ||
| 411 | # added alsa & gstreamer | 411 | # added alsa & gstreamer |
| 412 | protected_install alsa-utils | 412 | protected_install alsa-utils |
| 413 | protected_install gstreamer1.0-alsa | 413 | protected_install gstreamer1.0-alsa |
| 414 | protected_install gstreamer1.0-plugins-bad | 414 | protected_install gstreamer1.0-plugins-bad |
| 415 | protected_install gstreamer1.0-plugins-base | 415 | protected_install gstreamer1.0-plugins-base |
| 416 | protected_install gstreamer1.0-plugins-base-apps | 416 | protected_install gstreamer1.0-plugins-base-apps |
| 417 | protected_install gstreamer1.0-plugins-ugly | 417 | protected_install gstreamer1.0-plugins-ugly |
| 418 | protected_install gstreamer1.0-plugins-good | 418 | protected_install gstreamer1.0-plugins-good |
| 419 | protected_install gstreamer1.0-tools | 419 | protected_install gstreamer1.0-tools |
| 420 | protected_install ${IMXGSTPLG} | 420 | protected_install ${IMXGSTPLG} |
| 421 | 421 | ||
| 422 | # added i2c tools | 422 | # added i2c tools |
| 423 | protected_install i2c-tools | 423 | protected_install i2c-tools |
| 424 | 424 | ||
| 425 | # added usb tools | 425 | # added usb tools |
| 426 | protected_install usbutils | 426 | protected_install usbutils |
| 427 | 427 | ||
| 428 | # added net tools | 428 | # added net tools |
| 429 | protected_install iperf | 429 | protected_install iperf |
| 430 | 430 | ||
| 431 | # mtd | 431 | # mtd |
| 432 | protected_install mtd-utils | 432 | protected_install mtd-utils |
| 433 | 433 | ||
| 434 | # bluetooth | 434 | # bluetooth |
| 435 | protected_install bluetooth | 435 | protected_install bluetooth |
| 436 | protected_install bluez-obexd | 436 | protected_install bluez-obexd |
| 437 | protected_install bluez-tools | 437 | protected_install bluez-tools |
| 438 | protected_install blueman | 438 | protected_install blueman |
| 439 | protected_install gconf2 | 439 | protected_install gconf2 |
| 440 | 440 | ||
| 441 | # wifi support packages | 441 | # wifi support packages |
| 442 | #protected_install hostapd | 442 | #protected_install hostapd |
| 443 | protected_install udhcpd | 443 | protected_install udhcpd |
| 444 | 444 | ||
| 445 | # can support | 445 | # can support |
| 446 | protected_install can-utils | 446 | protected_install can-utils |
| 447 | 447 | ||
| 448 | apt-get -y autoremove | 448 | apt-get -y autoremove |
| 449 | 449 | ||
| 450 | # create users and set password | 450 | # create users and set password |
| 451 | useradd -m -G audio -s /bin/bash user | 451 | useradd -m -G audio -s /bin/bash user |
| 452 | usermod -a -G video user | 452 | usermod -a -G video user |
| 453 | echo "user:user" | chpasswd | 453 | echo "user:user" | chpasswd |
| 454 | echo "root:root" | chpasswd | 454 | echo "root:root" | chpasswd |
| 455 | 455 | ||
| 456 | # sado kill | 456 | # sado kill |
| 457 | rm -f third-stage | 457 | rm -f third-stage |
| 458 | EOF | 458 | EOF |
| 459 | 459 | ||
| 460 | pr_info "rootfs: install selected debian packages (third-stage)" | 460 | pr_info "rootfs: install selected debian packages (third-stage)" |
| 461 | chmod +x third-stage | 461 | chmod +x third-stage |
| 462 | chroot ${ROOTFS_BASE} /third-stage | 462 | chroot ${ROOTFS_BASE} /third-stage |
| 463 | 463 | ||
| 464 | ### install weston service | 464 | ### install weston service |
| 465 | install -d -m 0755 ${ROOTFS_BASE}/etc/xdg/weston | 465 | install -d -m 0755 ${ROOTFS_BASE}/etc/xdg/weston |
| 466 | install -m 0644 ${G_EMBEDIAN_PATH}/${SOM}/weston.ini ${ROOTFS_BASE}/etc/xdg/weston | 466 | install -m 0644 ${G_EMBEDIAN_PATH}/${SOM}/weston.ini ${ROOTFS_BASE}/etc/xdg/weston |
| 467 | install -m 0755 ${G_EMBEDIAN_PATH}/${SOM}/weston.config ${ROOTFS_BASE}/etc/default/weston | 467 | install -m 0755 ${G_EMBEDIAN_PATH}/${SOM}/weston.config ${ROOTFS_BASE}/etc/default/weston |
| 468 | install -m 0755 ${G_EMBEDIAN_PATH}/weston-start ${ROOTFS_BASE}/usr/bin/weston-start | 468 | install -m 0755 ${G_EMBEDIAN_PATH}/weston-start ${ROOTFS_BASE}/usr/bin/weston-start |
| 469 | install -m 0755 ${G_EMBEDIAN_PATH}/weston.profile ${ROOTFS_BASE}/etc/profile.d/weston.sh | 469 | install -m 0755 ${G_EMBEDIAN_PATH}/weston.profile ${ROOTFS_BASE}/etc/profile.d/weston.sh |
| 470 | install -m 0644 ${G_EMBEDIAN_PATH}/weston.service ${ROOTFS_BASE}/lib/systemd/system | 470 | install -m 0644 ${G_EMBEDIAN_PATH}/weston.service ${ROOTFS_BASE}/lib/systemd/system |
| 471 | ln -s /lib/systemd/system/weston.service \ | 471 | ln -s /lib/systemd/system/weston.service \ |
| 472 | ${ROOTFS_BASE}/etc/systemd/system/multi-user.target.wants/weston.service | 472 | ${ROOTFS_BASE}/etc/systemd/system/multi-user.target.wants/weston.service |
| 473 | 473 | ||
| 474 | ## end packages stage ## | 474 | ## end packages stage ## |
| 475 | [ "${G_USER_PACKAGES}" != "" ] && { | 475 | [ "${G_USER_PACKAGES}" != "" ] && { |
| 476 | 476 | ||
| 477 | pr_info "rootfs: install user defined packages (user-stage)" | 477 | pr_info "rootfs: install user defined packages (user-stage)" |
| 478 | pr_info "rootfs: G_USER_PACKAGES \"${G_USER_PACKAGES}\" " | 478 | pr_info "rootfs: G_USER_PACKAGES \"${G_USER_PACKAGES}\" " |
| 479 | 479 | ||
| 480 | echo "#!/bin/bash | 480 | echo "#!/bin/bash |
| 481 | # update packages | 481 | # update packages |
| 482 | apt-get update | 482 | apt-get update |
| 483 | apt-get upgrade | 483 | apt-get upgrade |
| 484 | 484 | ||
| 485 | # install all user packages | 485 | # install all user packages |
| 486 | apt-get -y install ${G_USER_PACKAGES} | 486 | apt-get -y install ${G_USER_PACKAGES} |
| 487 | 487 | ||
| 488 | rm -f user-stage | 488 | rm -f user-stage |
| 489 | " > user-stage | 489 | " > user-stage |
| 490 | 490 | ||
| 491 | chmod +x user-stage | 491 | chmod +x user-stage |
| 492 | chroot ${ROOTFS_BASE} /user-stage | 492 | chroot ${ROOTFS_BASE} /user-stage |
| 493 | 493 | ||
| 494 | }; | 494 | }; |
| 495 | 495 | ||
| 496 | ## binaries rootfs patching ## | 496 | ## binaries rootfs patching ## |
| 497 | install -m 0644 ${G_EMBEDIAN_PATH}/issue ${ROOTFS_BASE}/etc/ | 497 | install -m 0644 ${G_EMBEDIAN_PATH}/issue ${ROOTFS_BASE}/etc/ |
| 498 | install -m 0644 ${G_EMBEDIAN_PATH}/issue.net ${ROOTFS_BASE}/etc/ | 498 | install -m 0644 ${G_EMBEDIAN_PATH}/issue.net ${ROOTFS_BASE}/etc/ |
| 499 | install -m 0755 ${G_EMBEDIAN_PATH}/rc.local ${ROOTFS_BASE}/etc/ | 499 | install -m 0755 ${G_EMBEDIAN_PATH}/rc.local ${ROOTFS_BASE}/etc/ |
| 500 | install -m 0644 ${G_EMBEDIAN_PATH}/splash.bmp ${ROOTFS_BASE}/boot/ | 500 | install -m 0644 ${G_EMBEDIAN_PATH}/splash.bmp ${ROOTFS_BASE}/boot/ |
| 501 | cp ${PARAM_OUTPUT_DIR}/Image ${ROOTFS_BASE}/boot | 501 | cp ${PARAM_OUTPUT_DIR}/Image ${ROOTFS_BASE}/boot |
| 502 | cp ${PARAM_OUTPUT_DIR}/*.dtb ${ROOTFS_BASE}/boot | 502 | cp ${PARAM_OUTPUT_DIR}/*.dtb ${ROOTFS_BASE}/boot |
| 503 | ln -sf fsl-smarcimx8mq${DISPLAY}.dtb ${ROOTFS_BASE}/boot/fsl-smarcimx8mq.dtb | 503 | ln -sf fsl-smarcimx8mq${DISPLAY}.dtb ${ROOTFS_BASE}/boot/fsl-smarcimx8mq.dtb |
| 504 | 504 | ||
| 505 | mkdir -p ${ROOTFS_BASE}/usr/share/images/desktop-base/ | 505 | mkdir -p ${ROOTFS_BASE}/usr/share/images/desktop-base/ |
| 506 | install -m 0644 ${G_EMBEDIAN_PATH}/wallpaper.png \ | 506 | install -m 0644 ${G_EMBEDIAN_PATH}/wallpaper.png \ |
| 507 | ${ROOTFS_BASE}/usr/share/images/desktop-base/default | 507 | ${ROOTFS_BASE}/usr/share/images/desktop-base/default |
| 508 | 508 | ||
| 509 | ## added alsa default configs ## | 509 | ## added alsa default configs ## |
| 510 | install -m 0644 ${G_EMBEDIAN_PATH}/asound.state ${ROOTFS_BASE}/var/lib/alsa/ | 510 | install -m 0644 ${G_EMBEDIAN_PATH}/asound.state ${ROOTFS_BASE}/var/lib/alsa/ |
| 511 | install -m 0644 ${G_EMBEDIAN_PATH}/asound.conf ${ROOTFS_BASE}/etc/ | 511 | install -m 0644 ${G_EMBEDIAN_PATH}/asound.conf ${ROOTFS_BASE}/etc/ |
| 512 | 512 | ||
| 513 | ## Revert regular booting | 513 | ## Revert regular booting |
| 514 | rm -f ${ROOTFS_BASE}/usr/sbin/policy-rc.d | 514 | rm -f ${ROOTFS_BASE}/usr/sbin/policy-rc.d |
| 515 | 515 | ||
| 516 | ## install kernel modules in rootfs | 516 | ## install kernel modules in rootfs |
| 517 | install_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${ROOTFS_BASE} || { | 517 | install_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${ROOTFS_BASE} || { |
| 518 | pr_error "Failed #$? in function install_kernel_modules" | 518 | pr_error "Failed #$? in function install_kernel_modules" |
| 519 | return 2; | 519 | return 2; |
| 520 | } | 520 | } |
| 521 | 521 | ||
| 522 | ## copy all kernel headers for development | 522 | ## copy all kernel headers for development |
| 523 | mkdir -p ${ROOTFS_BASE}/usr/local/src/linux-imx/drivers/staging/android/uapi | 523 | mkdir -p ${ROOTFS_BASE}/usr/local/src/linux-imx/drivers/staging/android/uapi |
| 524 | cp ${G_LINUX_KERNEL_SRC_DIR}/drivers/staging/android/uapi/* ${ROOTFS_BASE}/usr/local/src/linux-imx/drivers/staging/android/uapi | 524 | cp ${G_LINUX_KERNEL_SRC_DIR}/drivers/staging/android/uapi/* ${ROOTFS_BASE}/usr/local/src/linux-imx/drivers/staging/android/uapi |
| 525 | cp -r ${G_LINUX_KERNEL_SRC_DIR}/include ${ROOTFS_BASE}/usr/local/src/linux-imx/ | 525 | cp -r ${G_LINUX_KERNEL_SRC_DIR}/include ${ROOTFS_BASE}/usr/local/src/linux-imx/ |
| 526 | 526 | ||
| 527 | ## copy custom files | 527 | ## copy custom files |
| 528 | cp ${G_EMBEDIAN_PATH}/10-imx.rules ${ROOTFS_BASE}/etc/udev/rules.d | 528 | cp ${G_EMBEDIAN_PATH}/10-imx.rules ${ROOTFS_BASE}/etc/udev/rules.d |
| 529 | cp ${G_EMBEDIAN_PATH}/${SOM}/*.rules ${ROOTFS_BASE}/etc/udev/rules.d | 529 | cp ${G_EMBEDIAN_PATH}/${SOM}/*.rules ${ROOTFS_BASE}/etc/udev/rules.d |
| 530 | 530 | ||
| 531 | 531 | ||
| 532 | ## clenup command | 532 | ## clenup command |
| 533 | echo "#!/bin/bash | 533 | echo "#!/bin/bash |
| 534 | apt-get clean | 534 | apt-get clean |
| 535 | rm -f cleanup | 535 | rm -f cleanup |
| 536 | " > cleanup | 536 | " > cleanup |
| 537 | 537 | ||
| 538 | # clean all packages | 538 | # clean all packages |
| 539 | pr_info "rootfs: clean" | 539 | pr_info "rootfs: clean" |
| 540 | chmod +x cleanup | 540 | chmod +x cleanup |
| 541 | chroot ${ROOTFS_BASE} /cleanup | 541 | chroot ${ROOTFS_BASE} /cleanup |
| 542 | umount ${ROOTFS_BASE}/{sys,proc,dev/pts,dev} | 542 | umount ${ROOTFS_BASE}/{sys,proc,dev/pts,dev} |
| 543 | 543 | ||
| 544 | ## kill latest dbus-daemon instance due to qemu-aarch64-static | 544 | ## kill latest dbus-daemon instance due to qemu-aarch64-static |
| 545 | QEMU_PROC_ID=$(ps axf | grep dbus-daemon | grep qemu-aarch64-static | awk '{print $1}') | 545 | QEMU_PROC_ID=$(ps axf | grep dbus-daemon | grep qemu-aarch64-static | awk '{print $1}') |
| 546 | if [ -n "$QEMU_PROC_ID" ] | 546 | if [ -n "$QEMU_PROC_ID" ] |
| 547 | then | 547 | then |
| 548 | kill -9 $QEMU_PROC_ID | 548 | kill -9 $QEMU_PROC_ID |
| 549 | fi | 549 | fi |
| 550 | 550 | ||
| 551 | rm ${ROOTFS_BASE}/usr/bin/qemu-aarch64-static | 551 | rm ${ROOTFS_BASE}/usr/bin/qemu-aarch64-static |
| 552 | 552 | ||
| 553 | return 0; | 553 | return 0; |
| 554 | } | 554 | } |
| 555 | 555 | ||
| 556 | # make tarbar arx from footfs | 556 | # make tarbar arx from footfs |
| 557 | # $1 -- packet folder | 557 | # $1 -- packet folder |
| 558 | # $2 -- output arx full name | 558 | # $2 -- output arx full name |
| 559 | function make_tarbar() { | 559 | function make_tarbar() { |
| 560 | cd $1 | 560 | cd $1 |
| 561 | 561 | ||
| 562 | chown root:root . | 562 | chown root:root . |
| 563 | pr_info "make tarbar arx from folder ${1}" | 563 | pr_info "make tarbar arx from folder ${1}" |
| 564 | pr_info "Remove old arx $2" | 564 | pr_info "Remove old arx $2" |
| 565 | rm $2 > /dev/null 2>&1 && :; | 565 | rm $2 > /dev/null 2>&1 && :; |
| 566 | 566 | ||
| 567 | pr_info "Create $2" | 567 | pr_info "Create $2" |
| 568 | 568 | ||
| 569 | tar czf $2 . | 569 | tar czf $2 . |
| 570 | success=$? | 570 | success=$? |
| 571 | [ $success -eq 0 ] || { | 571 | [ $success -eq 0 ] || { |
| 572 | # fail | 572 | # fail |
| 573 | rm $2 > /dev/null 2>&1 && :; | 573 | rm $2 > /dev/null 2>&1 && :; |
| 574 | }; | 574 | }; |
| 575 | 575 | ||
| 576 | cd - | 576 | cd - |
| 577 | } | 577 | } |
| 578 | 578 | ||
| 579 | # make linux kernel modules | 579 | # make linux kernel modules |
| 580 | # $1 -- cross compiler prefix | 580 | # $1 -- cross compiler prefix |
| 581 | # $2 -- linux defconfig file | 581 | # $2 -- linux defconfig file |
| 582 | # $3 -- linux dtb files | 582 | # $3 -- linux dtb files |
| 583 | # $4 -- linux dirname | 583 | # $4 -- linux dirname |
| 584 | # $5 -- out path | 584 | # $5 -- out path |
| 585 | function make_kernel() { | 585 | function make_kernel() { |
| 586 | pr_info "make kernel .config" | 586 | pr_info "make kernel .config" |
| 587 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${4}/ ${2} | 587 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${4}/ ${2} |
| 588 | 588 | ||
| 589 | pr_info "make kernel" | 589 | pr_info "make kernel" |
| 590 | make CROSS_COMPILE=${1} ARCH=arm64 ${G_CROSS_COMPILER_JOPTION} -C ${4}/ Image | 590 | make CROSS_COMPILE=${1} ARCH=arm64 ${G_CROSS_COMPILER_JOPTION} -C ${4}/ Image |
| 591 | 591 | ||
| 592 | pr_info "make ${3}" | 592 | pr_info "make ${3}" |
| 593 | make CROSS_COMPILE=${1} ARCH=arm64 ${G_CROSS_COMPILER_JOPTION} -C ${4} ${3} | 593 | make CROSS_COMPILE=${1} ARCH=arm64 ${G_CROSS_COMPILER_JOPTION} -C ${4} ${3} |
| 594 | 594 | ||
| 595 | pr_info "Copy kernel and dtb files to output dir: ${5}" | 595 | pr_info "Copy kernel and dtb files to output dir: ${5}" |
| 596 | cp ${4}/arch/arm64/boot/Image ${5}/; | 596 | cp ${4}/arch/arm64/boot/Image ${5}/; |
| 597 | cp ${4}/arch/arm64/boot/dts/embedian/*.dtb ${5}/; | 597 | cp ${4}/arch/arm64/boot/dts/embedian/*.dtb ${5}/; |
| 598 | 598 | ||
| 599 | return 0; | 599 | return 0; |
| 600 | } | 600 | } |
| 601 | 601 | ||
| 602 | # clean kernel | 602 | # clean kernel |
| 603 | # $1 -- linux dir path | 603 | # $1 -- linux dir path |
| 604 | function clean_kernel() { | 604 | function clean_kernel() { |
| 605 | pr_info "Clean linux kernel" | 605 | pr_info "Clean linux kernel" |
| 606 | 606 | ||
| 607 | make ARCH=arm64 -C ${1}/ mrproper | 607 | make ARCH=arm64 -C ${1}/ mrproper |
| 608 | 608 | ||
| 609 | return 0; | 609 | return 0; |
| 610 | } | 610 | } |
| 611 | 611 | ||
| 612 | # make linux kernel modules | 612 | # make linux kernel modules |
| 613 | # $1 -- cross compiler prefix | 613 | # $1 -- cross compiler prefix |
| 614 | # $2 -- linux defconfig file | 614 | # $2 -- linux defconfig file |
| 615 | # $3 -- linux dirname | 615 | # $3 -- linux dirname |
| 616 | # $4 -- out modules path | 616 | # $4 -- out modules path |
| 617 | function make_kernel_modules() { | 617 | function make_kernel_modules() { |
| 618 | pr_info "make kernel defconfig" | 618 | pr_info "make kernel defconfig" |
| 619 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} ${2} | 619 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} ${2} |
| 620 | 620 | ||
| 621 | pr_info "Compiling kernel modules" | 621 | pr_info "Compiling kernel modules" |
| 622 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} modules | 622 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} modules |
| 623 | } | 623 | } |
| 624 | 624 | ||
| 625 | # install linux kernel modules | 625 | # install linux kernel modules |
| 626 | # $1 -- cross compiler prefix | 626 | # $1 -- cross compiler prefix |
| 627 | # $2 -- linux defconfig file | 627 | # $2 -- linux defconfig file |
| 628 | # $3 -- linux dirname | 628 | # $3 -- linux dirname |
| 629 | # $4 -- out modules path | 629 | # $4 -- out modules path |
| 630 | function install_kernel_modules() { | 630 | function install_kernel_modules() { |
| 631 | pr_info "Installing kernel headers to ${4}" | 631 | pr_info "Installing kernel headers to ${4}" |
| 632 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} INSTALL_HDR_PATH=${4}/usr/local headers_install | 632 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} INSTALL_HDR_PATH=${4}/usr/local headers_install |
| 633 | 633 | ||
| 634 | pr_info "Installing kernel modules to ${4}" | 634 | pr_info "Installing kernel modules to ${4}" |
| 635 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} INSTALL_MOD_PATH=${4} modules_install | 635 | make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} INSTALL_MOD_PATH=${4} modules_install |
| 636 | 636 | ||
| 637 | return 0; | 637 | return 0; |
| 638 | } | 638 | } |
| 639 | 639 | ||
| 640 | # make uboot | 640 | # make uboot |
| 641 | # $1 uboot path | 641 | # $1 uboot path |
| 642 | # $2 outputdir | 642 | # $2 outputdir |
| 643 | function make_uboot() { | 643 | function make_uboot() { |
| 644 | ### make emmc uboot ### | 644 | ### make emmc uboot ### |
| 645 | pr_info "Make SPL & u-boot: ${G_UBOOT_DEF_CONFIG}" | 645 | pr_info "Make SPL & u-boot: ${G_UBOOT_DEF_CONFIG}" |
| 646 | # clean work directory | 646 | # clean work directory |
| 647 | make ARCH=arm64 -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} mrproper | 647 | make ARCH=arm64 -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} mrproper |
| 648 | 648 | ||
| 649 | # make uboot config for mmc | 649 | # make uboot config for mmc |
| 650 | make ARCH=arm64 -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} ${G_UBOOT_DEF_CONFIG} | 650 | make ARCH=arm64 -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} ${G_UBOOT_DEF_CONFIG} |
| 651 | 651 | ||
| 652 | # make uboot | 652 | # make uboot |
| 653 | make -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} | 653 | make -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} |
| 654 | 654 | ||
| 655 | if [ "${SOM}" = "smarc-imx8m" ]; then | 655 | if [ "${SOM}" = "smarc-imx8m" ]; then |
| 656 | HDMI=yes | 656 | HDMI=yes |
| 657 | UBOOT_DTB="fsl-smarcimx8mq.dtb" | 657 | UBOOT_DTB="fsl-smarcimx8mq.dtb" |
| 658 | fi | 658 | fi |
| 659 | 659 | ||
| 660 | # Copy u-boot, SPL and DTB | 660 | # Copy u-boot, SPL and DTB |
| 661 | chown -R $USER:$USER ${G_EMBEDIAN_PATH}/${SOM}/imx-mkimage | ||
| 661 | cd ${G_EMBEDIAN_PATH}/${SOM}/imx-mkimage | 662 | cd ${G_EMBEDIAN_PATH}/${SOM}/imx-mkimage |
| 662 | rm -f iMX8M/u-boot* iMX8M/*.dtb | 663 | rm -f iMX8M/u-boot* iMX8M/*.dtb |
| 663 | cp ${1}/u-boot.bin ${1}/u-boot-nodtb.bin ${1}/spl/u-boot-spl.bin ${1}/arch/arm/dts/${UBOOT_DTB} iMX8M/ | 664 | cp ${1}/u-boot.bin ${1}/u-boot-nodtb.bin ${1}/spl/u-boot-spl.bin ${1}/arch/arm/dts/${UBOOT_DTB} iMX8M/ |
| 664 | 665 | ||
| 665 | # Build final image | 666 | # Build final image |
| 666 | if [ "${HDMI}" = "yes" ]; then | 667 | if [ "${HDMI}" = "yes" ]; then |
| 667 | make CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} SOC=iMX8M flash_hdmi_spl_uboot | 668 | make CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} SOC=iMX8M flash_hdmi_spl_uboot |
| 668 | else | 669 | else |
| 669 | make CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} SOC=iMX8M flash_spl_uboot | 670 | make CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} SOC=iMX8M flash_spl_uboot |
| 670 | fi | 671 | fi |
| 671 | 672 | ||
| 672 | # copy images | 673 | # copy images |
| 673 | cp iMX8M/flash.bin ${2}/${G_UBOOT_NAME} | 674 | cp iMX8M/flash.bin ${2}/${G_UBOOT_NAME} |
| 674 | 675 | ||
| 675 | return 0; | 676 | return 0; |
| 676 | } | 677 | } |
| 677 | 678 | ||
| 678 | # clean uboot | 679 | # clean uboot |
| 679 | # $1 -- u-boot dir path | 680 | # $1 -- u-boot dir path |
| 680 | function clean_uboot() { | 681 | function clean_uboot() { |
| 681 | pr_info "Clean uboot" | 682 | pr_info "Clean uboot" |
| 682 | 683 | ||
| 683 | make ARCH=arm64 -C ${1}/ mrproper | 684 | make ARCH=arm64 -C ${1}/ mrproper |
| 684 | 685 | ||
| 685 | return 0; | 686 | return 0; |
| 686 | } | 687 | } |
| 687 | 688 | ||
| 688 | # make sdcard for device | 689 | # make sdcard for device |
| 689 | # $1 -- block device | 690 | # $1 -- block device |
| 690 | function check_sdcard() | 691 | function check_sdcard() |
| 691 | { | 692 | { |
| 692 | # Check that parameter is a valid block device | 693 | # Check that parameter is a valid block device |
| 693 | if [ ! -b "$1" ]; then | 694 | if [ ! -b "$1" ]; then |
| 694 | pr_error "$1 is not a valid block device, exiting" | 695 | pr_error "$1 is not a valid block device, exiting" |
| 695 | return 1 | 696 | return 1 |
| 696 | fi | 697 | fi |
| 697 | 698 | ||
| 698 | local dev=$(basename $1) | 699 | local dev=$(basename $1) |
| 699 | 700 | ||
| 700 | # Check that /sys/block/$dev exists | 701 | # Check that /sys/block/$dev exists |
| 701 | if [ ! -d /sys/block/$dev ]; then | 702 | if [ ! -d /sys/block/$dev ]; then |
| 702 | pr_error "Directory /sys/block/${dev} missing, exiting" | 703 | pr_error "Directory /sys/block/${dev} missing, exiting" |
| 703 | return 1 | 704 | return 1 |
| 704 | fi | 705 | fi |
| 705 | 706 | ||
| 706 | # Get device parameters | 707 | # Get device parameters |
| 707 | local removable=$(cat /sys/block/${dev}/removable) | 708 | local removable=$(cat /sys/block/${dev}/removable) |
| 708 | local block_size=$(cat /sys/class/block/${dev}/queue/physical_block_size) | 709 | local block_size=$(cat /sys/class/block/${dev}/queue/physical_block_size) |
| 709 | local size_bytes=$((${block_size}*$(cat /sys/class/block/${dev}/size))) | 710 | local size_bytes=$((${block_size}*$(cat /sys/class/block/${dev}/size))) |
| 710 | local size_gib=$(bc <<< "scale=1; ${size_bytes}/(1024*1024*1024)") | 711 | local size_gib=$(bc <<< "scale=1; ${size_bytes}/(1024*1024*1024)") |
| 711 | 712 | ||
| 712 | # non removable SD card readers require additional check | 713 | # non removable SD card readers require additional check |
| 713 | if [ "${removable}" != "1" ]; then | 714 | if [ "${removable}" != "1" ]; then |
| 714 | local drive=$(udisksctl info -b /dev/${dev}|grep "Drive:"|cut -d"'" -f 2) | 715 | local drive=$(udisksctl info -b /dev/${dev}|grep "Drive:"|cut -d"'" -f 2) |
| 715 | local mediaremovable=$(gdbus call --system --dest org.freedesktop.UDisks2 --object-path ${drive} --method org.freedesktop.DBus.Properties.Get org.freedesktop.UDisks2.Drive MediaRemovable) | 716 | local mediaremovable=$(gdbus call --system --dest org.freedesktop.UDisks2 --object-path ${drive} --method org.freedesktop.DBus.Properties.Get org.freedesktop.UDisks2.Drive MediaRemovable) |
| 716 | if [[ "${mediaremovable}" = *"true"* ]]; then | 717 | if [[ "${mediaremovable}" = *"true"* ]]; then |
| 717 | removable=1 | 718 | removable=1 |
| 718 | fi | 719 | fi |
| 719 | fi | 720 | fi |
| 720 | 721 | ||
| 721 | # Check that device is either removable or loop | 722 | # Check that device is either removable or loop |
| 722 | if [ "$removable" != "1" -a $(stat -c '%t' /dev/$dev) != ${LOOP_MAJOR} ]; then | 723 | if [ "$removable" != "1" -a $(stat -c '%t' /dev/$dev) != ${LOOP_MAJOR} ]; then |
| 723 | pr_error "$1 is not a removable device, exiting" | 724 | pr_error "$1 is not a removable device, exiting" |
| 724 | return 1 | 725 | return 1 |
| 725 | fi | 726 | fi |
| 726 | 727 | ||
| 727 | # Check that device is attached | 728 | # Check that device is attached |
| 728 | if [ ${size_bytes} -eq 0 ]; then | 729 | if [ ${size_bytes} -eq 0 ]; then |
| 729 | pr_error "$1 is not attached, exiting" | 730 | pr_error "$1 is not attached, exiting" |
| 730 | return 1 | 731 | return 1 |
| 731 | fi | 732 | fi |
| 732 | 733 | ||
| 733 | pr_info "Device: ${LPARAM_BLOCK_DEVICE}, ${size_gib}GiB" | 734 | pr_info "Device: ${LPARAM_BLOCK_DEVICE}, ${size_gib}GiB" |
| 734 | pr_info "================================================" | 735 | pr_info "================================================" |
| 735 | read -p "Press Enter to continue" | 736 | read -p "Press Enter to continue" |
| 736 | 737 | ||
| 737 | return 0 | 738 | return 0 |
| 738 | } | 739 | } |
| 739 | 740 | ||
| 740 | # make sdcard for device | 741 | # make sdcard for device |
| 741 | # $1 -- block device | 742 | # $1 -- block device |
| 742 | # $2 -- output images dir | 743 | # $2 -- output images dir |
| 743 | function make_sdcard() { | 744 | function make_sdcard() { |
| 744 | readonly local LPARAM_BLOCK_DEVICE=${1} | 745 | readonly local LPARAM_BLOCK_DEVICE=${1} |
| 745 | readonly local LPARAM_OUTPUT_DIR=${2} | 746 | readonly local LPARAM_OUTPUT_DIR=${2} |
| 746 | readonly local P1_MOUNT_DIR="${G_TMP_DIR}/p1" | 747 | readonly local P1_MOUNT_DIR="${G_TMP_DIR}/p1" |
| 747 | readonly local P2_MOUNT_DIR="${G_TMP_DIR}/p2" | 748 | readonly local P2_MOUNT_DIR="${G_TMP_DIR}/p2" |
| 748 | readonly local DEBIAN_IMAGES_TO_ROOTFS_POINT="opt/images/Debian" | 749 | readonly local DEBIAN_IMAGES_TO_ROOTFS_POINT="opt/images/Debian" |
| 749 | 750 | ||
| 750 | readonly local BOOTLOAD_RESERVE_SIZE=2 | 751 | readonly local BOOTLOAD_RESERVE_SIZE=2 |
| 751 | readonly local PART1_SIZE=48 | 752 | readonly local PART1_SIZE=48 |
| 752 | readonly local BOOTPART=1 | 753 | readonly local BOOTPART=1 |
| 753 | readonly local ROOTFSPART=2 | 754 | readonly local ROOTFSPART=2 |
| 754 | readonly local SPARE_SIZE=4 | 755 | readonly local SPARE_SIZE=4 |
| 755 | 756 | ||
| 756 | [ "${LPARAM_BLOCK_DEVICE}" = "na" ] && { | 757 | [ "${LPARAM_BLOCK_DEVICE}" = "na" ] && { |
| 757 | pr_warning "No valid block device: ${LPARAM_BLOCK_DEVICE}" | 758 | pr_warning "No valid block device: ${LPARAM_BLOCK_DEVICE}" |
| 758 | return 1; | 759 | return 1; |
| 759 | }; | 760 | }; |
| 760 | 761 | ||
| 761 | local part="" | 762 | local part="" |
| 762 | if [ `echo ${LPARAM_BLOCK_DEVICE} | grep -c mmcblk` -ne 0 ]; then | 763 | if [ `echo ${LPARAM_BLOCK_DEVICE} | grep -c mmcblk` -ne 0 ]; then |
| 763 | part="p" | 764 | part="p" |
| 764 | fi | 765 | fi |
| 765 | 766 | ||
| 766 | # Check that we're using a valid device | 767 | # Check that we're using a valid device |
| 767 | if ! check_sdcard ${LPARAM_BLOCK_DEVICE}; then | 768 | if ! check_sdcard ${LPARAM_BLOCK_DEVICE}; then |
| 768 | return 1 | 769 | return 1 |
| 769 | fi | 770 | fi |
| 770 | 771 | ||
| 771 | for ((i=0; i<10; i++)) | 772 | for ((i=0; i<10; i++)) |
| 772 | do | 773 | do |
| 773 | if [ `mount | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then | 774 | if [ `mount | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then |
| 774 | umount ${LPARAM_BLOCK_DEVICE}${part}$i | 775 | umount ${LPARAM_BLOCK_DEVICE}${part}$i |
| 775 | fi | 776 | fi |
| 776 | done | 777 | done |
| 777 | 778 | ||
| 778 | function format_sdcard | 779 | function format_sdcard |
| 779 | { | 780 | { |
| 780 | pr_info "Formating SDCARD partitions" | 781 | pr_info "Formating SDCARD partitions" |
| 781 | mkfs.vfat -F 16 ${LPARAM_BLOCK_DEVICE}${part}1 -n boot | 782 | mkfs.vfat -F 16 ${LPARAM_BLOCK_DEVICE}${part}1 -n boot |
| 782 | mkfs.ext4 ${LPARAM_BLOCK_DEVICE}${part}2 -L rootfs | 783 | mkfs.ext4 ${LPARAM_BLOCK_DEVICE}${part}2 -L rootfs |
| 783 | } | 784 | } |
| 784 | 785 | ||
| 785 | function flash_u-boot | 786 | function flash_u-boot |
| 786 | { | 787 | { |
| 787 | pr_info "Flashing U-Boot" | 788 | pr_info "Flashing U-Boot" |
| 788 | dd if=${LPARAM_OUTPUT_DIR}/${G_UBOOT_NAME} of=${LPARAM_BLOCK_DEVICE} bs=1K seek=33; sync | 789 | dd if=${LPARAM_OUTPUT_DIR}/${G_UBOOT_NAME} of=${LPARAM_BLOCK_DEVICE} bs=1K seek=33; sync |
| 789 | } | 790 | } |
| 790 | 791 | ||
| 791 | function flash_sdcard | 792 | function flash_sdcard |
| 792 | { | 793 | { |
| 793 | pr_info "Flashing \"Image, device tree and rootfs\" partition" | 794 | pr_info "Flashing \"Image, device tree and rootfs\" partition" |
| 794 | cp -v ${LPARAM_OUTPUT_DIR}/Image ${P1_MOUNT_DIR}/ | 795 | cp -v ${LPARAM_OUTPUT_DIR}/Image ${P1_MOUNT_DIR}/ |
| 795 | mkdir -p ${P1_MOUNT_DIR}/dtbs/ | 796 | mkdir -p ${P1_MOUNT_DIR}/dtbs/ |
| 796 | cp -v ${LPARAM_OUTPUT_DIR}/fsl-smarcimx8mq${DISPLAY}.dtb ${P1_MOUNT_DIR}/dtbs/fsl-smarcimx8mq.dtb | 797 | cp -v ${LPARAM_OUTPUT_DIR}/fsl-smarcimx8mq${DISPLAY}.dtb ${P1_MOUNT_DIR}/dtbs/fsl-smarcimx8mq.dtb |
| 797 | cp -v ${G_EMBEDIAN_PATH}/uEnv.txt ${P1_MOUNT_DIR}/ | 798 | cp -v ${G_EMBEDIAN_PATH}/uEnv.txt ${P1_MOUNT_DIR}/ |
| 798 | tar -xpf ${LPARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME} -C ${P2_MOUNT_DIR}/ | 799 | tar -xpf ${LPARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME} -C ${P2_MOUNT_DIR}/ |
| 799 | } | 800 | } |
| 800 | 801 | ||
| 801 | function copy_debian_images | 802 | function copy_debian_images |
| 802 | { | 803 | { |
| 803 | mkdir -p ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT} | 804 | mkdir -p ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT} |
| 804 | 805 | ||
| 805 | pr_info "Copying Debian images to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" | 806 | pr_info "Copying Debian images to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" |
| 806 | cp ${LPARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME} ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/${DEF_ROOTFS_TARBAR_NAME} | 807 | cp ${LPARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME} ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/${DEF_ROOTFS_TARBAR_NAME} |
| 807 | 808 | ||
| 808 | pr_info "Copying U-Boot to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" | 809 | pr_info "Copying U-Boot to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" |
| 809 | cp ${LPARAM_OUTPUT_DIR}/${G_UBOOT_NAME} ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/ | 810 | cp ${LPARAM_OUTPUT_DIR}/${G_UBOOT_NAME} ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/ |
| 810 | 811 | ||
| 811 | pr_info "Copying Image and device tree files to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" | 812 | pr_info "Copying Image and device tree files to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" |
| 812 | cp ${LPARAM_OUTPUT_DIR}/Image ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/ | 813 | cp ${LPARAM_OUTPUT_DIR}/Image ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/ |
| 813 | cp ${LPARAM_OUTPUT_DIR}/*.dtb ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/ | 814 | cp ${LPARAM_OUTPUT_DIR}/*.dtb ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/ |
| 814 | cp ${G_EMBEDIAN_PATH}/uEnv_emmc.txt ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/uEnv.txt | 815 | cp ${G_EMBEDIAN_PATH}/uEnv_emmc.txt ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/uEnv.txt |
| 815 | 816 | ||
| 816 | return 0; | 817 | return 0; |
| 817 | } | 818 | } |
| 818 | 819 | ||
| 819 | function copy_scripts | 820 | function copy_scripts |
| 820 | { | 821 | { |
| 821 | pr_info "Copying scripts to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" | 822 | pr_info "Copying scripts to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" |
| 822 | cp ${G_EMBEDIAN_PATH}/debian-emmc.sh ${P2_MOUNT_DIR}/usr/sbin/ | 823 | cp ${G_EMBEDIAN_PATH}/debian-emmc.sh ${P2_MOUNT_DIR}/usr/sbin/ |
| 823 | } | 824 | } |
| 824 | 825 | ||
| 825 | function ceildiv | 826 | function ceildiv |
| 826 | { | 827 | { |
| 827 | local num=$1 | 828 | local num=$1 |
| 828 | local div=$2 | 829 | local div=$2 |
| 829 | echo $(( (num + div - 1) / div )) | 830 | echo $(( (num + div - 1) / div )) |
| 830 | } | 831 | } |
| 831 | 832 | ||
| 832 | # Delete the partitions | 833 | # Delete the partitions |
| 833 | for ((i=0; i<10; i++)) | 834 | for ((i=0; i<10; i++)) |
| 834 | do | 835 | do |
| 835 | if [ `ls ${LPARAM_BLOCK_DEVICE}${part}$i 2> /dev/null | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then | 836 | if [ `ls ${LPARAM_BLOCK_DEVICE}${part}$i 2> /dev/null | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then |
| 836 | dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE}${part}$i bs=512 count=1024 | 837 | dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE}${part}$i bs=512 count=1024 |
| 837 | fi | 838 | fi |
| 838 | done | 839 | done |
| 839 | sync | 840 | sync |
| 840 | 841 | ||
| 841 | ((echo d; echo 1; echo d; echo 2; echo d; echo 3; echo d; echo w) | fdisk ${LPARAM_BLOCK_DEVICE} &> /dev/null) || true | 842 | ((echo d; echo 1; echo d; echo 2; echo d; echo 3; echo d; echo w) | fdisk ${LPARAM_BLOCK_DEVICE} &> /dev/null) || true |
| 842 | sync | 843 | sync |
| 843 | 844 | ||
| 844 | dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE} bs=1024 count=4096 | 845 | dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE} bs=1024 count=4096 |
| 845 | sleep 2; sync; | 846 | sleep 2; sync; |
| 846 | 847 | ||
| 847 | pr_info "Creating new partitions" | 848 | pr_info "Creating new partitions" |
| 848 | 849 | ||
| 849 | # Create a new partition table | 850 | # Create a new partition table |
| 850 | 851 | ||
| 851 | # Get total card size | 852 | # Get total card size |
| 852 | TOTAL_SIZE=`fdisk -s ${LPARAM_BLOCK_DEVICE}` | 853 | TOTAL_SIZE=`fdisk -s ${LPARAM_BLOCK_DEVICE}` |
| 853 | TOTAL_SIZE=`expr ${TOTAL_SIZE} / 1024` | 854 | TOTAL_SIZE=`expr ${TOTAL_SIZE} / 1024` |
| 854 | ROOTFS_SIZE=`expr ${TOTAL_SIZE} - ${BOOTLOAD_RESERVE_SIZE} - ${PART1_SIZE} - ${SPARE_SIZE}` | 855 | ROOTFS_SIZE=`expr ${TOTAL_SIZE} - ${BOOTLOAD_RESERVE_SIZE} - ${PART1_SIZE} - ${SPARE_SIZE}` |
| 855 | 856 | ||
| 856 | pr_info "ROOT SIZE=${ROOTFS_SIZE} TOTAl SIZE=${TOTAL_SIZE}" | 857 | pr_info "ROOT SIZE=${ROOTFS_SIZE} TOTAl SIZE=${TOTAL_SIZE}" |
| 857 | 858 | ||
| 858 | BLOCK=`echo ${LPARAM_BLOCK_DEVICE} | cut -d "/" -f 3` | 859 | BLOCK=`echo ${LPARAM_BLOCK_DEVICE} | cut -d "/" -f 3` |
| 859 | SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/physical_block_size` | 860 | SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/physical_block_size` |
| 860 | 861 | ||
| 861 | BOOTLOAD_RESERVE_SIZE_BYTES=$((BOOTLOAD_RESERVE_SIZE * 1024 * 1024)) | 862 | BOOTLOAD_RESERVE_SIZE_BYTES=$((BOOTLOAD_RESERVE_SIZE * 1024 * 1024)) |
| 862 | PART1_SIZE_BYTES=$((PART1_SIZE * 1024 * 1024)) | 863 | PART1_SIZE_BYTES=$((PART1_SIZE * 1024 * 1024)) |
| 863 | PART1_END_BYTES=`expr ${BOOTLOAD_RESERVE_SIZE_BYTES} + ${PART1_SIZE_BYTES}` | 864 | PART1_END_BYTES=`expr ${BOOTLOAD_RESERVE_SIZE_BYTES} + ${PART1_SIZE_BYTES}` |
| 864 | ROOTFS_SIZE_BYTES=$((ROOTFS_SIZE * 1024 * 1024)) | 865 | ROOTFS_SIZE_BYTES=$((ROOTFS_SIZE * 1024 * 1024)) |
| 865 | 866 | ||
| 866 | PART1_FIRST_SECT=`ceildiv ${BOOTLOAD_RESERVE_SIZE_BYTES} ${SECT_SIZE_BYTES}` | 867 | PART1_FIRST_SECT=`ceildiv ${BOOTLOAD_RESERVE_SIZE_BYTES} ${SECT_SIZE_BYTES}` |
| 867 | PART1_END_SECT=`ceildiv ${PART1_END_BYTES} ${SECT_SIZE_BYTES}` | 868 | PART1_END_SECT=`ceildiv ${PART1_END_BYTES} ${SECT_SIZE_BYTES}` |
| 868 | PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1 ` | 869 | PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1 ` |
| 869 | 870 | ||
| 870 | (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \ | 871 | (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \ |
| 871 | echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \ | 872 | echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \ |
| 872 | echo $PART2_FIRST_SECT; echo; echo p; echo w) | fdisk -u ${LPARAM_BLOCK_DEVICE} > /dev/null | 873 | echo $PART2_FIRST_SECT; echo; echo p; echo w) | fdisk -u ${LPARAM_BLOCK_DEVICE} > /dev/null |
| 873 | 874 | ||
| 874 | sleep 2; sync; | 875 | sleep 2; sync; |
| 875 | fdisk -l ${LPARAM_BLOCK_DEVICE} | 876 | fdisk -l ${LPARAM_BLOCK_DEVICE} |
| 876 | 877 | ||
| 877 | sleep 2; sync; | 878 | sleep 2; sync; |
| 878 | 879 | ||
| 879 | # Format the partitions | 880 | # Format the partitions |
| 880 | format_sdcard | 881 | format_sdcard |
| 881 | sleep 2; sync; | 882 | sleep 2; sync; |
| 882 | 883 | ||
| 883 | flash_u-boot | 884 | flash_u-boot |
| 884 | sleep 2; sync; | 885 | sleep 2; sync; |
| 885 | 886 | ||
| 886 | # Mount the partitions | 887 | # Mount the partitions |
| 887 | mkdir -p ${P1_MOUNT_DIR} | 888 | mkdir -p ${P1_MOUNT_DIR} |
| 888 | mkdir -p ${P2_MOUNT_DIR} | 889 | mkdir -p ${P2_MOUNT_DIR} |
| 889 | sync | 890 | sync |
| 890 | 891 | ||
| 891 | mount ${LPARAM_BLOCK_DEVICE}${part}1 ${P1_MOUNT_DIR} | 892 | mount ${LPARAM_BLOCK_DEVICE}${part}1 ${P1_MOUNT_DIR} |
| 892 | mount ${LPARAM_BLOCK_DEVICE}${part}2 ${P2_MOUNT_DIR} | 893 | mount ${LPARAM_BLOCK_DEVICE}${part}2 ${P2_MOUNT_DIR} |
| 893 | sleep 2; sync; | 894 | sleep 2; sync; |
| 894 | 895 | ||
| 895 | flash_sdcard | 896 | flash_sdcard |
| 896 | copy_debian_images | 897 | copy_debian_images |
| 897 | copy_scripts | 898 | copy_scripts |
| 898 | 899 | ||
| 899 | pr_info "Sync sdcard..." | 900 | pr_info "Sync sdcard..." |
| 900 | sync | 901 | sync |
| 901 | umount ${P1_MOUNT_DIR} | 902 | umount ${P1_MOUNT_DIR} |
| 902 | umount ${P2_MOUNT_DIR} | 903 | umount ${P2_MOUNT_DIR} |
| 903 | 904 | ||
| 904 | rm -rf ${P1_MOUNT_DIR} | 905 | rm -rf ${P1_MOUNT_DIR} |
| 905 | rm -rf ${P2_MOUNT_DIR} | 906 | rm -rf ${P2_MOUNT_DIR} |
| 906 | 907 | ||
| 907 | pr_info "Done make sdcard!" | 908 | pr_info "Done make sdcard!" |
| 908 | 909 | ||
| 909 | return 0; | 910 | return 0; |
| 910 | } | 911 | } |
| 911 | 912 | ||
| 912 | #################### commands ################ | 913 | #################### commands ################ |
| 913 | 914 | ||
| 914 | function cmd_make_deploy() { | 915 | function cmd_make_deploy() { |
| 915 | make_prepare; | 916 | make_prepare; |
| 916 | 917 | ||
| 917 | # get linaro toolchain | 918 | # get linaro toolchain |
| 918 | (( `ls ${G_CROSS_COMPILER_PATH} 2>/dev/null | wc -l` == 0 )) && { | 919 | (( `ls ${G_CROSS_COMPILER_PATH} 2>/dev/null | wc -l` == 0 )) && { |
| 919 | pr_info "Get and unpack cross compiler"; | 920 | pr_info "Get and unpack cross compiler"; |
| 920 | get_remote_file ${G_EXT_CROSS_COMPILER_LINK} ${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE} | 921 | get_remote_file ${G_EXT_CROSS_COMPILER_LINK} ${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE} |
| 921 | tar -xJf ${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE} -C ${G_TOOLS_PATH}/ | 922 | tar -xJf ${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE} -C ${G_TOOLS_PATH}/ |
| 922 | }; | 923 | }; |
| 923 | 924 | ||
| 924 | # get uboot repository | 925 | # get uboot repository |
| 925 | (( `ls ${G_UBOOT_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && { | 926 | (( `ls ${G_UBOOT_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && { |
| 926 | pr_info "Get uboot repository"; | 927 | pr_info "Get uboot repository"; |
| 927 | get_git_src ${G_UBOOT_GIT} ${G_UBOOT_BRANCH} ${G_UBOOT_SRC_DIR} ${G_UBOOT_REV} | 928 | get_git_src ${G_UBOOT_GIT} ${G_UBOOT_BRANCH} ${G_UBOOT_SRC_DIR} ${G_UBOOT_REV} |
| 928 | }; | 929 | }; |
| 929 | 930 | ||
| 930 | # get kernel repository | 931 | # get kernel repository |
| 931 | (( `ls ${G_LINUX_KERNEL_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && { | 932 | (( `ls ${G_LINUX_KERNEL_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && { |
| 932 | pr_info "Get kernel repository"; | 933 | pr_info "Get kernel repository"; |
| 933 | get_git_src ${G_LINUX_KERNEL_GIT} ${G_LINUX_KERNEL_BRANCH} ${G_LINUX_KERNEL_SRC_DIR} ${G_LINUX_KERNEL_REV} | 934 | get_git_src ${G_LINUX_KERNEL_GIT} ${G_LINUX_KERNEL_BRANCH} ${G_LINUX_KERNEL_SRC_DIR} ${G_LINUX_KERNEL_REV} |
| 934 | cd ${G_LINUX_KERNEL_SRC_DIR} | 935 | cd ${G_LINUX_KERNEL_SRC_DIR} |
| 935 | git am < ${G_EMBEDIAN_PATH}/patches/kernel/0001-vivante-gpu-revert-to-6.2.4.p1-driver.patch | 936 | git am < ${G_EMBEDIAN_PATH}/patches/kernel/0001-vivante-gpu-revert-to-6.2.4.p1-driver.patch |
| 936 | git am < ${G_EMBEDIAN_PATH}/patches/kernel/0001-smarc-imx8m-compile-imx-sdma-driver-as-module.patch | 937 | git am < ${G_EMBEDIAN_PATH}/patches/kernel/0001-smarc-imx8m-compile-imx-sdma-driver-as-module.patch |
| 937 | cd - | 938 | cd - |
| 938 | }; | 939 | }; |
| 939 | 940 | ||
| 940 | return 0; | 941 | return 0; |
| 941 | } | 942 | } |
| 942 | 943 | ||
| 943 | function cmd_make_rootfs() { | 944 | function cmd_make_rootfs() { |
| 944 | make_prepare; | 945 | make_prepare; |
| 945 | 946 | ||
| 946 | ## make debian rootfs | 947 | ## make debian rootfs |
| 947 | cd ${G_ROOTFS_DIR} | 948 | cd ${G_ROOTFS_DIR} |
| 948 | make_debian_rootfs ${G_ROOTFS_DIR} || { | 949 | make_debian_rootfs ${G_ROOTFS_DIR} || { |
| 949 | pr_error "Failed #$? in function make_debian_rootfs" | 950 | pr_error "Failed #$? in function make_debian_rootfs" |
| 950 | cd -; | 951 | cd -; |
| 951 | return 1; | 952 | return 1; |
| 952 | } | 953 | } |
| 953 | cd - | 954 | cd - |
| 954 | 955 | ||
| 955 | ## pack rootfs | 956 | ## pack rootfs |
| 956 | make_tarbar ${G_ROOTFS_DIR} ${G_ROOTFS_TARBAR_PATH} || { | 957 | make_tarbar ${G_ROOTFS_DIR} ${G_ROOTFS_TARBAR_PATH} || { |
| 957 | pr_error "Failed #$? in function make_tarbar" | 958 | pr_error "Failed #$? in function make_tarbar" |
| 958 | return 4; | 959 | return 4; |
| 959 | } | 960 | } |
| 960 | 961 | ||
| 961 | return 0; | 962 | return 0; |
| 962 | } | 963 | } |
| 963 | 964 | ||
| 964 | function cmd_make_uboot() { | 965 | function cmd_make_uboot() { |
| 965 | make_uboot ${G_UBOOT_SRC_DIR} ${PARAM_OUTPUT_DIR} || { | 966 | make_uboot ${G_UBOOT_SRC_DIR} ${PARAM_OUTPUT_DIR} || { |
| 966 | pr_error "Failed #$? in function make_uboot" | 967 | pr_error "Failed #$? in function make_uboot" |
| 967 | return 1; | 968 | return 1; |
| 968 | }; | 969 | }; |
| 969 | 970 | ||
| 970 | return 0; | 971 | return 0; |
| 971 | } | 972 | } |
| 972 | 973 | ||
| 973 | function cmd_make_kernel() { | 974 | function cmd_make_kernel() { |
| 974 | make_kernel ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} "${G_LINUX_DTB}" ${G_LINUX_KERNEL_SRC_DIR} ${PARAM_OUTPUT_DIR} || { | 975 | make_kernel ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} "${G_LINUX_DTB}" ${G_LINUX_KERNEL_SRC_DIR} ${PARAM_OUTPUT_DIR} || { |
| 975 | pr_error "Failed #$? in function make_kernel" | 976 | pr_error "Failed #$? in function make_kernel" |
| 976 | return 1; | 977 | return 1; |
| 977 | }; | 978 | }; |
| 978 | 979 | ||
| 979 | return 0; | 980 | return 0; |
| 980 | } | 981 | } |
| 981 | 982 | ||
| 982 | function cmd_make_kmodules() { | 983 | function cmd_make_kmodules() { |
| 983 | make_prepare; | 984 | make_prepare; |
| 984 | 985 | ||
| 985 | rm -rf ${G_ROOTFS_DIR}/lib/modules/* || { | 986 | rm -rf ${G_ROOTFS_DIR}/lib/modules/* || { |
| 986 | pr_error "Failed #$? prepare modules dir" | 987 | pr_error "Failed #$? prepare modules dir" |
| 987 | return 1; | 988 | return 1; |
| 988 | }; | 989 | }; |
| 989 | 990 | ||
| 990 | make_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${G_ROOTFS_DIR} || { | 991 | make_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${G_ROOTFS_DIR} || { |
| 991 | pr_error "Failed #$? in function make_kernel_modules" | 992 | pr_error "Failed #$? in function make_kernel_modules" |
| 992 | return 2; | 993 | return 2; |
| 993 | }; | 994 | }; |
| 994 | 995 | ||
| 995 | install_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${G_ROOTFS_DIR} || { | 996 | install_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${G_ROOTFS_DIR} || { |
| 996 | pr_error "Failed #$? in function install_kernel_modules" | 997 | pr_error "Failed #$? in function install_kernel_modules" |
| 997 | return 2; | 998 | return 2; |
| 998 | }; | 999 | }; |
| 999 | 1000 | ||
| 1000 | return 0; | 1001 | return 0; |
| 1001 | } | 1002 | } |
| 1002 | 1003 | ||
| 1003 | function cmd_make_rfs_tar() { | 1004 | function cmd_make_rfs_tar() { |
| 1004 | ## pack rootfs | 1005 | ## pack rootfs |
| 1005 | make_tarbar ${G_ROOTFS_DIR} ${G_ROOTFS_TARBAR_PATH} || { | 1006 | make_tarbar ${G_ROOTFS_DIR} ${G_ROOTFS_TARBAR_PATH} || { |
| 1006 | pr_error "Failed #$? in function make_tarbar" | 1007 | pr_error "Failed #$? in function make_tarbar" |
| 1007 | return 1; | 1008 | return 1; |
| 1008 | } | 1009 | } |
| 1009 | 1010 | ||
| 1010 | return 0; | 1011 | return 0; |
| 1011 | } | 1012 | } |
| 1012 | 1013 | ||
| 1013 | function cmd_make_sdcard() { | 1014 | function cmd_make_sdcard() { |
| 1014 | make_sdcard ${PARAM_BLOCK_DEVICE} ${PARAM_OUTPUT_DIR} || { | 1015 | make_sdcard ${PARAM_BLOCK_DEVICE} ${PARAM_OUTPUT_DIR} || { |
| 1015 | pr_error "Failed #$? in function make_sdcard" | 1016 | pr_error "Failed #$? in function make_sdcard" |
| 1016 | return 1; | 1017 | return 1; |
| 1017 | }; | 1018 | }; |
| 1018 | 1019 | ||
| 1019 | return 0; | 1020 | return 0; |
| 1020 | } | 1021 | } |
| 1021 | 1022 | ||
| 1022 | function cmd_make_clean() { | 1023 | function cmd_make_clean() { |
| 1023 | 1024 | ||
| 1024 | ## clean kernel, dtb, modules | 1025 | ## clean kernel, dtb, modules |
| 1025 | clean_kernel ${G_LINUX_KERNEL_SRC_DIR} || { | 1026 | clean_kernel ${G_LINUX_KERNEL_SRC_DIR} || { |
| 1026 | pr_error "Failed #$? in function clean_kernel" | 1027 | pr_error "Failed #$? in function clean_kernel" |
| 1027 | return 1; | 1028 | return 1; |
| 1028 | }; | 1029 | }; |
| 1029 | 1030 | ||
| 1030 | ## clean u-boot | 1031 | ## clean u-boot |
| 1031 | clean_uboot ${G_UBOOT_SRC_DIR} || { | 1032 | clean_uboot ${G_UBOOT_SRC_DIR} || { |
| 1032 | pr_error "Failed #$? in function clean_uboot" | 1033 | pr_error "Failed #$? in function clean_uboot" |
| 1033 | return 2; | 1034 | return 2; |
| 1034 | }; | 1035 | }; |
| 1035 | 1036 | ||
| 1036 | ## delete tmp dirs and etc | 1037 | ## delete tmp dirs and etc |
| 1037 | pr_info "Delete tmp dir ${G_TMP_DIR}" | 1038 | pr_info "Delete tmp dir ${G_TMP_DIR}" |
| 1038 | rm -rf ${G_TMP_DIR} && :; | 1039 | rm -rf ${G_TMP_DIR} && :; |
| 1039 | 1040 | ||
| 1040 | pr_info "Delete rootfs dir ${G_ROOTFS_DIR}" | 1041 | pr_info "Delete rootfs dir ${G_ROOTFS_DIR}" |
| 1041 | rm -rf ${G_ROOTFS_DIR} && :; | 1042 | rm -rf ${G_ROOTFS_DIR} && :; |
| 1042 | 1043 | ||
| 1043 | return 0; | 1044 | return 0; |
| 1044 | } | 1045 | } |
| 1045 | 1046 | ||
| 1046 | #################### main function ####################### | 1047 | #################### main function ####################### |
| 1047 | 1048 | ||
| 1048 | ## test for root access support (msrc not allowed) | 1049 | ## test for root access support (msrc not allowed) |
| 1049 | [ "$PARAM_CMD" != "deploy" ] && [ "$PARAM_CMD" != "bootloader" ] && [ "$PARAM_CMD" != "kernel" ] && [ "$PARAM_CMD" != "modules" ] && [ ${EUID} -ne 0 ] && { | 1050 | [ "$PARAM_CMD" != "deploy" ] && [ "$PARAM_CMD" != "bootloader" ] && [ "$PARAM_CMD" != "kernel" ] && [ "$PARAM_CMD" != "modules" ] && [ ${EUID} -ne 0 ] && { |
| 1050 | pr_error "this command must be run as root (or sudo/su)" | 1051 | pr_error "this command must be run as root (or sudo/su)" |
| 1051 | exit 1; | 1052 | exit 1; |
| 1052 | }; | 1053 | }; |
| 1053 | 1054 | ||
| 1054 | V_RET_CODE=0; | 1055 | V_RET_CODE=0; |
| 1055 | 1056 | ||
| 1056 | pr_info "Command: \"$PARAM_CMD\" start..." | 1057 | pr_info "Command: \"$PARAM_CMD\" start..." |
| 1057 | 1058 | ||
| 1058 | case $PARAM_CMD in | 1059 | case $PARAM_CMD in |
| 1059 | deploy ) | 1060 | deploy ) |
| 1060 | cmd_make_deploy || { | 1061 | cmd_make_deploy || { |
| 1061 | V_RET_CODE=1; | 1062 | V_RET_CODE=1; |
| 1062 | }; | 1063 | }; |
| 1063 | ;; | 1064 | ;; |
| 1064 | rootfs ) | 1065 | rootfs ) |
| 1065 | cmd_make_rootfs || { | 1066 | cmd_make_rootfs || { |
| 1066 | V_RET_CODE=1; | 1067 | V_RET_CODE=1; |
| 1067 | }; | 1068 | }; |
| 1068 | ;; | 1069 | ;; |
| 1069 | bootloader ) | 1070 | bootloader ) |
| 1070 | cmd_make_uboot || { | 1071 | cmd_make_uboot || { |
| 1071 | V_RET_CODE=1; | 1072 | V_RET_CODE=1; |
| 1072 | } | 1073 | } |
| 1073 | ;; | 1074 | ;; |
| 1074 | kernel ) | 1075 | kernel ) |
| 1075 | cmd_make_kernel || { | 1076 | cmd_make_kernel || { |
| 1076 | V_RET_CODE=1; | 1077 | V_RET_CODE=1; |
| 1077 | }; | 1078 | }; |
| 1078 | ;; | 1079 | ;; |
| 1079 | modules ) | 1080 | modules ) |
| 1080 | cmd_make_kmodules || { | 1081 | cmd_make_kmodules || { |
| 1081 | V_RET_CODE=1; | 1082 | V_RET_CODE=1; |
| 1082 | }; | 1083 | }; |
| 1083 | ;; | 1084 | ;; |
| 1084 | sdcard ) | 1085 | sdcard ) |
| 1085 | cmd_make_sdcard || { | 1086 | cmd_make_sdcard || { |
| 1086 | V_RET_CODE=1; | 1087 | V_RET_CODE=1; |
| 1087 | }; | 1088 | }; |
| 1088 | ;; | 1089 | ;; |
| 1089 | rtar ) | 1090 | rtar ) |
| 1090 | cmd_make_rfs_tar || { | 1091 | cmd_make_rfs_tar || { |
| 1091 | V_RET_CODE=1; | 1092 | V_RET_CODE=1; |
| 1092 | }; | 1093 | }; |
| 1093 | ;; | 1094 | ;; |
| 1094 | all ) | 1095 | all ) |
| 1095 | (cmd_make_uboot && | 1096 | (cmd_make_uboot && |
| 1096 | cmd_make_kernel && | 1097 | cmd_make_kernel && |
| 1097 | cmd_make_kmodules && | 1098 | cmd_make_kmodules && |
| 1098 | cmd_make_rootfs) || { | 1099 | cmd_make_rootfs) || { |
| 1099 | V_RET_CODE=1; | 1100 | V_RET_CODE=1; |
| 1100 | }; | 1101 | }; |
| 1101 | ;; | 1102 | ;; |
| 1102 | clean ) | 1103 | clean ) |
| 1103 | cmd_make_clean || { | 1104 | cmd_make_clean || { |
| 1104 | V_RET_CODE=1; | 1105 | V_RET_CODE=1; |
| 1105 | }; | 1106 | }; |
| 1106 | ;; | 1107 | ;; |
| 1107 | * ) | 1108 | * ) |
| 1108 | pr_error "Invalid input command: \"${PARAM_CMD}\""; | 1109 | pr_error "Invalid input command: \"${PARAM_CMD}\""; |
| 1109 | V_RET_CODE=1; | 1110 | V_RET_CODE=1; |
| 1110 | ;; | 1111 | ;; |
| 1111 | esac | 1112 | esac |
| 1112 | 1113 | ||
| 1113 | pr_info "" | 1114 | pr_info "" |
| 1114 | pr_info "Command: \"$PARAM_CMD\" end. Exit code: ${V_RET_CODE}" | 1115 | pr_info "Command: \"$PARAM_CMD\" end. Exit code: ${V_RET_CODE}" |
| 1115 | pr_info "" | 1116 | pr_info "" |
| 1116 | 1117 | ||
| 1117 | 1118 | ||
| 1118 | exit ${V_RET_CODE}; | 1119 | exit ${V_RET_CODE}; |
| 1119 | 1120 |