编译 Linux 固件 编译 Ubuntu 固件 æœ¬ç« ä»‹ç» Ubuntu 固件的编译æµç¨‹ï¼ŒæŽ¨è在 Ubuntu 20.04 ç³»ç»ŸçŽ¯å¢ƒä¸‹è¿›è¡Œå¼€å‘ ï¼Œè‹¥ä½¿ç”¨å…¶å®ƒç³»ç»Ÿç‰ˆæœ¬ï¼Œå¯èƒ½éœ€è¦å¯¹ç¼–译环境åšç›¸åº”调整。 本教程的编译部分适用于 v0.1.0a 以上 SDK 版本 $ readlink -f .repo/manifest.xml /home/daijh/p/rk3576/.repo/manifests/rk3576/rk3576_linux_release_20240606_v0.1.0a.xml 准备工作 æ建编译环境 sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \ expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \ qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib \ unzip \ device-tree-compiler ncurses-dev \ 编译 SDK 编译å‰é…ç½® 在 "device/rockchip/rk3576/" 目录下,有ä¸åŒæ¿åž‹çš„é…置文件,选择é…置文 件: ./build.sh firefly_rk3576_roc-rk3576-pc_ubuntu_defconfig 编译 全自动编译 ä¸‹è½½æ ¹æ–‡ä»¶ç³»ç»Ÿï¼šRootfs,放到 SDK 路径下 7z x Ubuntu[xx.xx]-xxxx_RK3576_vx.x.xx_xxxxxxxx.7z mkdir prebuilt_rootfs/ mv Ubuntu[xx.xx]-xxxx_RK3576_vx.x.xx_xxxxxxxx.img prebuilt_rootfs/rk3576_ubuntu_rootfs.img 开始编译 ./build.sh 生æˆçš„完整固件会ä¿å˜åˆ° "output/update/" 目录。 部分编译 编译 u-boot ./build.sh uboot 编译 kernel ./build.sh extboot 编译 recovery ./build.sh recovery ä¸‹è½½æ ¹æ–‡ä»¶ç³»ç»Ÿï¼šRootfs,放到 SDK 路径下 7z x Ubuntu[xx.xx]-xxxx_RK3576_vx.x.xx_xxxxxxxx.7z mkdir prebuilt_rootfs/ mv Ubuntu[xx.xx]-xxxx_RK3576_vx.x.xx_xxxxxxxx.img prebuilt_rootfs/rk3576_ubuntu_rootfs.img 打包固件,生æˆçš„完整固件会ä¿å˜åˆ° output/update/ 目录。 ./build.sh updateimg 编译 Yocto 固件 编译 é€‰æ‹©æ˜ åƒ Yocto 项目æ供了一些å¯ç”¨äºŽä¸ layer çš„æ˜ åƒã€‚下表列出目å‰æ”¯æŒæž„å»ºçš„æ˜ åƒ å’Œç›¸å…³é…方。 ç¼–è¯‘æ˜ åƒæ–‡ä»¶ 使用 bitbake 命令构建的过程需è¦ä¿è¯ç½‘络连接æ£å¸¸ï¼Œå¦‚果是ä¸å›½å†…陆客户需 è¦ä¿è¯èƒ½ ping 通外网 进入目录 <path/to/yocto/poky> ,按顺åºæ‰§è¡Œå¦‚下命令 # Install the required environment packages # sudo apt install zstd source oe-init-build-env # æ·»åŠ layer(åªéœ€è¦æ‰§è¡Œä¸€æ¬¡ï¼‰ bitbake-layers add-layer ../../meta-openembedded/meta-oe bitbake-layers add-layer ../../meta-openembedded/meta-python bitbake-layers add-layer ../../meta-openembedded/meta-networking bitbake-layers add-layer ../../meta-openembedded/meta-multimedia bitbake-layers add-layer ../../meta-openembedded/meta-gnome bitbake-layers add-layer ../../meta-openembedded/meta-xfce bitbake-layers add-layer ../../meta-clang bitbake-layers add-layer ../../meta-browser/meta-chromium bitbake-layers add-layer ../../meta-rockchip 选择其ä¸ä¹‹ä¸€å‘½ä»¤æ¥ç¼–译完整 core-image recipes 。以下是基于 x11 çš„ core-image 。 MACHINE=roc-rk3576-pc bitbake core-image-minimal MACHINE=roc-rk3576-pc bitbake core-image-minimal-xfce MACHINE=roc-rk3576-pc bitbake core-image-x11 MACHINE=roc-rk3576-pc bitbake core-image-sato 以下是基于 wayland çš„ core-image 。需è¦åœ¨ "/path/to/yocto/meta- rockchip/conf/machine/include/display.conf" 修改 DISPLAY_PLATFORM 为 wayland 。修改如下: DISPLAY_PLATFORM ?= "wayland" # DISPLAY_PLATFORM ?= "x11" 完æˆä¸Šè¿°ä¿®æ”¹åŽï¼Œæ‰§è¡Œå‘½ä»¤ç¼–译 core-image-weston MACHINE=roc-rk3576-pc bitbake core-image-weston 注æ„:如果在已ç»è¿›è¡Œäº†å®Œæ•´ç¼–译一次 core-image 的基础上,需è¦æ›´æ¢ç¼–译的 core-image recipes 。需è¦å°†å½“å‰ç¼–译过 core-image 的清ç†æŽ‰ï¼Œå†å¼€å§‹ç¼–译 æ–°çš„ core-image 。 例如:当å‰ç¼–译的是 core-image-minimal 。需è¦æ›´æ¢æˆ core-image-sato 。 MACHINE=roc-rk3576-pc bitbake core-image-minimal -c clean MACHINE=roc-rk3576-pc bitbake core-image-sato 如果想å•ç‹¬ç¼–译部分 recipes å¯ä»¥å‚考以下内容: # kernel MACHINE=roc-rk3576-pc bitbake linux-rockchip # u-boot MACHINE=roc-rk3576-pc bitbake u-boot-rockchip # rkmpp MACHINE=roc-rk3576-pc bitbake rockchip-mpp # rockchip-librga MACHINE=roc-rk3576-pc bitbake rockchip-librga # å‚看更多编译对象 MACHINE=roc-rk3576-pc bitbake -s 调整编译速度 修改文件"/path/to/yocto/meta-rockchip/conf/machine/firefly- rk3576.conf" ä¸çš„ BB_NUMBER_THREADS å’Œ PARALLEL_MAKE å˜é‡é…置。若线程 æ•°é‡è®¾ç½®è¿‡å¤§å¯èƒ½ä¼šå¯¼è‡´æœºå™¨å†…å˜ä¸è¶³ï¼Œå¯¼è‡´ç¼–è¯‘å¤±è´¥ã€‚è¯·æ ¹æ®ç¼–译机器的é…ç½® æ¥è®¾ç½®ç¼–译速度。 BB_NUMBER_THREADS = "4" PARALLEL_MAKE = "-j 4" BB_NUMBER_THREADS: The maximum number of threads BitBake simultaneously executes. BB_NUMBER_PARSE_THREADS: The number of threads BitBake uses during parsing. PARALLEL_MAKE: Extra options passed to the make command during the do_compile task in order to specify parallel compilation on the local build host. PARALLEL_MAKEINST: Extra options passed to the make command during the do_install task in order to specify parallel installation on the local build host. 更多 bitbake 选项 ä»Žæ ¹æœ¬ä¸Šè¯´ï¼ŒBitBake 是一个通用任务执行引擎,它å…许 shell å’Œ Python ä»» 务高效并行è¿è¡Œï¼ŒåŒæ—¶åœ¨å¤æ‚的任务间ä¾èµ–约æŸä¸‹å·¥ä½œã€‚ BitBake 的主è¦ç”¨æˆ· 之一,OpenEmbeddedï¼Œåˆ©ç”¨è¿™ä¸ªæ ¸å¿ƒå¹¶ä½¿ç”¨é¢å‘ä»»åŠ¡çš„æ–¹æ³•æž„å»ºåµŒå…¥å¼ Linux è½¯ä»¶å †æ ˆã€‚æ›´å¤šè¯¦ç»†ä½¿ç”¨æ–¹æ³•è¯·æŸ¥çœ‹ 《bitbake-user-manual》 。 MACHINE=roc-rk3576-pc bitbake <target> <paramater> # e.g MACHINE=roc-rk3576-pc bitbake u-boot-rockchip -c clean MACHINE=roc-rk3576-pc bitbake u-boot-rockchip 分区固件烧写 编译生æˆçš„固件ä½äºŽç›®å½• "<path/to/yocto>/build/tmp/deploy/images/<board>/" $ sudo upgrade_tool di -boot boot.img $ sudo upgrade_tool di -uboot uboot.img $ sudo upgrade_tool di -misc misc.img $ sudo upgrade_tool di -recovery recovery.img 分区烧写适用于调试阶段,固件验è¯è¯·ä½¿ç”¨ä¸‹æ–‡çš„统一固件烧写 rootfs ä¸æ”¯æŒå•ç‹¬çƒ§å†™ï¼Œéœ€è¦æ‰“包完整固件å†çƒ§å†™ 统一固件烧写 编译生æˆçš„固件ä½äºŽç›®å½• "<path/to/yocto>/build/tmp/deploy/images/<board>/",待下载的文件为.wic 与update.img,进入loader模å¼åŽæ‰§è¡Œå¦‚下命令: $ sudo upgrade_tool wl 0 <IMAGE NAME>.wic $ sudo upgrade_tool uf update.img 固件默认登录账å·ä¸ºï¼šroot,密ç 为:firefly 。固件å«æœ‰æ™®é€šç”¨æˆ·è´¦å·å称为 :firefly ,密ç 为:firefly 。 注æ„:如果客户在 Windows PC 上开å‘,使用 RKdevtool 直接烧录 update.img å³å¯ï¼Œ ä¸éœ€è¦çƒ§å½• <IMAGE NAME>.wic 。但是è¦æ³¨æ„一点是 update.img æ˜¯ä¸€ä¸ªé“¾æŽ¥æ–‡ä»¶ï¼Œå®žé™…å¾—é€‰æ‹©é“¾æŽ¥æ–‡ä»¶æ‰€æŒ‡å‘ çš„å®žé™…æ–‡ä»¶ã€‚ 相关概述 Yocto Project æ˜¯ä¸€ä¸ªä¸“æ³¨äºŽåµŒå…¥å¼ Linux® æ“作系统开å‘çš„å¼€æºå作项目,它 æä¾›çµæ´»çš„工具集和开å‘环境,å…许全çƒçš„嵌入å¼è®¾å¤‡å¼€å‘人员通过共享技术, è½¯ä»¶å †æ ˆï¼Œé…置和用于创建这些定制的Linuxæ˜ åƒçš„最佳实践进行å作。有关 Yocto 项目的更多信æ¯ï¼Œè¯·å‚阅 Yocto Project 官网: www.yoctoproject.org/ 。 Yocto Project 官网上有 Yocto Project Reference Manual å’Œ Yocto Project Overview ç‰ç›¸å…³æ–‡æ¡£è¯¦ç»†æ述了如何构建系统。 Yocto Project Release layer 介ç»