#!/bin/bash # v3: all in one # # Last updated: 2024-12-04 # set -e SCRIPT=$(which $0) SCRIPTS_DIR=$(dirname $SCRIPT) usage() { echo "Usage: $0 [options]" echo "Options:" echo " -D, --dist the distribution of rootfs (default: bianbu-24.04)" echo " -b, --base base rootfs (.tar.gz format), (default: bianbu-base-24.04-base-riscv64.tar.gz)" echo " -t, --target target rootfs directory" echo " -a, --arch target arch (default: riscv64)" echo " -p, --password the password of root user (default: bianbu)" echo " -H, --hostname the hostname of machine (default: bianbu)" echo " -n, --nameserver the nameserver of machine (default: 8.8.8.8)" echo " -B, --board the board of rootfs, [k1] (default: k1)" echo " -V, --variant the variant of rootfs, [ROS-minimal|ROS-lite] (default: ROS-lite)" echo " -u, --username the name of default user (default: bianbu)" echo " --baseversion the version of base bianbu (default: v2.0.4)" echo " -v, --version the version of solution (default: v1.0)" echo " -r, --repo the repo of bianbu (default: archive.spacemit.com/bianbu)" echo " -s, --size the size of rootfs (default: 8192M)" echo " -i, --inode the number of rootfs inodes (default: 524288)" echo " -h, --help display this help and exit" } # Default values DIST="bianbu-24.04" BASE_ROOTFS="bianbu-base-24.04-base-riscv64.tar.gz" TARGET_ROOTFS="" ARCH="riscv64" PASSWD="bianbu" HOST_NAME="bianbu" #默认DNS,内网最好切换成自己本地的DNS ##TODO:是否可以获取本地的dns NAME_SERVER="10.0.26.16" BOARD="k1" VARIANT="ROS-lite" USER_NAME="bianbu" BASE_VERSION="v2.2" VERSION="v0.6" REPO="archive.spacemit.com/bianbu" SIZE="8192M" INODE="524288" # Parse command line arguments while [[ "$#" -gt 0 ]]; do case $1 in -D | --dist) DIST="$2" shift ;; -b | --base) BASE_ROOTFS="$2" shift ;; -t | --target) TARGET_ROOTFS="$2" shift ;; -a | --arch) ARCH="$2" shift ;; -p | --password) PASSWD="$2" shift ;; -H | --hostname) HOST_NAME="$2" shift ;; -n | --nameserver) NAME_SERVER="$2" shift ;; -B | --board) BOARD="$2" shift ;; -V | --variant) VARIANT="$2" shift ;; -u | --username) USER_NAME="$2" shift ;; --baseversion) BASE_VERSION="$2" shift ;; -v | --version) VERSION="$2" shift ;; -r | --repo) REPO="$2" shift ;; -s | --size) SIZE="$2" shift ;; -i | --inode) INODE="$2" shift ;; -h | --help) usage exit 0 ;; *) echo "Unknown parameter passed: $1" usage exit 1 ;; esac shift done # 函数:根据 DIST 设置 CODENAME get_codename() { local DIST=$1 case "$DIST" in "bianbu-23.10" | "ubuntu-23.10") echo "mantic" ;; "bianbu-24.04" | "ubuntu-24.04") echo "noble" ;; *) exit_ "Unsupported distribution: $DIST" ;; esac } # 函数:处理 TARGET_ROOTFS 变量 prepare_rootfs() { local DIST=$1 local VARIANT=$2 local DATE=$3 local VERSION=$4 local BOARD=$5 CURRENT=$DIST-rootfs-$VARIANT-$BOARD-current if [ -L $CURRENT ]; then TARGET_ROOTFS=$(readlink $CURRENT) else inf "$CURRENT does not exist. Will try to create new rootfs" TARGET_ROOTFS=$DIST-rootfs-$VARIANT-$BOARD-$VERSION-$DATE [ -z $BASE_ROOTFS ] && exit_ "Base rootfs is required" [ ! -f $BASE_ROOTFS ] && wget -nv https://archive.spacemit.com/bianbu-base/$BASE_ROOTFS --no-check-certificate [ ! -d $TARGET_ROOTFS ] && mkdir -p $TARGET_ROOTFS && tar -zxpf $BASE_ROOTFS -C $TARGET_ROOTFS fi if [ -L $TARGET_ROOTFS ]; then TARGET_ROOTFS=$(readlink $TARGET_ROOTFS) fi } config_bianbu_sources_list() { # 获取 suite 数组和文件路径 local suites=("$@") # 假设所有参数除了最后一个都是 suite local file_path=${suites[-1]} # 最后一个参数作为文件路径 unset suites[-1] # 移除数组中的最后一个元素(文件路径) suites=("${suites[@]}") # 重建数组,排除未定义的索引 for i in "${!suites[@]}"; do # 使用!来获取索引 if [ "$BASE_VERSION" != "main" ] && [ "$BASE_VERSION" != "daily" ]; then # 检查VERSION suites[$i]="${suites[$i]}/snapshots/$BASE_VERSION" # 更新数组元素 fi done inf "$file_path:" echo "sources suites:${suites[@]}" cat <$TARGET_ROOTFS/etc/netplan/01-netcfg.yaml </dev/null | grep -q 'install ok installed'"; then inf "Package ${FC} is already installed." return 0 fi config_bianbu_sources_list "$CODENAME" "$CODENAME-security" "$CODENAME-porting" "$CODENAME-customization" "$TARGET_ROOTFS/etc/apt/sources.list.d/bianbu.sources" cat <$TARGET_ROOTFS/etc/apt/preferences.d/bianbu Package: * Pin: release o=Spacemit, n=noble-porting Pin-Priority: 1100 Package: * Pin: release o=Spacemit, n=noble-customization Pin-Priority: 1100 EOF inf "setting target host name" echo $HOST_NAME >$TARGET_ROOTFS/etc/hostname cat >$TARGET_ROOTFS/etc/hosts <$TARGET_ROOTFS/etc/resolv.conf inf "installing bianbu-minimal" chroot $TARGET_ROOTFS /bin/bash -c "apt-get update" chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades upgrade" chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades install initramfs-tools" chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades install base-files fdisk u-boot-spacemit opensbi-spacemit bianbu-esos bianbu-minimal" chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades install spacemit-flash-dtbs" # chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades install linux-generic" # chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades install linux-image-6.6.63-rt" if [ -f /mnt/local_deb/linux-image-rt.deb ];then echo "*********install local linux image *************************" cp /mnt/local_deb/linux-image-rt.deb $TARGET_ROOTFS/tmp # if has esos.deb, should install together if [ -f /mnt/local_deb/bianbu-esos*.deb ];then echo "************ install esos deb together ****************" cp /mnt/local_deb/bianbu-esos*.deb $TARGET_ROOTFS/tmp chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive dpkg -i tmp/bianbu-esos*.deb tmp/linux-image-rt.deb" else chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive dpkg -i tmp/linux-image-rt.deb" fi chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt policy linux-image-6.6.63" local_kernel_version=$(dpkg -I /mnt/local_deb/linux-image-rt.deb | grep Version: |grep -Eo "6.6.63-.*") cat >$TARGET_ROOTFS/etc/apt/preferences.d/linux-image.pref <> $TARGET_ROOTFS/root/.bashrc } bianbu-ROS-lite() { local TARGET_ROOTFS=$1 local REPO=$2 local HOST_NAME=$3 local NAME_SERVER=$4 local USER_NAME=$5 local PASSWD=$6 local BOARD=$7 local VERSION=$8 # 保证不会重复执行 local FC="bianbu-desktop-lite" if chroot $TARGET_ROOTFS /bin/bash -c "dpkg-query -W -f='\${Status}' ${FC} 2>/dev/null | grep -q 'install ok installed'"; then inf "Package ${FC} is already installed." return 0 fi bianbu-ROS-minimal "$TARGET_ROOTFS" $MIRROR $REPO $HOST_NAME $NAME_SERVER $USER_NAME $PASSWD $BOARD $VERSION inf "installing ${FC}" # append_bianbu_sources_list "unstable" cat <>$TARGET_ROOTFS/etc/apt/preferences.d/bianbu Package: * Pin: release o=Spacemit, n=unstable Pin-Priority: 1200 EOF # 进入桌面必须有一个用户 inf "adding user: $USER_NAME" chroot $TARGET_ROOTFS /bin/bash -c "apt-get -y install adduser" #默认用户终端用bash chroot $TARGET_ROOTFS /bin/bash -c "sed -i 's/DSHELL=\/bin\/zsh/DSHELL=\/bin\/bash/g' /etc/adduser.conf" chroot $TARGET_ROOTFS /bin/bash -c "adduser --gecos \"\" --disabled-password $USER_NAME" chroot $TARGET_ROOTFS /bin/bash -c "echo $USER_NAME:$PASSWD | chpasswd" inf "adding $USER_NAME to other group" chroot $TARGET_ROOTFS /bin/bash -c "usermod -aG adm,cdrom,sudo,plugdev $USER_NAME" chroot $TARGET_ROOTFS /bin/bash -c "apt-get update" chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y install ${FC}" #install other deb chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades install openexr" chroot $TARGET_ROOTFS /bin/bash -c "apt-get purge -y zutty terminator" # 字母序靠后的生效,因此会覆盖minimal的配置 cat >$TARGET_ROOTFS/etc/netplan/01-network-manager-all.yaml <>$TARGET_ROOTFS/etc/sddm.conf.d/sddm-bianbu.conf [Autologin] Relogin=false User=$USER_NAME Session=lxqt-wayland EOF if chroot $TARGET_ROOTFS /bin/bash -c "dpkg -l | grep -q ssh"; then inf "allowing root login via ssh" echo "PermitRootLogin yes" >>$TARGET_ROOTFS/etc/ssh/sshd_config fi # cp $SCRIPTS_DIR/patch/lxqt/chromium_desktop $TARGET_ROOTFS/usr/bin/chromium_desktop # chroot $TARGET_ROOTFS /bin/bash -c "chown root:root /usr/bin/chromium_desktop && chmod 755 /usr/bin/chromium_desktop" # 桌面不用此配置文件,而是NetworkManager chroot $TARGET_ROOTFS /bin/bash -c "rm /etc/netplan/01-netcfg.yaml" chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get clean" ##用户终端环境自动加载ros2 #echo 'source /opt/ros/humble/setup.bash' >> $TARGET_ROOTFS/home/$USER_NAME/.bashrc ##用户终端自动加载bros环境 echo 'source /opt/bros/humble/setup.bash' >> $TARGET_ROOTFS/home/$USER_NAME/.bashrc ##zsh需要单独创建rc脚本 #echo 'source /opt/ros/humble/setup.zsh' >> $TARGET_ROOTFS/home/$USER_NAME/.zshrc #新增config文件 mkdir -p $TARGET_ROOTFS/root/.config/pip/ mkdir -p $TARGET_ROOTFS/home/$USER_NAME/.config/pip/ cat <>$TARGET_ROOTFS/root/.config/pip/pip.conf [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple extra-index-url = https://git.spacemit.com/api/v4/projects/33/packages/pypi/simple EOF cat <>$TARGET_ROOTFS/home/$USER_NAME/.config/pip/pip.conf [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple extra-index-url = https://git.spacemit.com/api/v4/projects/33/packages/pypi/simple EOF chroot $TARGET_ROOTFS /bin/bash -c "chown $USER_NAME:$USER_NAME -R /home/$USER_NAME/.config/" #add rvv lib for z_rvv in $(ls /mnt/local_images/*.zip);do echo "########### unzip file:$z_rvv ##############" unzip $z_rvv -d $TARGET_ROOTFS/opt done #add bros jdk if ls /mnt/local_images/bros.tar.gz >/dev/null 2>&1 ;then echo "###### untar bros.tar.gz #################" tar -xzvf /mnt/local_images/bros.tar.gz -C $TARGET_ROOTFS/opt fi if ls /mnt/local_images/jdk_sdk.tar.gz >/dev/null 2>&1 ;then echo "###### untar jdk_sdk.tar.gz #################" tar -xzvf /mnt/local_images/jdk_sdk.tar.gz -C $TARGET_ROOTFS/opt fi #add desktop tool icon mkdir -p $TARGET_ROOTFS/opt/desktop wget https://archive.spacemit.com/ros2/ros-lite-icons/my_tool_launcher.sh --no-check-certificate -P $TARGET_ROOTFS/opt/desktop wget https://archive.spacemit.com/ros2/ros-lite-icons/user-manual.png -P $TARGET_ROOTFS/opt/desktop chmod +x $TARGET_ROOTFS/opt/desktop/my_tool_launcher.sh wget https://archive.spacemit.com/ros2/ros-lite-icons/Desktop/tools.desktop --no-check-certificate -P $TARGET_ROOTFS/home/bianbu/Desktop wget https://archive.spacemit.com/ros2/ros-lite-icons/Desktop/user-manual.desktop -P $TARGET_ROOTFS/home/bianbu/Desktop chroot $TARGET_ROOTFS /bin/bash -c "chown $USER_NAME:$USER_NAME -R /home/$USER_NAME/Desktop/" chroot $TARGET_ROOTFS /bin/bash -c "chown $USER_NAME:$USER_NAME -R /opt/" #promote noble-ros cat >> $TARGET_ROOTFS/etc/apt/preferences.d/bianbu << EOF Package: * Pin: release o=Spacemit, n=noble-ros Pin-Priority: 1100 EOF } err() { echo -e "\033[;31mError: $*\033[0m" } inf() { echo -e "\033[;34mInfo: $*\033[0m" } exit_() { err "$*" exit 1 } path_strip() { echo "$(basename $1)" } mount_() { inf "mounting /proc, /sys, /dev, /dev/pts" mount | grep "$1/proc" >/dev/null || mount -t proc /proc $1/proc mount | grep "$1/sys" >/dev/null || mount -t sysfs /sys $1/sys mount | grep "$1/dev" >/dev/null || mount -o bind /dev $1/dev mount | grep "$1/dev/pts" >/dev/null || mount -o bind /dev/pts $1/dev/pts } umount_() { inf "umounting /proc, /sys, /dev, /dev/pts" mount | grep "$1/proc" >/dev/null && umount -l $1/proc mount | grep "$1/sys" >/dev/null && umount -l $1/sys mount | grep "$1/dev/pts" >/dev/null && umount -l $1/dev/pts mount | grep "$1/dev" >/dev/null && umount -l $1/dev } update_uuid_and_fstab() { local BOOTFS_IMAGE=$1 local ROOTFS_IMAGE=$2 # 重新生成一组UUID,以免与SD卡的UUID冲突 local UUID_BOOTFS=$(uuidgen) local UUID_ROOTFS=$(uuidgen) # 修改/etc/fstab mkdir rootfs mount $ROOTFS_IMAGE rootfs cat >rootfs/etc/fstab < UUID=$UUID_ROOTFS / ext4 defaults,noatime,errors=remount-ro 0 1 UUID=$UUID_BOOTFS /boot ext4 defaults 0 2 EOF umount rootfs rm rootfs -r # 修改UUID e2fsck -f -y "$BOOTFS_IMAGE" tune2fs $BOOTFS_IMAGE -U $UUID_BOOTFS blkid $BOOTFS_IMAGE e2fsck -f -y "$ROOTFS_IMAGE" tune2fs $ROOTFS_IMAGE -U $UUID_ROOTFS blkid $ROOTFS_IMAGE echo "UUID 和 /etc/fstab 更新成功" return 0 } export TZ="Asia/Shanghai" CODENAME=$(get_codename $DIST) DATE=$(date +%Y%m%d%H%M%S) # 准备TARGET_ROOTFS目录 if [ -z $TARGET_ROOTFS ]; then prepare_rootfs "$DIST" "$VARIANT" "$DATE" "$VERSION" "$BOARD" elif [ -L $TARGET_ROOTFS ]; then TARGET_ROOTFS=$(readlink $TARGET_ROOTFS) fi TARGET_ROOTFS=$(basename $TARGET_ROOTFS) inf "Base rootfs: $BASE_ROOTFS" inf "Target rootfs: $TARGET_ROOTFS" inf "Architecture: $ARCH" inf "Hostname: $HOST_NAME" inf "Name server: $NAME_SERVER" inf "Variant: $VARIANT" inf "User name: $USER_NAME" echo trap "echo ' Sorry! I have trapped Ctrl-C';umount_ $TARGET_ROOTFS;echo '取消挂载成功,退出进程';exit 0" SIGINT trap "echo ' Sorry! I have trapped SIGTERM';umount_ $TARGET_ROOTFS;echo '取消挂载成功,退出进程';exit 0" SIGTERM # mount filesystem mount_ $TARGET_ROOTFS # 核心:调用与OS-Variant同名的函数 if declare -f "${DIST%-*}-${VARIANT}" >/dev/null; then "${DIST%-*}-${VARIANT}" "$TARGET_ROOTFS" $MIRROR $REPO $HOST_NAME $NAME_SERVER $USER_NAME $PASSWD $BOARD $BASE_VERSION else pwd cd umount_ $TARGET_ROOTFS exit_ "VARIANT not found: ${DIST%-*}-${VARIANT}" fi # umount umount_ $TARGET_ROOTFS rm -f $TARGET_ROOTFS/root/.bash_history rm -rf $TARGET_ROOTFS/home/bianbu/.cache # 更新current ROOTFS软连接 CURRENT=$DIST-rootfs-$VARIANT-$BOARD-current if [ -L $CURRENT ]; then unlink $CURRENT fi ln -s -v $TARGET_ROOTFS $CURRENT # 临时打包目录 TMP=$DIST-$VARIANT-$BOARD-$VERSION-$(date +%Y%m%d%H%M%S) TARGET_BOOTFS="${TARGET_ROOTFS/rootfs/boofs}" rm -rf $TMP mkdir -p $TMP $TARGET_BOOTFS # 生成UUID,并写入/etc/fstab UUID_BOOTFS=$(uuidgen) UUID_ROOTFS=$(uuidgen) inf "generating boot.ext4" cat >$TARGET_ROOTFS/etc/fstab < UUID=$UUID_ROOTFS / ext4 defaults,noatime,errors=remount-ro 0 1 UUID=$UUID_BOOTFS /boot ext4 defaults 0 2 EOF # 移动boot到其他目录 if [ "$(ls -A $TARGET_ROOTFS/boot 2>/dev/null)" ]; then inf "moving $TARGET_ROOTFS/boot/* to $TARGET_BOOTFS" mv $TARGET_ROOTFS/boot/* $TARGET_BOOTFS else inf "$TARGET_ROOTFS/boot is empty, sikp moving" # 确保BOOTFS目录不为空 if [ -z "$(ls -A $TARGET_BOOTFS)" ]; then exit_ "$TARGET_BOOTFS is empty" fi fi # 更新current BOOTFS软连接 BOOTFS_CURRENT=$DIST-bootfs-$VARIANT-$BOARD-current if [ -L $BOOTFS_CURRENT ]; then unlink $BOOTFS_CURRENT fi ln -s -v $TARGET_BOOTFS $BOOTFS_CURRENT #cover local kernel image if [ -f /mnt/local_images/vmlinuz-6.6.63 ];then echo "use local kernel" cp /mnt/local_images/vmlinuz-6.6.63 $TARGET_BOOTFS sed -i "s/knl_name=.*/knl_name=vmlinuz-6.6.63/g" $TARGET_BOOTFS/env_k1-x.txt fi if ls /mnt/local_images/*.dtb >/dev/null 2>&1 ;then echo "use local dtb files" cp /mnt/local_images/*.dtb $TARGET_BOOTFS/$(cat $TARGET_BOOTFS/env_k1-x.txt |grep "dtb_dir=" |awk -F'=' '{print $2}') fi #copy lib to /lib/riscv64-linux-gnu/ if ls /mnt/local_images/lib/* >/dev/null 2>&1 ;then echo "copy local lib files to /lib/" cp -r /mnt/local_images/lib/* $TARGET_ROOTFS/lib/ fi #copy bin to /usr/bin if ls /mnt/local_images/usr/* >/dev/null 2>&1 ;then echo "copy local usr files to /usr/" cp -r /mnt/local_images/usr/* $TARGET_ROOTFS/usr/ fi # 获取FSBL.bin,分区表,fastboot等文件到TMP目录 mkdir -p $TMP/factory/ cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/bootinfo_emmc.bin $TMP/factory/ cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/bootinfo_sd.bin $TMP/factory/ cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/bootinfo_spinand.bin $TMP/factory/ cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/bootinfo_spinor.bin $TMP/factory/ cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/FSBL.bin $TMP/factory/ if [ -f /mnt/local_images/u-boot.itb ];then echo "use local u-boot.itb" cp /mnt/local_images/u-boot.itb $TMP else cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/u-boot.itb $TMP fi cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/env.bin $TMP cp $TARGET_ROOTFS/usr/lib/riscv64-linux-gnu/opensbi/generic/fw_dynamic.itb $TMP echo "ls $SCRIPTS_DIR, " ls $SCRIPTS_DIR if [ -f $SCRIPTS_DIR/../config/fastboot.yaml ];then echo "copy local config files" cp -r $SCRIPTS_DIR/../config/* $TMP cp -r $SCRIPTS_DIR/../genimage/* $TMP else echo "download config files from gitee" wget -P $TMP https://gitee.com/bianbu/image-config/raw/main/fastboot.yaml wget -P $TMP https://gitee.com/bianbu/image-config/raw/main/partition_2M.json wget -P $TMP https://gitee.com/bianbu/image-config/raw/main/partition_flash.json wget -P $TMP https://gitee.com/bianbu/image-config/raw/main/partition_universal.json wget -P $TMP https://gitee.com/bianbu-linux/scripts/raw/bl-v1.0.y/gen_imgcfg.py fi chmod a+x $TMP/gen_imgcfg.py # 生成bootfs.ext4 rootfs.ext4 inf "create bootfs.ext4 rootfs.ext4" BOOTFS_IMAGE=bootfs.ext4 ROOTFS_IMAGE=rootfs.ext4 mke2fs -d $TARGET_BOOTFS -L bootfs -t ext4 -U $UUID_BOOTFS $TMP/$BOOTFS_IMAGE "256M" mke2fs -d $TARGET_ROOTFS -L rootfs -t ext4 -N $INODE -U $UUID_ROOTFS $TMP/$ROOTFS_IMAGE $SIZE # 生成sdcard img到当前目录 # inf "generating sdcard img" # ROOTPATH_TMP="$(mktemp -d)" # GENIMAGE_TMP="$(mktemp -d)" # $TMP/gen_imgcfg.py -i $TMP/partition_universal.json -n $TMP.sdcard -o $TMP/genimage.cfg # if genimage -v >/dev/null 2>&1;then # genimage \ # --config "$TMP/genimage.cfg" \ # --rootpath "$ROOTPATH_TMP" \ # --tmppath "$GENIMAGE_TMP" \ # --inputpath "$TMP" \ # --outputpath "." # else # echo "use local genimage" # $TMP/bin/genimage \ # --config "$TMP/genimage.cfg" \ # --rootpath "$ROOTPATH_TMP" \ # --tmppath "$GENIMAGE_TMP" \ # --inputpath "$TMP" \ # --outputpath "." # fi # 删除生成.img.zip过程中的临时目录和文件 # rm -rf $ROOTPATH_TMP $GENIMAGE_TMP # 生成titantools用的.zip IMAGE=$TMP.zip inf "generating titantools img $IMAGE" pushd $TMP >/dev/null update_uuid_and_fstab "$BOOTFS_IMAGE" "$ROOTFS_IMAGE" echo "***** clear unuse files, TMP path:$TMP *****" pwd rm -rf $TMP/bin $TMP/gen* $TMP/conf $TMP/lib rm -rf bin gen* conf lib zip -r ../$IMAGE * popd >/dev/null # 生成软连接链到最新的sdcard img和titantools img # IMG_CURRENT=$DIST-sdcard-image-$VARIANT-$BOARD-current # if [ -L $IMG_CURRENT ]; then # unlink $IMG_CURRENT # fi # ln -s -v $TMP.sdcard $IMG_CURRENT # IMG_TAR_CURRENT=$DIST-titan-image-$VARIANT-$BOARD-current # if [ -L $IMG_TAR_CURRENT ]; then # unlink $IMG_TAR_CURRENT # fi # ln -s -v $IMAGE $IMG_TAR_CURRENT # 删除生成.zip过程中的临时目录 rm -rf $TMP echo "!!!!!!!!!! create image successful !!!!!!!!!!!!!!!!!!!" pwd ls