网站建设合同书-详细版,免费下载应用软件,建设网站采用的网络技术,免费建立网站空间文章目录 build.sh debian 执行流程build.sh源码流程 30-rootfs.sh源码流程 mk-rootfs-bullseys.sh源码流程 mk-sysroot.sh源码流程 mk-image.sh源码流程 post-build.sh 大致流程系统制作步骤 build.sh debian 执行流程
build.sh
源码
run_hooks()
{DIR$1shiftf… 文章目录 build.sh debian 执行流程build.sh源码流程 30-rootfs.sh源码流程 mk-rootfs-bullseys.sh源码流程 mk-sysroot.sh源码流程 mk-image.sh源码流程 post-build.sh 大致流程系统制作步骤 build.sh debian 执行流程
build.sh
源码
run_hooks()
{DIR$1shiftfor dir in $CHIP_DIR/$(basename $DIR)/ $DIR; do[ -d $dir ] || continuefor hook in $(find $dir -maxdepth 1 -name *.sh | sort); do$hook $ continueHOOK_RET$?err_handler $HOOK_RET ${FUNCNAME[0]} $* $hook $*exit $HOOK_RETdonedone
}run_build_hooks()
{# Dont log these hookscase $1 ininit | pre-build | make-* | usage | support-cmds)run_hooks $RK_BUILD_HOOK_DIR $ || truereturn 0;;esacLOG_FILE$(start_log $1)echo -e # run hook: $\n $LOG_FILErun_hooks $RK_BUILD_HOOK_DIR $ 21 | tee -a $LOG_FILEHOOK_RET${PIPESTATUS[0]}if [ $HOOK_RET -ne 0 ]; thenerr_handler $HOOK_RET ${FUNCNAME[0]} $* $exit $HOOK_RETfi
}main()
{[ -z $DEBUG ] || set -xtrap err_handler ERRset -eE# Save intial envionmentsunset INITIAL_SESSIONINITIAL_ENV$(mktemp -u)if [ -z $RK_SESSION ]; thenINITIAL_SESSION1env $INITIAL_ENVfiexport LC_ALLCexport SCRIPTS_DIR$(dirname $(realpath $BASH_SOURCE))export COMMON_DIR$(realpath $SCRIPTS_DIR/..)export SDK_DIR$(realpath $COMMON_DIR/../../..)export DEVICE_DIR$SDK_DIR/device/rockchipexport CHIPS_DIR$DEVICE_DIR/.chipsexport CHIP_DIR$DEVICE_DIR/.chipexport RK_DATA_DIR$COMMON_DIR/dataexport RK_TOOL_DIR$COMMON_DIR/toolsexport RK_IMAGE_DIR$COMMON_DIR/imagesexport RK_KBUILD_DIR$COMMON_DIR/linux-kbuildexport RK_CONFIG_IN$COMMON_DIR/configs/Config.inexport RK_BUILD_HOOK_DIR$COMMON_DIR/build-hooksexport BUILD_HELPER$RK_BUILD_HOOK_DIR/build-helperexport RK_POST_HOOK_DIR$COMMON_DIR/post-hooksexport POST_HELPER$RK_POST_HOOK_DIR/post-helperexport PARTITION_HELPER$SCRIPTS_DIR/partition-helperexport RK_SESSION${RK_SESSION:-$(date %F_%H-%M-%S)}export RK_OUTDIR$SDK_DIR/outputexport RK_SESSION_DIR$RK_OUTDIR/sessionsexport RK_LOG_BASE_DIR$RK_OUTDIR/logexport RK_LOG_DIR$RK_SESSION_DIR/$RK_SESSIONexport RK_INITIAL_ENV$RK_LOG_DIR/initial.envexport RK_CUSTOM_ENV$RK_LOG_DIR/custom.envexport RK_FINAL_ENV$RK_LOG_DIR/final.envexport RK_ROCKDEV_DIR$SDK_DIR/rockdevexport RK_FIRMWARE_DIR$RK_OUTDIR/firmwareexport RK_SECURITY_FIRMWARE_DIR$RK_OUTDIR/security-firmwareexport RK_CONFIG$RK_OUTDIR/.configexport RK_DEFCONFIG_LINK$RK_OUTDIR/defconfig# For Makefilecase $ inmake-targets | make-usage)run_build_hooks $rm -f $INITIAL_ENVexit 0 ;;esac# Prepare firmware dirsmkdir -p $RK_FIRMWARE_DIR $RK_SECURITY_FIRMWARE_DIRcd $SDK_DIR[ -f README.md ] || ln -rsf $COMMON_DIR/README.md .# TODO: Remove it in the repo manifest.xmlrm -f envsetup.shOPTIONS${:-allsave}# Options checkingCMDS$(run_build_hooks support-cmds all | xargs)for opt in $OPTIONS; docase $opt inhelp | h | -h | --help | usage | \?) usage ;;shell | cleanall)# Check single optionsif [ $opt $OPTIONS ]; thenbreakfiecho ERROR: $opt cannot combine with other options!;;post-rootfs)if [ $opt $1 -a -d $2 ]; then# Hide other args from build stagesOPTIONS$optbreakfiecho ERROR: $opt should be the first option followed by rootfs dir!;;*)# Make sure that all options are handledif option_check $CMDS $opt; thencontinuefiecho ERROR: Unhandled option: $opt;;esacusagedone# Prepare log dirsif [ ! -d $RK_LOG_DIR ]; thenrm -rf $RK_LOG_BASE_DIR $RK_LOG_DIR $RK_SESSION_DIR/latestmkdir -p $RK_LOG_DIRln -rsf $RK_SESSION_DIR $RK_LOG_BASE_DIRln -rsf $RK_LOG_DIR $RK_SESSION_DIR/latestecho -e \e[33mLog saved at $RK_LOG_DIR\e[0mechofi# Drop old logscd $RK_LOG_BASE_DIRrm -rf $(ls -t | sed 1,10d)cd $SDK_DIR# Save initial envionmentsif [ $INITIAL_SESSION ]; thenrm -f $RK_INITIAL_ENVmv $INITIAL_ENV $RK_INITIAL_ENVln -rsf $RK_INITIAL_ENV $RK_OUTDIR/fi# Init stage (preparing SDK configs, etc.)run_build_hooks init $OPTIONSrm -f $RK_OUTDIR/.tmpconfig*# No need to go furtherCMDS$(run_build_hooks support-cmds pre-build build \post-build | xargs) shell cleanall post-rootfsoption_check $CMDS $OPTIONS || return 0# Force exporting config environmentsset -a# Load config environmentssource $RK_CONFIGcp $RK_CONFIG $RK_LOG_DIRif [ -z $INITIAL_SESSION ]; then# Inherit session environmentssed -n s/^\(RK_.*\)\(.*\)/\1\2/p $RK_FINAL_ENV \$INITIAL_ENVsource $INITIAL_ENVrm -f $INITIAL_ENVelse# Detect and save custom environments# Find custom environmentsrm -f $RK_CUSTOM_ENVfor cfg in $(grep ^RK_ $RK_INITIAL_ENV || true); doenv | grep -q ^${cfg//\/}$ || \echo $cfg $RK_CUSTOM_ENVdone# Allow custom environments overridingif [ -e $RK_CUSTOM_ENV ]; thenln -rsf $RK_CUSTOM_ENV $RK_OUTDIR/echo -e \e[31mWARN: Found custom environments: \e[0mcat $RK_CUSTOM_ENVecho -e \e[31mAssuming that is expected, please clear them if otherwise.\e[0mread -t 10 -p Press enter to continue.source $RK_CUSTOM_ENVif grep -q ^RK_KERNEL_VERSION $RK_CUSTOM_ENV; thenecho -e \e[31mCustom RK_KERNEL_VERSION ignored!\e[0mload_config RK_KERNEL_VERSIONfiif grep -q ^RK_ROOTFS_SYSTEM $RK_CUSTOM_ENV; thenecho -e \e[31mCustom RK_ROOTFS_SYSTEM ignored!\e[0mload_config RK_ROOTFS_SYSTEMfififisource $PARTITION_HELPERrk_partition_initset aexport PYTHON3/usr/bin/python3if [ $RK_KERNEL_CFG ]; thenexport RK_KERNEL_TOOLCHAIN$(get_toolchain $RK_KERNEL_ARCH)CPUS$(getconf _NPROCESSORS_ONLN 2/dev/null || echo 1)export KMAKEmake -C $SDK_DIR/kernel/ -j$(( $CPUS 1 )) \CROSS_COMPILE$RK_KERNEL_TOOLCHAIN ARCH$RK_KERNEL_ARCHexport RK_KERNEL_VERSION_REAL$(kernel_version_real)fi# Handle special commandscase $OPTIONS inshell)echo -e \e[35mDoing this is dangerous and for developing only.\e[0m# No error handling in develop shell.set e; trap ERR/bin/bashecho -e \e[35mExit from $BASH_SOURCE shell.\e[0mexit 0 ;;cleanall)run_build_hooks cleanrm -rf $RK_OUTDIR $SDK_DIR/rockdevfinish_build cleanallexit 0 ;;post-rootfs)shiftrun_post_hooks $finish_build post-rootfsexit 0 ;;esac# Save final environmentsrm -f $RK_FINAL_ENVenv $RK_FINAL_ENVln -rsf $RK_FINAL_ENV $RK_OUTDIR/# Log configsechoecho echo Final configsecho env | grep -E ^RK_.*. | grep -vE PARTITION_[0-9] | \grep -vE \\$|_DEFAULTy | \grep -vE ^RK_CONFIG|_BASE_CFG|_LINK|DIR|_ENV|_NAME | sortecho# Pre-build stage (submodule configuring, etc.)run_build_hooks pre-build $OPTIONS# No need to go furtherCMDS$(run_build_hooks support-cmds build post-build | xargs)option_check $CMDS $OPTIONS || return 0# Build stage (building, etc.)run_build_hooks build $OPTIONS# No need to go furtherCMDS$(run_build_hooks support-cmds post-build | xargs)option_check $CMDS $OPTIONS || return 0# Post-build stage (firmware packing, etc.)run_build_hooks post-build $OPTIONS
}if [ $0 ! $BASH_SOURCE ]; then# Sourced, executing it directly$BASH_SOURCE ${:-shell}
elif [ $0 $BASH_SOURCE ]; then# Executed directlymain $
fi流程 设置导出环境变量 make-targets | make-usage 参数的执行分支 创建输出目录软连接redme等 获取支持的命令 CMDS$(run_build_hooks support-cmds all | xargs)
通过调用run_build_hooks 并传入参数support-cmds all 最后输出通过xargs处理赋值给CMDS
这个字符串包含了所有支持的命令或选项。遍历选项 help | h | -h | --help | usage 等调用 usage 输出帮助shell | cleanall如果选项是shell或cleanall则执行一段检查代码确保这些选项不是与其他选项组合使用的。如果是单独使用即$opt等于$OPTIONS则跳出循环否则显示错误信息。post-rootfs如果选项是post-rootfs则检查它是否是第一个选项并且后面跟着一个目录参数。如果是将OPTIONS设置为post-rootfs并跳出循环否则显示错误信息。*对于所有其他选项使用option_check函数检查它们是否在$CMDS中定义的支持命令列表中。如果是则继续循环否则显示错误信息。 日志相关 初始化 加载配置环境变量等 设置环境变量处理特殊命令等 输出显示最终配置信息 开始构建最终进入run_build_hooks 传入参数 build debian run_build_hooks 函数 匹配分支 init | pre-build | make-* | usage | support-cmds日志记录调用 run_hooks device/rockchip/common/build-hook debian run_hooks 调用device/rockchip/common/build-hook 下面的sh文件
30-rootfs.sh
源码
build_debian()
{check_config RK_DEBIAN_VERSION || return 0ROOTFS_DIR${1:-$RK_OUTDIR/debian}ARCH${RK_DEBIAN_ARCH:-armhf}$SCRIPTS_DIR/check-debian.shecho echo Start building $RK_DEBIAN_VERSION($ARCH)echo cd debianif [ ! -f linaro-$RK_DEBIAN_VERSION-alip-*.tar.gz ]; thenRELEASE$RK_DEBIAN_VERSION TARGETdesktop ARCH$ARCH \./mk-base-debian.shln -sf linaro-$RK_DEBIAN_VERSION-alip-*.tar.gz \linaro-$RK_DEBIAN_VERSION-$ARCH.tar.gzfiVERSIONdebug ARCH$ARCH ./mk-xwrootfs-$RK_DEBIAN_VERSION.sh. mk-xwsysroot.sh./mk-image.shln -rsf $PWD/linaro-rootfs.img $ROOTFS_DIR/rootfs.ext4finish_build build_debian $
}
build_hook()
{check_config RK_ROOTFS_TYPE || return 0if [ -z $1 -o $1 rootfs ]; thenROOTFS${RK_ROOTFS_SYSTEM:-buildroot}elseROOTFS$1fiROOTFS_IMGrootfs.${RK_ROOTFS_TYPE}ROOTFS_DIR$RK_OUTDIR/rootfsecho echo Start building rootfs($ROOTFS)echo rm -rf $ROOTFS_DIRmkdir -p $ROOTFS_DIRcase $ROOTFS inyocto) build_yocto $ROOTFS_DIR ;;debian) build_debian $ROOTFS_DIR ;;buildroot) build_buildroot $ROOTFS_DIR ;;*) usage ;;esacif [ ! -f $ROOTFS_DIR/$ROOTFS_IMG ]; thenecho Theres no $ROOTFS_IMG generated...exit 1fiif [ $RK_ROOTFS_INITRD ]; then/usr/bin/time -f you take %E to pack initrd image \$SCRIPTS_DIR/mk-ramdisk.sh $ROOTFS_DIR/$ROOTFS_IMG \$ROOTFS_DIR/boot.img $RK_BOOT_FIT_ITSln -rsf $ROOTFS_DIR/boot.img $RK_FIRMWARE_DIR/boot.imgelseln -rsf $ROOTFS_DIR/$ROOTFS_IMG $RK_FIRMWARE_DIR/rootfs.imgfifinish_build build_rootfs $
}流程
build_hook() 进入分支build_debian build_debian 执行mk-rootfs-bullseys.shmk-xwsysroot.shmk-image.sh.
mk-rootfs-bullseys.sh
源码
#!/bin/bash -e# Directory contains the target rootfs
TARGET_ROOTFS_DIRbinarycase ${ARCH:-$1} inarm|arm32|armhf)ARCHarmhf;;*)ARCHarm64;;
esacecho -e \033[36m Building for $ARCH \033[0mif [ ! $VERSION ]; thenVERSIONrelease
fiecho -e \033[36m Building for $VERSION \033[0mif [ ! -e linaro-bullseye-alip-*.tar.gz ]; thenecho \033[36m Run mk-base-debian.sh first \033[0mexit -1
fi# 卸载挂载的目录binary/dev
finish() {sudo umount $TARGET_ROOTFS_DIR/devexit -1
}
# 错误处理
trap finish ERRecho -e \033[36m Extract image \033[0m
sudo tar -xpf linaro-bullseye-alip-*.tar.gz# packages folder devmem2直接物理内存读写工具等
sudo mkdir -p $TARGET_ROOTFS_DIR/packages
sudo cp -rpf packages/$ARCH/* $TARGET_ROOTFS_DIR/packages
sudo cp -f packages/arm64/devmem2/devmem2 $TARGET_ROOTFS_DIR/usr/bin/# overlay folder wqy-zenhei.ttf特定的字体文件
sudo cp -rpf overlay/* $TARGET_ROOTFS_DIR/
sudo cp -f overlay/usr/share/wqy-zenhei.ttf $TARGET_ROOTFS_DIR/usr/share/fonts/# overlay-firmware folder 存放设备固件bin lib share不能删除去掉
sudo cp -rpf overlay-firmware/* $TARGET_ROOTFS_DIR/# overlay-debug folder
# adb, video, camera test file 如 adbAndroid Debug Bridge、视频和相机测试文件等可以删除
if [ $VERSION debug ]; thensudo cp -rpf overlay-debug/* $TARGET_ROOTFS_DIR/
fi# bt/wifi firmware 用于存放蓝牙和WiFi固件 下面cp可以删除
sudo mkdir -p $TARGET_ROOTFS_DIR/system/lib/modules/
sudo mkdir -p $TARGET_ROOTFS_DIR/vendor/etcsudo find ../kernel/drivers/net/wireless/rockchip_wlan/* -name *.ko | \xargs -n1 -i sudo cp {} $TARGET_ROOTFS_DIR/system/lib/modules/#这行代码将在终端中打印青色的 Change root..................... 文本。
echo -e \033[36m Change root.....................\033[0m
#QEMU 用户模式模拟器
if [ $ARCH armhf ]; thensudo cp /usr/bin/qemu-arm-static $TARGET_ROOTFS_DIR/usr/bin/
elif [ $ARCH arm64 ]; thensudo cp /usr/bin/qemu-aarch64-static $TARGET_ROOTFS_DIR/usr/bin/
fi
# DNS 解析器配置
sudo cp -f /etc/resolv.conf $TARGET_ROOTFS_DIR/etc/#这行代码使用 sudo mount -o bind 命令将主机的 /dev 目录绑定挂载到 $TARGET_ROOTFS_DIR/dev。
#绑定挂载是一种特殊的挂载类型它允许你将一个已存在的目录树挂载到另一个位置而不需要复制文件。这对于在 chroot 环境中运行程序时访问设备文件非常有用
sudo mount -o bind /dev $TARGET_ROOTFS_DIR/dev#获取目录所有者用户ID
ID$(stat --format %u $TARGET_ROOTFS_DIR)
#切换到根文件系统目录
cat EOF | sudo chroot $TARGET_ROOTFS_DIR# Fixup owners 修复文件所有者if [ $ID -ne 0 ]; thenfind / -user $ID -exec chown -h 0:0 {} \;
fi
# 设置 /home 目录下各用户的主目录所有权
for u in \$(ls /home/); dochown -h -R \$u:\$u /home/\$u
done# 更新软件包列表并升级已安装的软件包
echo deb http://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free /etc/apt/sources.list
echo deb-src http://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free /etc/apt/sources.listapt-get update
apt-get upgrade -yapt-get install xinput-calibrator microcom xinput rt-tests iperf3 stress lmbench udhcpc udhcpd fio hostapd nfs-common tftp-hpa gdb gdbserver fbset ca-certificates curl gnupg lsb-release mosquitto mosquitto-clients dos2unix binutils libmosquitto-dev sqlite3 telnet vsftpd mtd-utils -yapt-get install docker.io -yln -sf /usr/lib/lmbench/bin/bw_mem /usr/bin/bw_mem
ln -sf /usr/lib/lmbench/bin/stream /usr/bin/stream
ln -sf /usr/lib/lmbench/bin/msleep /usr/bin/msleepapt-get install python3-dev python3-pip python3-libevdev -y
ln -s /usr/bin/python3 /usr/bin/python
pip3 install evdevapt-get install libxkbcommon-x11-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-shape0-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-xinerama0-dev libssl-dev libsqlite3-dev -ychmod ox /usr/lib/dbus-1.0/dbus-daemon-launch-helper
chmod x /etc/rc.localexport APT_INSTALLapt-get install -fy --allow-downgrades# enter root username without password
sed -i s~\(^ExecStart.*\)~# \1\nExecStart-/bin/sh -c /bin/bash -l /dev/%I /dev/%I 2\1~ /usr/lib/systemd/system/serial-getty.service#---------------power management --------------
\${APT_INSTALL} pm-utils triggerhappy bsdmainutils
cp /etc/Powermanager/triggerhappy.service /lib/systemd/system/triggerhappy.service#---------------Rga--------------
\${APT_INSTALL} /packages/rga2/*.debecho -e \033[36m Setup Video.................... \033[0m
\${APT_INSTALL} gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-ugly gstreamer1.0-tools gstreamer1.0-alsa \
gstreamer1.0-plugins-base-apps qtmultimedia5-examples\${APT_INSTALL} /packages/mpp/*
\${APT_INSTALL} /packages/gst-rkmpp/*.deb
\${APT_INSTALL} /packages/gstreamer/*.deb
\${APT_INSTALL} /packages/gst-plugins-base1.0/*.deb
\${APT_INSTALL} /packages/gst-plugins-bad1.0/*.deb
\${APT_INSTALL} /packages/gst-plugins-good1.0/*.deb
\${APT_INSTALL} /packages/gst-plugins-ugly1.0/*.deb
\${APT_INSTALL} /packages/gst-libav1.0/*.deb#---------Camera---------
echo -e \033[36m Install camera.................... \033[0m
\${APT_INSTALL} cheese v4l-utils
\${APT_INSTALL} /packages/libv4l/*.deb
\${APT_INSTALL} /packages/cheese/*.deb#---------Xserver---------
echo -e \033[36m Install Xserver.................... \033[0m
\${APT_INSTALL} /packages/xserver/*.debapt-mark hold xserver-common xserver-xorg-core xserver-xorg-legacy#---------------Openbox--------------
echo -e \033[36m Install openbox.................... \033[0m
\${APT_INSTALL} /packages/openbox/*.deb#---------update chromium-----
\${APT_INSTALL} /packages/chromium/*.deb#------------------libdrm------------
echo -e \033[36m Install libdrm.................... \033[0m
\${APT_INSTALL} /packages/libdrm/*.deb#------------------libdrm-cursor------------
echo -e \033[36m Install libdrm-cursor.................... \033[0m
\${APT_INSTALL} /packages/libdrm-cursor/*.deb#------------------blueman------------
echo -e \033[36m Install blueman.................... \033[0m
\${APT_INSTALL} blueman
echo exit 101 /usr/sbin/policy-rc.d
chmod x /usr/sbin/policy-rc.d
\${APT_INSTALL} blueman
rm -f /usr/sbin/policy-rc.d#------------------blueman------------
echo -e \033[36m Install blueman.................... \033[0m
\${APT_INSTALL} /packages/blueman/*.deb#------------------rkwifibt------------
echo -e \033[36m Install rkwifibt.................... \033[0m
\${APT_INSTALL} /packages/rkwifibt/*.deb
ln -s /system/etc/firmware /vendor/etc/if [ $VERSION debug ]; then
#------------------glmark2------------
echo -e \033[36m Install glmark2.................... \033[0m
\${APT_INSTALL} /packages/glmark2/*.deb
fiif [ -e /usr/lib/aarch64-linux-gnu ] ;
then
#------------------rknpu2------------
echo -e \033[36m move rknpu2.................... \033[0m
mv /packages/rknpu2/*.tar /
fi#------------------rktoolkit------------
echo -e \033[36m Install rktoolkit.................... \033[0m
\${APT_INSTALL} /packages/rktoolkit/*.debecho -e \033[36m Install Chinese fonts.................... \033[0m
# Uncomment zh_CN.UTF-8 for inclusion in generation
sed -i s/^# *\(zh_CN.UTF-8\)/\1/ /etc/locale.gen
echo LANGzh_CN.UTF-8 /etc/default/locale# Generate locale
locale-gen# Export env vars
echo export LANGC.UTF-8 ~/.bashrcsource ~/.bashrc\${APT_INSTALL} ttf-wqy-zenhei fonts-aenigma
\${APT_INSTALL} xfonts-intl-chinese# HACK debian11.3 to fix bug
\${APT_INSTALL} fontconfig --reinstall#\${APT_INSTALL} xfce4
#ln -sf /usr/bin/startxfce4 /etc/alternatives/x-session-manager# HACK to disable the kernel logo on bootup 禁用启动时的内核logo
#sed -i /exit 0/i \ echo 3 /sys/class/graphics/fb0/blank /etc/rc.localcp /packages/libmali/libmali-*-x11*.deb /
cp -rf /packages/rkisp/*.deb /
cp -rf /packages/rkaiq/*.deb /
cp -rf /usr/lib/firmware/rockchip/ /# reduce 500M size for rootfs
rm -rf /usr/lib/firmware
mkdir -p /usr/lib/firmware/
mv /rockchip /usr/lib/firmware/# mark package to hold 锁定已安装的软件包,以防止它们被自动更新
apt list --installed | grep -v oldstable | cut -d/ -f1 | xargs apt-mark hold#---------------Custom Script-------------- 禁用自启动的一些服务wifi等
systemctl mask systemd-networkd-wait-online.service
systemctl mask NetworkManager-wait-online.service
rm /lib/systemd/system/wpa_supplicant.service#------remove unused packages------------
apt remove --purge -fy linux-firmware*#---------------Clean--------------
if [ -e /usr/lib/arm-linux-gnueabihf/dri ] ;
then# Only preload libdrm-cursor for Xsed -i 1aexport LD_PRELOAD/usr/lib/arm-linux-gnueabihf/libdrm-cursor.so.1 /usr/bin/Xcd /usr/lib/arm-linux-gnueabihf/dri/cp kms_swrast_dri.so swrast_dri.so rockchip_dri.so /rm /usr/lib/arm-linux-gnueabihf/dri/*.somv /*.so /usr/lib/arm-linux-gnueabihf/dri/
elif [ -e /usr/lib/aarch64-linux-gnu/dri ];
then# Only preload libdrm-cursor for Xsed -i 1aexport LD_PRELOAD/usr/lib/aarch64-linux-gnu/libdrm-cursor.so.1 /usr/bin/Xcd /usr/lib/aarch64-linux-gnu/dri/cp kms_swrast_dri.so swrast_dri.so rockchip_dri.so /rm /usr/lib/aarch64-linux-gnu/dri/*.somv /*.so /usr/lib/aarch64-linux-gnu/dri/rm /etc/profile.d/qt.sh
fi
cd -rm -rf /var/lib/apt/lists/*
rm -rf /var/cache/
rm -rf /packages/# Remove usb network card rules
rm /usr/lib/systemd/network/73-usb-net-by-mac.linkEOF# let root user can autologin and enter the ~ directory
sudo sed -i s|ExecStart-/bin/sh -c \/bin/bash -l /dev/%I /dev/%I 21\|ExecStart-/sbin/agetty --autologin root --noclear %I $TERM| $TARGET_ROOTFS_DIR/lib/systemd/system/serial-getty.servicesudo umount $TARGET_ROOTFS_DIR/dev
流程
进行文件系统构建安装库等
mk-sysroot.sh
源码
#!/bin/bash -eTARGET_ARM_DIR./sysroots/armv8a-linux
TARGET_x86_DIR./sysroots/x86_64-linuxLOCAL_PATH$(pwd)
SDK_PATH_$(dirname $PWD)export DEBIAN_PATH$LOCAL_PATHif [ -d sysroots ]; thensudo rm -r sysroots
fi# Create sysroot
echo ----------copy binary-----------
sudo mkdir -p sysroots
sudo mkdir -p $TARGET_ARM_DIR
sudo mkdir -p $TARGET_x86_DIR
sudo mkdir -p $TARGET_x86_DIR/environment-setup.dsudo cp -r ./binary/usr/lib $TARGET_ARM_DIR
sudo cp -r ./binary/{boot,etc,opt,proc,run,srv,sys,tmp,usr,var} $TARGET_ARM_DIR# Copy toolchain lib
TOOLCHAIN_PATH../extra-tools/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu
sudo mkdir -p $TARGET_ARM_DIR/usr/lib64
sudo mkdir -p $TARGET_ARM_DIR/lib64
sudo cp $TOOLCHAIN_PATH/aarch64-linux-gnu/lib64/* $TARGET_ARM_DIR/usr/lib64 -r
sudo cp $TOOLCHAIN_PATH/aarch64-linux-gnu/lib64/* $TARGET_ARM_DIR/lib64 -r
sudo cp $TOOLCHAIN_PATH/aarch64-linux-gnu/libc/lib/libm.so.6 $TOOLCHAIN_PATH/aarch64-linux-gnu/libc/lib/libc.so.6 $TARGET_ARM_DIR/lib64# Create environment
# Used to set environment variables
sudo touch $LOCAL_PATH/sysroots/environmentENV_PATH$LOCAL_PATH/sysroots/environmentecho export _SDK_PATH$SDK_PATH_ | sudo tee -a $ENV_PATH
echo export PATH$_SDK_PATH/extra-tools/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin:$PATH | sudo tee -a $ENV_PATH
echo export CCaarch64-linux-gnu-gcc | sudo tee -a $ENV_PATH
echo export CXXaarch64-linux-gnu-g | sudo tee -a $ENV_PATH
echo export ARaarch64-linux-gnu-ar | sudo tee -a $ENV_PATH
echo export OBJCOPYaarch64-linux-gnu-objcopy | sudo tee -a $ENV_PATH
echo export NMaarch64-linux-gnu-nm | sudo tee -a $ENV_PATH
echo export STRIPaarch64-linux-gnu-strip | sudo tee -a $ENV_PATH
echo if [ -d $_SDK_PATH/debian/sysroots/x86_64-linux/environment-setup.d ]; thenfor envfile in $_SDK_PATH/debian/sysroots/x86_64-linux/environment-setup.d/*.sh; do. $envfiledone
fi | sudo tee -a $ENV_PATHsudo touch $TARGET_x86_DIR/environment-setup.d/qt5.shQT5_PATH$TARGET_x86_DIR/environment-setup.d/qt5.sh
echo export SDK_QMAKE_CC$CC | sudo tee -a $QT5_PATH
echo export SDK_QMAKE_CXX$CXX | sudo tee -a $QT5_PATH
echo export SDK_QMAKE_LINK$CXX | sudo tee -a $QT5_PATH
echo export SDK_QMAKE_AR$AR | sudo tee -a $QT5_PATH
echo export SDK_QMAKE_STRIP$STRIP | sudo tee -a $QT5_PATH
echo export SDK_QMAKE_OBJCOPY$OBJCOPY | sudo tee -a $QT5_PATHsource ./sysroots/environment# Establish library soft link
sudo rm ./sysroots/armv8a-linux/lib/aarch64-linux-gnu/libpthread.a
sudo rm ./sysroots/armv8a-linux/lib/aarch64-linux-gnu/libdl.a
cd ./sysroots/armv8a-linux/usr/lib/aarch64-linux-gnu/
sudo ln -sf ../../lib/aarch64-linux-gnu/libz.so.1.2.11 libz.so
sudo ln -sf libsystemd.so.0 libsystemd.so
sudo ln -sf ../../lib/aarch64-linux-gnu/liblzma.so.5.2.5 liblzma.so
sudo ln -sf libgcrypt.so.20 libgcrypt.so
sudo ln -sf libgpg-error.so.0 libgpg-error.so
sudo ln -sf libstdc.so.6 libstdc.so
sudo ln -sf libbsd.so.0 libbsd.so
sudo ln -sf libmd.so.0 libmd.so
sudo rm libdl.so
sudo ln -sf libdl.so.2 libdl.so
sudo rm libm.so
sudo ln -sf libm.so.6 libm.so
sudo ln -sf libxcb-util.so.1 libxcb-util.so
sudo rm libpcre.so
sudo ln -sf libpcre.so.3 libpcre.so
sudo rm libpthread.a
sudo rm libpthread.so
sudo ln -sf libpthread.so.0 libpthread.so
cd -echo ----------copy binary success-----------# Compile Qt
#cd ./packages/arm64/qt5
#source qt-build.sh#sudo mkdir -p $(pwd)/binary/usr/lib/qt-5.15.8
#QT5_LIB$(pwd)/binary/usr/lib/qt-5.15.8#sudo cp $TARGET_x86_DIR/lib $QT5_LIB -r
#sudo cp $TARGET_x86_DIR/plugins $QT5_LIB -r
#sudo mkdir -p $TARGET_ARM_DIR/usr/lib/qt-5.15.8
#sudo cp $TARGET_x86_DIR/lib $TARGET_ARM_DIR/usr/lib/qt-5.15.8 -r
#sudo cp $TARGET_x86_DIR/include $TARGET_ARM_DIR/usr/lib/qt-5.15.8 -r
#sudo cp $TARGET_x86_DIR/bin $TARGET_ARM_DIR/usr/lib/qt-5.15.8 -r
#sudo cp $TARGET_x86_DIR/mkspecs $TARGET_ARM_DIR/usr/lib/qt-5.15.8 -r
##sudo cp $TARGET_x86_DIR/plugins $TARGET_ARM_DIR/usr/lib/qt-5.15.8 -r# Set Qt environment variables
#QT5SH_PATH$LOCAL_PATH/binary/etc/profile.d/qt5.15.8.sh#sudo touch $QT5SH_PATH
#echo export QT_ROOT/usr/lib/qt-5.15.8 | sudo tee -a $QT5SH_PATH
#echo export QT_QPA_FONTDIR/usr/share/fonts | sudo tee -a $QT5SH_PATH
#echo export QT_QPA_PLATFORM_PLUGIN_PATH$QT_ROOT/plugins | sudo tee -a $QT5SH_PATH
#echo export QT_PLUGIN_PATH$QT_ROOT/plugins | sudo tee -a $QT5SH_PATH
#echo export LD_LIBRARY_PATH$QT_ROOT/lib:$QT_ROOT/plugins/platforms | sudo tee -a $QT5SH_PATH
流程
cp 跟文件系统的库制作交叉编译环境制作交叉编译配置文件配置编译qt并cp到跟文件系统
mk-image.sh
源码
#!/bin/bash -eTARGET_ROOTFS_DIR./binary
ROOTFSIMAGElinaro-rootfs.img
EXTRA_SIZE_MB300
IMAGE_SIZE_MB$(( $(sudo du -sh -m ${TARGET_ROOTFS_DIR} | cut -f1) ${EXTRA_SIZE_MB} ))echo Making rootfs!if [ -e ${ROOTFSIMAGE} ]; thenrm ${ROOTFSIMAGE}
fifor script in ./post-build.sh ../device/rockchip/common/post-build.sh; do[ -x $script ] || continuesudo $script $(realpath $TARGET_ROOTFS_DIR)
donedd if/dev/zero of${ROOTFSIMAGE} bs1M count0 seek${IMAGE_SIZE_MB}sudo mkfs.ext4 -d ${TARGET_ROOTFS_DIR} ${ROOTFSIMAGE}echo Rootfs Image: ${ROOTFSIMAGE}流程
运行2个 post-build.sh制作打包跟文件系统
post-build.sh
后续的配置信息
文件系统的挂载信息修改添加执行 device/rockchip/common/post-hooks 下的sh启动一些服务 02-usb.sh05-udev.sh06-async-commit.sh10-os-release.sh20-info.sh30-fstab.sh40-busybox-reboot.sh50-locale.sh60-dirs.sh90-overlay.sh95-partitions.sh99-owner.sh
大致流程
编译安装必要库drmnpu等 进入文件系统然后gtp命令安装 然后cp ln等qt编译安装文件系统制作
系统制作步骤 解压 debian原始根文件系统 sudo tar -xpf linaro-bullseye-alip-20240903-1.tar.gz 获取文件系统大小然后300 sudo du -sh -m ./binary | cut -f1创建文件 dd if/dev/zero oflinaro-rootfsxw.img bs1M count0 seek2385写入内容并格式化ext4 sudo mkfs.ext4 -d ./binary linaro-rootfsxw.img