sdk添加包,更新文件系统--针对万象奥科RK3506开发板
安装需要的软件包
在安装好的ubuntu22系统,通过补充安装如下软件包,实现对SDK编译的环境:
sudo apt-get update && sudo apt-get install git ssh make gcc libssl-dev \
liblz4-tool expect expect-dev 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 \
libgucharmap-2-90-dev bzip2 expat gpgv2 cpp-aarch64-linux-gnu libgmp-dev \
libmpc-dev bc python-is-python3 python2 file rsync bsdmainutils
检查编译环境
检查和升级主机的 python 版本:
$ python3 --version
Python 3.10.6
如果不满足python>=3.6版本的要求, 可通过如下方式升级:
PYTHON3_VER=3.6.15
echo "wget
https://www.python.org/ftp/python/${PYTHON3_VER}/Python-${PYTHON3_VER}.tgz"
echo "tar xf Python-${PYTHON3_VER}.tgz"
echo "cd Python-${PYTHON3_VER}"
echo "sudo apt-get install libsqlite3-dev"
echo "./configure --enable-optimizations"
echo "sudo make install -j8"
检查和升级主机的 make 版本:
$ make -v
GNU Make 4.2
Built for x86_64-pc-linux-gnu
make 版本需 >= 4.2
检查和主机的 lz4 版本:
$ lz4 -v
*** LZ4 command line interface 64-bits v1.9.3, by Yann Collet ***
SDK编译
第一次编译时会现在编译项目配置文件,选择对应配置文件 ./build.sh lunch
rk3506_linux6.1_sdk$ ./build.sh lunch
############### Rockchip Linux SDK ###############
Manifest: rk3506_linux6.1_release_v1.1.0_20241128.xml
Log colors: message notice warning error fatal
Log saved at /work/itrunk/rk3506/rk3506_linux6.1_sdk/output/sessions/2024-10-14_15-40-43
Pick a defconfig:
1. rockchip_rk3502_robot_defconfig
2. rockchip_rk3506_b_evb1_defconfig
3. rockchip_rk3506_g_demo_defconfig
4. rockchip_rk3506_g_evb1_amp_defconfig
5. rockchip_rk3506_g_evb1_defconfig
6. rockchip_rk3506_g_evb1_smp_defconfig
7. rockchip_rk3506_g_mini_defconfig
Which would you like? [1]: 7
使用的defconifg文件为:7. rockchip_rk3506_g_mini_defconfig
编译步骤如下:
第一次编译需要执行
./build.sh
所有编译固件复制⽣成到output/firmware⽬录下。其链接在sdk的rockdev中。
修改文件系统配置
当完整编译过一次SDK后,进入到buildroot目录,执行make menuconfig可以使用图形化界面修改buildroot配置。在这种模式下,会使用output/rockchip_rk3506/.config作为默认配置文件。
cd SDK目录/buildroot
# 使用图形化界面配置buildroot选项
make menuconfig
修改完成后,可直接在buildroot目录使用make命令进行编译:
make
如果编译出错之后,并且提示一些问题,可以进行以下尝试:
1、进入到buildroot/package/python-contourpy/python-contourpy.mk
在文件中添加下面这行:
PYTHON_CONTOURPY_CONF_OPTS += -Dcpp_args=“-Wno-error=array-bounds”
然后清理和重新构建:make python-contourpy-dirclean
make -j$(nproc)
编译完成后,会在rk3506_linux6.1_sdk/buildroot/output/rockchip_rk3506/images下生成文件系统镜像rootfs.ubi和rootfs.ext4。在rk3506_linux6.1_sdk/rockdev下的链接文件rootfs.img文件也会同步更新。
可以单独烧写rootfs.img来更新文件系统。
更新文件系统
下载瑞芯微的驱动,双击运行DriverInstall.exe进行安装:
链接: 软件开发资料
找到刷机软件与驱动:
usb驱动安装
解压上面提供的DriverAssitant_v5.13.zip压缩包,进入DriverAssitant_v5.13目录,双击运行DriverInstall.exe进行安装:

解压烧写工具
解压上面提供的RKDevTool.zip,进入RKDevTool_Release目录后双击运行RKDevTools.exe:

连接开发板
使用type-c数据线,将电脑和开发板J2 USB Device进行连接。

进入Loader模式
先按住LOADER按键不松开,然后单击(按下后松开)RESET按键,待电脑上位机检测到设备,显示"发现一个LOADER设备"后,再松开LOADER按键。

选择固件
固件有两种格式,一种是将所有固件打包成为一个update.img文件,另外一种是一个个单独的文件,如uboot.img,boot.img,rootfs.img等文件。
update.img烧写

单独烧写
单独烧写某个镜像,如单独烧写内核所在的boot.img,如下:
点执行按钮开始烧录
ps:单独烧写某个img固件时,需要导入parameter.txt分区文件,否则无法分配烧写地址。
更新update.img
进入SDK目录查看tools/linux/Linux_Pack_Firmware/rockdev/rk3506-package-file文件,其中未被#注释的固件都会在打包过程中被打包进update.img。
# NAME Relative path
#
#HWDEF HWDEF
package-file package-file
bootloader Image/MiniLoaderAll.bin
parameter Image/parameter.txt
uboot Image/uboot.img
boot Image/boot.img
rootfs Image/rootfs.img
recovery Image/recovery.img
oem Image/oem.img
userdata Image/userdata.img
misc Image/misc.img
# 要写入backup分区的文件就是自身(update.img)
# SELF 是关键字,表示升级文件(update.img)自身
# 在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录
# 在解包升级文件时,不解包SELF文件的内容。
backup RESERVED
#update-script update-script
#recover-script recover-script
一般此文件无须修改,将我们自己的制作的固件放入rockdev,固件名与package-file文件一样:
vanxoak@bab121111f64:/work/bsp/rk3506/rk3506-linux6.1-sdk_release$ ls rockdev/
boot.img misc.img parameter.txt uboot.img
MiniLoaderAll.bin oem.img recovery.img rootfs.img userdata.img
扩展分区表
若更新固件提示,提示以下问题,则需修改分区。
修改分区是通过修改 parameter.txt 分区表文件实现的,paramter.txt 中的 uboot,misc,boot,recovery,oem,rootfs分区应该保留,重新分区时不要删除。分区参数的格式是 size@offset(name),size 和 offset 的单位是块,对 EMMC 就是”扇区”,扇区大小是 512byte。EMMC 最前面的 8MiB 空间是保留区,分区时必须从 8MiB之后的空间开始。 比如第一个分区是 u-boot 分区:
0x00002000@0x00004000(uboot) 0x00002000@0x00004000(uboot)
size=0x2000*0x200/0x100000=4MiB
offset=0x4000*0x200/0x100000=8MiB
分区名"uboot"
ps:各分区起止位置不要重叠,也不要留空隙,留空隙浪费空间。
扩展rootfs分区大小到7GB
目前rootfs在分区表的大小如下所示:
0x00c00000@0x00038000(rootfs),0x00040000@0x00c38000(oem),-@0x00c78000(userdata:grow)
已知rootfs分区大小是0x00c00000(6GB,进制转换*512Byte),可以考虑从userdata分区中回收0x200000(1GB),oem分区大小不动,那么修改后的分区配置是:
0x00e00000@0x00038000(rootfs),0x00040000@0x00e38000(oem),-@0x00e78000(userdata:grow)
修改完后保存,重新将parameter.txt文件导入到烧写工具中,以及更新修改分区的固件进行烧写,在此需要更新parameter.txt,rootfs,oem以及userdata。
若进行了sdk配置的更改,执行命令打包整包,./build.sh updateimg,最后会在rockdev目录下生成新的update.img。
vanxoak@bab121111f64:/work/bsp/rk3506/rk3506-linux6.1-sdk_release$ ./build.sh updateimg
Making update image...
==========================================
Start packing update image
==========================================
Generating package-file for update:
# NAME PATH
package-file package-file
parameter parameter.txt
bootloader MiniLoaderAll.bin
uboot uboot.img
misc misc.img
recovery recovery.img
boot boot.img
rootfs rootfs.img
oem oem.img
userdata userdata.img
Packing /work/itrunk/rk3506/rk3506_linux6.1_sdk_release/output/firmware/update.img for update...
Android Firmware Package Tool v2.27
------ PACKAGE ------
Add file: ./package-file
package-file,Add file: ./package-file done,offset=0x800,size=0xd1,userspace=0x1
Add file: ./parameter.txt
parameter,Add file: ./parameter.txt done,offset=0x1000,size=0x1ec,userspace=0x1,flash_address=0x00000000
Add file: ./MiniLoaderAll.bin
bootloader,Add file: ./MiniLoaderAll.bin done,offset=0x1800,size=0x411c0,userspace=0x83
Add file: ./uboot.img
uboot,Add file: ./uboot.img done,offset=0x43000,size=0x400000,userspace=0x800,flash_address=0x00002000
Add file: ./misc.img
misc,Add file: ./misc.img done,offset=0x443000,size=0xc000,userspace=0x18,flash_address=0x00004000
Add file: ./recovery.img
recovery,Add file: ./recovery.img done,offset=0x44f000,size=0xde1600,userspace=0x1bc3,flash_address=0x00004a00
Add file: ./boot.img
boot,Add file: ./boot.img done,offset=0x1230800,size=0x3d2e00,userspace=0x7a6,flash_address=0x0000ba00
Add file: ./rootfs.img
rootfs,Add file: ./rootfs.img done,offset=0x1603800,size=0x2780000,userspace=0x4f00,flash_address=0x00010a00
Add file: ./oem.img
oem,Add file: ./oem.img done,offset=0x3d83800,size=0x660000,userspace=0xcc0,flash_address=0x00030a00
Add file: ./userdata.img
userdata,Add file: ./userdata.img done,offset=0x43e3800,size=0x260000,userspace=0x4c0,flash_address=0x00038a00
Add CRC...
Make firmware OK!
------ OK ------
********rkImageMaker ver 2.23********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
Run 'make edit-package-file' if you want to change the package-file.
Running 90-updateimg.sh - build_updateimg succeeded.
使用过程中可能出现的问题
网口灯不亮,显示连接不上网络
解决办法1:
可能是固件原因导致的,重新刷一下出厂固件

638

被折叠的 条评论
为什么被折叠?



