# 获å–æºä»£ç ```eval_rst .. hint:: 请å‘邮件至toybrick@rock-chips.comç´¢å–。 ``` æºä»£ç ä¸æ²¡æœ‰rootfs.img,toybrick已编译好并预置多个deb包的rootfs.img,请通过å‘布的[固件](https://console.box.lenovo.com/l/O0onni)内获å–。 ### æºç æ‰“è¡¥ä¸ - `ROOT_DIR`:Linuxæºä»£ç SDK的工作目录;文档ä¸æ‰€ç¤ºçš„目录为`/home/toybrick/work/edge`。 - 需è¦åœ¨${ROOT_DIR}/rootfs/debian/initrd/ å’Œ ${ROOT_DIR}/rkbin/目录打上补ä¸æ‰å¯ä»¥æ£å¸¸ç¼–译固件,补ä¸åŒ…在这里${ROOT_DIR}/patches/下的åŒå目录。 - 在${ROOT_DIR}/rootfs/debian/initrd/目录下打补ä¸å¯å‚考以下æ¥éª¤ï¼š - 获å–${ROOT_DIR}/patches/initrd/commit_base.txtçš„commit ID: ``` cat ../../../patches/initrd/commit_base.txt ``` - å¤åˆ¶commit那一行第二列的å—符串,当å‰ç‰ˆæœ¬å‡è®¾æ˜¯0dfde98ba6aa1fa87a0efb0315b534b0742014d1,那么é‡ç½®è¿™ä¸ªåŸºçº¿ç‰ˆæœ¬ï¼š ``` git reset --hard 0dfde98ba6aa1fa87a0efb0315b534b0742014d1 ``` - 打上补ä¸ï¼š ``` git am ../../../patches/initrd/*.patch ``` - 在${ROOT_DIR}/rkbin/目录下åŒç†åšç±»ä¼¼æ¥éª¤(cf04d2f1699570344d189b0e6ff2eeb3f532f16c这个Commit idæ ¹æ®å…·ä½“情况修改): ``` cat ../patches/rkbin/commit_base.txt git reset --hard cf04d2f1699570344d189b0e6ff2eeb3f532f16c git am ../patches/rkbin/*.patch ``` ## rootfs.img说明 debian11æ ¹æ–‡ä»¶ç³»ç»Ÿæ˜¯ç”±ä¸€ç³»åˆ—çš„deb包组æˆã€‚通过脚本从debian官方网站或镜åƒç½‘站下载这些软件包å³å¯æž„建debian11æ ¹æ–‡ä»¶ç³»ç»Ÿã€‚ debian的国内官方网站:http://ftp.cn.debian.org/debian 国内常用的ã€é€Ÿåº¦æ¯”较快的镜åƒç½‘站:http://mirros.163.com/debian 获å–æºç 包方å¼ï¼šä¿®æ”¹/etc/apt/source.list å¢žåŠ deb-src,指定Ubuntuå‘行版æºä»£ç 地å€ã€‚(详细信æ¯å‚考debian论å›çš„说明或百度æœç´¢ä¸‹è½½debian包æºç ) ```eval_rst .. caution:: ä¸æŽ¨è自主é‡æ–°æž„建rootfs.img,建议在toybrickå‘布的rootfs.img上进行è£å‰ªå³å¯ã€‚ ``` 详细è§åŽç» [制作客制化Debian11固件](#set_debian11) ç« èŠ‚ # 编译æºä»£ç ## æ建系统环境 ### 编译主机系统è¦æ±‚ - Ubuntu18.04åŠä»¥ä¸Šå’ŒDebian11版本,内å˜æŽ¨è16GBåŠä»¥ä¸Šã€‚ - 系统的用户åä¸èƒ½æœ‰**ä¸æ–‡å—符**。 - åªèƒ½ä½¿ç”¨æ™®é€šç”¨æˆ·æ建开å‘环境,**ä¸å…许用root用户登录**,如需è¦rootæƒé™è¯·ä½¿ç”¨`sudo`命令。 ### 安装编译ä¾èµ–基础软件 Debain系统安装ä¾èµ– ```shell sudo apt -y install python lz4 coreutils qemu qemu-user-static python3 \ devicetree-compiler clang bison flex lld libssl-dev bc genext2fs git make ``` Ubuntu系统安装ä¾èµ– ```shell sudo apt -y install python lz4 coreutils qemu qemu-user-static python3 \ device-tree-compiler clang bison flex lld libssl-dev bc genext2fs git make ``` ## 编译é…ç½® 请在获å–到的æºä»£ç çš„æ ¹ç›®å½•ä¸‹æ‰§è¡Œä»¥ä¸‹æ“作。`edge` å¯æ‰§è¡Œæ–‡ä»¶é¢„置在æºä»£ç çš„æ ¹ç›®å½•ä¸‹ã€‚ 为了方便文档æ述,约定如下å˜é‡å®šä¹‰ï¼š - `BOARD`:开å‘æ¿/产å“åž‹å·ï¼›å¦‚`TB-RK3576D`å¼€å‘æ¿çš„åž‹å·æ˜¯`TB-RK3576D`。 - `DTB`ï¼šå†…æ ¸è®¾å¤‡æ ‘ï¼›å¦‚`TB-RK3576D`å¼€å‘æ¿çš„产å“å†…æ ¸è®¾å¤‡æ ‘æ˜¯`rk3576-toybrick-d0-linux`。 - `ROOT_DIR`:Linuxæºä»£ç SDK的工作目录;文档ä¸æ‰€ç¤ºçš„目录为`/home/toybrick/work/edge`。 - `CHIP`:开å‘æ¿çš„芯片型å·ï¼›å½“å‰Linuxæºä»£ç 支æŒçš„芯片型å·ä¸º`rk3576`或`rk3576s`。 - `OUT_DIR`:编译生æˆçš„é•œåƒè·¯å¾„`${ROOT_DIR}/out/${CHIP}/${BOARD}/images` ,如`TB-RK3576D`的路径为`/home/toybrick/work/edge/out/rk3576/TB-RK3576D/images`。 <a id='set_config'></a> ### 设置é…ç½®ä¿¡æ¯ æ‰§è¡Œå¦‚ä¸‹æ‰§è¡Œå‘½ä»¤ï¼Œè¾“å…¥äº§å“åž‹å·çš„åºå·ï¼ˆå¦‚:TB-RK3576Då¼€å‘æ¿æ‰€å¯¹åº”çš„åºå·ä¸º9)设置é…置信æ¯ï¼š ```shell ./edge set [EDGE DEBUG] Board list: > rk3588 0. RK3588-EVB4 1. TB-RK3588B0 2. RK3588-EVB7 3. TB-RK3588X0 4. RK3588s-EVB1 5. RK3588-EVB1 6. TB-RK3588SD0 > rk3399pro 7. TB-RK3399ProD > rk3576 8. TB-RK3576L1 9. TB-RK3576D0 10. RK3576-EVB1 > rk3568 11. TB-RK3568X10 12. TB-RK3568X0 13. TB-RK3568SD0 Enter the number of the board: 9 ``` ```eval_rst .. important:: æ¯æ¬¡æ›´æ–°æˆ–修改相关代ç åŽï¼Œè¯·é‡æ–°æ‰§è¡Œæ¤å‘½ä»¤ï¼Œæ›´æ–°é…置。 ``` é…置文件分别ä½äºŽ`vendor/common/config.json`以åŠ`vendor/${CHIP}/${BOARD}/config.json`,详细说明请查[阅é…置信æ¯è¯´æ˜Ž](#config_md)ç« èŠ‚ ### 查看é…ç½®ä¿¡æ¯ æ‰§è¡Œå¦‚ä¸‹å‘½ä»¤ï¼ŒæŸ¥çœ‹å½“å‰é…置信æ¯ï¼š ```shell ./edge env [EDGE DEBUG] root path: /home1/jax/rk-sd0-edge-sdk [EDGE DEBUG] out path: /home1/jax/rk-sd0-edge-sdk/out/rk3576/TB-RK3576D0/images [EDGE DEBUG] board: TB-RK3576D0 [EDGE DEBUG] chip: rk3576 [EDGE DEBUG] arch: arm64 [EDGE DEBUG] bootmode: flash [EDGE DEBUG] hyper: not set [EDGE DEBUG] > Secureboot: [EDGE DEBUG] enable: False [EDGE DEBUG] rollback: [0, 0] [EDGE DEBUG] burnkey: False [EDGE DEBUG] > Partition: [EDGE DEBUG] vnvm: ['0x00000500', '0x00000500'] [EDGE DEBUG] uboot: ['0x00000A00', '0x00000800'] [EDGE DEBUG] boot: ['0x00001200', '-'] [EDGE DEBUG] > Uboot: [EDGE DEBUG] config: rk3576-toybrick-sd0 [EDGE DEBUG] > Kernel: [EDGE DEBUG] version: 6.10 [EDGE DEBUG] config: rk3576_edge.config rk3576_toybrick.config rk3576_toybrick_sd0.config [EDGE DEBUG] dtbname: rk3576s-toybrick-d0-linux [EDGE DEBUG] size: 64 [EDGE DEBUG] docker: False [EDGE DEBUG] debug: 0xfeb50000 [EDGE DEBUG] > Rootfs: [EDGE DEBUG] osname: debian [EDGE DEBUG] version: 11 [EDGE DEBUG] type: gnome [EDGE DEBUG] apturl: http://repo.rock-chips.com [EDGE DEBUG] uuid: 614e0000-0000-4b53-8000-1d28000054a9 [EDGE DEBUG] size: auto [EDGE DEBUG] user: toybrick [EDGE DEBUG] password: toybrick [EDGE DEBUG] relver: 1.1.0 [EDGE DEBUG] key: GPG-KEY-ROCKCHIP ``` <a id='config_md'></a> ### é…置信æ¯è¯´æ˜Ž #### 公共é…ç½® 公共é…ç½®ä¿å˜åœ¨`vendor/common/config.json`,其ä¸å€¼ä¸º`not set`çš„é…置项必须在《æ¿çº§é…置》ä¸è®¾ç½®ï¼›å…¶ä»–é…置项å¯æ ¹æ®å®žé™…需è¦åœ¨ã€Šæ¿çº§é…置》ä¸ä¿®æ”¹ã€‚ ##### kernel 1. configï¼šå†…æ ¸menuconfigé…置,默认值为`rk3576_edge.config`åŠ`rk3576_tobrick.config`ï¼Œç¼–è¯‘æ—¶ä¼šåŠ è½½`rockchip_linux_defconfig`ã€`rk3576_edge.config`å’Œ`rk3576_toybrick.config`。如果有需è¦å¢žå‡å†…æ ¸é…ç½®å¯ä¿®æ”¹`kernel/linux-6.10/arch/arm64/configs/rk3576_toybrick_sd0.config`。 3. docker:默认值为`false`。false为关é—dockeré…置,True为打开dockeré…置。 #### æ¿çº§é…ç½® 公共é…ç½®ä¿å˜åœ¨`vendor/${CHIP}/${BOARD}/config.json`,其值会覆盖公共é…置的åŒåé…置项的值。 | å称 | 说明 | | ------ | ------------------------------------------------------------ | | board | å¼€å‘æ¿æˆ–产å“åž‹å·ï¼Œå…¶å€¼å¿…须和vendor/${CHIP}目录下的${BOARD}目录å一致 | | chip | 芯片型å·ï¼Œç›®å‰æ”¯æŒrk3576ã€rk3576SDç‰ç‰ | | arch | 芯片架构,目å‰æ”¯æŒçš„两颗芯片都是arm64 | | uboot | 默认为rk3576-toybrick-sd0,如果有需è¦å¢žå‡ubooté…ç½®å¯ä¿®æ”¹uboot/configs/rk3576-toybrick-sd0.config | | kernel | linuxdtb:产å“/å¼€å‘æ¿çš„å†…æ ¸è®¾å¤‡æ ‘æ–‡ä»¶å,如RK3576Då¼€å‘æ¿çš„dtbname为rk3576s-toybrick-d0-linux | #### 注æ„事项 1. 产å“目录下的`config.json`åªéœ€è¦æ·»åŠ 需è¦ä¿®æ”¹çš„å—段å³å¯ã€‚ 2. edgeè„šæœ¬é¦–å…ˆä¼šåŠ è½½`vendor/common/config.json`;然åŽåŠ è½½`vendor/${CHIP}/${BOARD}/config.json`,更新相åŒå—段的值。 3. RK3576å’ŒRK3576s芯片的é…置信æ¯é‡Œçš„kernelå集的chip值都设置为:**`rk3576`**。 ## é•œåƒç¼–译 以下æ“作请先设置好é…置信æ¯`./edge set`,请å‚考[设置é…置信æ¯](#set_config) ç« èŠ‚ã€‚ ```eval_rst .. attention:: rootfs.img未进行编译,rootfs.imgå¯åœ¨å‘布固件内下载。若è¦ç”Ÿæˆè‡ªå®šä¹‰rootfs.img请å‚考åŽé¢åˆ¶ä½œå®¢åˆ¶åŒ–Debian11å›ºä»¶ç« èŠ‚ã€‚ ``` ### 一键编译 执行如下命令编译所有镜åƒï¼ˆåŒ…括MiniLoaderAll.bin,uboot.img,kernel.img,boot.img, rootfs.img),ä¿å˜åœ¨OUT_DIR目录: ```shell ./edge build -a ``` ### 编译Ubooté•œåƒ æ‰§è¡Œå¦‚ä¸‹å‘½ä»¤ç¼–è¯‘ç”ŸæˆMiniLoaderAll.binå’Œuboot.imgé•œåƒï¼Œä¿å˜åœ¨OUT_DIR目录: ```shell ./edge build -u ``` ### 编译kernelé•œåƒ æ‰§è¡Œå¦‚ä¸‹å‘½ä»¤ç¼–è¯‘ç”Ÿæˆboot_linux.imgå’Œresource.img,ä¿å˜åœ¨OUT_DIR目录: ```shell ./edge build -k ``` ### 查看编译帮助 查看支æŒçš„编译å‚数: ```shell ./edge build -h ``` <a id='set_debian11'></a> # 制作客制化Debian11固件 当用户在TB-RK3576Då¼€å‘æ¿å®Œæˆäº§å“化软件部署åŽï¼Œå¯ä»¥æŒ‰ç…§æœ¬ç« 节自主è£å‰ªdebian11固件,生产自定义rootfs.img,用于产å“批é‡ç”Ÿäº§ã€‚ ## åˆ¶ä½œæ ¹æ–‡ä»¶ç³»ç»Ÿ 以下æ“作å‡ç›´æŽ¥åœ¨TB-RK3576Då¼€å‘版用rootæƒé™æ‰§è¡Œï¼Œå¦‚下æ¥éª¤åˆ¶ä½œæ ¹æ–‡ä»¶ç³»ç»Ÿï¼š - æ’å…¥U盘(请确ä¿è¶³å¤Ÿå®¹é‡ï¼‰ï¼ŒæŒ‚è½½U盘到/mnt目录: ```shell mount /dev/sda1 /mnt ``` - æ‰“åŒ…æ ¹æ–‡ä»¶ç³»ç»Ÿæ‰€æœ‰æ–‡ä»¶ï¼š ```shell cd / tar cvpfJ /mnt/rootfs.tar.xz * --exclude=mnt/ ``` - åˆ›å»ºç©ºæ–‡ä»¶ç³»ç»Ÿå¹¶æ ¼å¼åŒ–为EXT4文件系统: ```shell dd if=/dev/zero of=/mnt/rootfs.img bs=2K count=3M // 创建文件系统大å°ä¸º6G(2K * 3M),用户å¯ä»¥ä¿®æ”¹count的大å°è®¾ç½®æ–‡ä»¶ç³»ç»Ÿå¤§å° mkfs.ext4 /mnt/rootfs.img ``` - 挂载空文件系统到/rootfs目录: ```shell mkdir /rootfs mount /mnt/rootfs.img /rootfs ``` - 解压打包文件到/rootfs目录 ```shell tar xvpfJ /mnt/rootfs.tar.xz /rootfs ``` - å¸è½½/rootfs目录和U盘: ```shell umount /rootfs umount /mnt ``` 至æ¤å¾—到rootfs.img于U盘内。