# 获取源代码 ```eval_rst .. hint:: 请发邮件至toybrick@rock-chips.com索取。 ``` 源代码中没有rootfs.img,toybrick已编译好并预置多个deb包的rootfs.img,请通过发布的[固件](https://console.box.lenovo.com/l/2n6YIQ)内获取。 ## 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-RK3588X0`开发板的型号是`TB-RK3588X0`。 - `DTB`:内核设备树;如`TB-RK3588X0`开发板的产品内核设备树是`rk3588-toybrick-x0-linux`。 - `ROOT_DIR`:Linux源代码SDK的工作目录;文档中所示的目录为`/home/toybrick/work/edge`。 - `CHIP`:开发板的芯片型号;当前Linux源代码支持的芯片型号为`rk3588`或`rk3588s`。 - `OUT_DIR`:编译生成的镜像路径`${ROOT_DIR}/out/${CHIP}/${BOARD}/images` ,如`TB-RK3588X0`的路径为`/home/toybrick/work/edge/out/rk3588/TB-RK3588X0/images`。 ### 设置配置信息 执行如下执行命令,输入产品型号的序号(如:TB-RK3588X0开发板所对应的序号为0)设置配置信息: ```shell ./edge set [EDGE DEBUG] Board list: > rk3588 0. TB-RK3568X0 Enter the number of the board: 0 ``` ```eval_rst .. important:: 每次更新或修改相关代码后,请重新执行此命令,更新配置。 ``` 配置文件分别位于`vendor/common/config.json`以及`vendor/${CHIP}/${BOARD}/config.json`,详细说明请查[阅配置信息说明](#config_md)章节 ### 查看配置信息 执行如下命令,查看当前配置信息: ```shell ./edge env [EDGE DEBUG] root path: /home/toybrick/edge/edge-toybrick [EDGE DEBUG] out path: /home/toybrick/edge/edge-toybrick/out/rk3588/TB-RK3588X0/images [EDGE DEBUG] board: TB-RK3588X0 [EDGE DEBUG] chip: rk3588 [EDGE DEBUG] arch: arm64 [EDGE DEBUG] bootmode: extlinux [EDGE DEBUG] > Partition: [EDGE DEBUG] uboot: ['0x00002000', '0x00004000'] [EDGE DEBUG] misc: ['0x00006000', '0x00002000'] [EDGE DEBUG] boot_linux:bootable: ['0x00008000', '0x00020000'] [EDGE DEBUG] recovery: ['0x00028000', '0x00040000'] [EDGE DEBUG] resource: ['0x00068000', '0x00010000'] [EDGE DEBUG] rootfs:grow: ['0x00078000', '-'] [EDGE DEBUG] > Uboot: [EDGE DEBUG] config: rk3588-toybrick [EDGE DEBUG] > Kernel: [EDGE DEBUG] version: 5.10 [EDGE DEBUG] config: rk3588_edge.config rk3588_toybrick.config [EDGE DEBUG] dtbname: rk3588-toybrick-x0-linux [EDGE DEBUG] size: 64 [EDGE DEBUG] docker: False [EDGE DEBUG] debug: 0xfeb50000 ``` ### 配置信息说明 #### 公共配置 公共配置保存在`vendor/common/config.json`,其中值为`not set`的配置项必须在《板级配置》中设置;其他配置项可根据实际需要在《板级配置》中修改。 ##### kernel 1. config:内核menuconfig配置,默认值为`rk3588_edge.config`及`rk3588_tobrick.config`,编译时会加载`rockchip_linux_defconfig`、`rk3588_edge.config`和`rk3588_toybrick.config`。如果有需要增减内核配置可修改`kernel/linux-5.10/arch/arm64/configs/rk3588_toybrick.config`。 3. docker:默认值为`false`。false为关闭docker配置,True为打开docker配置。 #### 板级配置 公共配置保存在`vendor/${CHIP}/${BOARD}/config.json`,其值会覆盖公共配置的同名配置项的值。 | 名称 | 说明 | | ------ | ------------------------------------------------------------ | | board | 开发板或产品型号,其值必须和vendor/${CHIP}目录下的${BOARD}目录名一致 | | chip | 芯片型号,目前支持rk3588、rk3588s | | arch | 芯片架构,目前支持的两颗芯片都是arm64 | | uboot | 默认为rk3588-toybrick,如果有需要增减uboot配置可修改uboot/configs/rk3588-toybrick.config | | kernel | linuxdtb:产品/开发板的内核设备树文件名,如RK3588 EVB1开发板的dtbname为rk3588-toybrick-x0-linux | | kernel | androiddtb:产品/开发板的内核设备树文件名,如RK3588 EVB1开发板的dtbname为rk3588-toybrick-x0-android | #### 注意事项 1. 产品目录下的`config.json`只需要添加需要修改的字段即可。 2. edge脚本首先会加载`vendor/common/config.json`;然后加载`vendor/${CHIP}/${BOARD}/config.json`,更新相同字段的值。 3. RK3588和RK3588s芯片的配置信息里的kernel子集的chip值都设置为:**`rk3588`**。 ## 镜像编译 以下操作请先设置好配置信息`./edge set`,请参考[设置配置信息](#set_config) 章节。 ```eval_rst .. attention:: rootfs.img未进行编译,rootfs.img可在发布固件内下载。若要生成自定义rootfs.img请参考后面制作客制化Debian11固件章节。 ``` ### 一键编译 执行如下命令编译所有镜像(包括MiniLoaderAll.bin,uboot.img,kernel.img,resource.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 ``` # 制作客制化Debian11固件 当用户在TB-RK3588x开发板完成产品化软件部署后,可以按照本章节自主裁剪debian11固件,生产自定义rootfs.img,用于产品批量生产。 ## 制作根文件系统 以下操作均直接在TB-RK3588x执行,如下步骤制作根文件系统: - 挂载rootfs分区到sysroot目录:进入紧急模式后系统自动挂载rootfs分区到sysroot,用户无需重复操作。 - 插入U盘(请确保足够容量),挂载U盘到/mnt目录: ```shell mount /dev/sda1 /mnt ``` - 打包根文件系统所有文件: ```shell cd /sysroot tar cvpfJ ../mnt/rootfs.tar.xz * cd - ``` - 创建空文件系统并格式化为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盘内。