1. 环境准备和源码获取
1.1 烧录工具下载与部署
首先到【百度网盘】上下载相关的资源:
链接:https://pan.baidu.com/s/1XJsIMHJ51LG9_V3pok2vpA?pwd=1234
提取码:1234

把烧录工具放进虚拟机任意位置(以~/rv1126b_sdk为例)。如下图所示。

然后定位到工具的位置(以~/rv1126b_sdk为例),并修改可执行权限:
cd ~/rv1126b_sdk/ chmod 777 upgrade_tool
再把工具放到虚拟机的/usr/bin目录中:
sudo mv upgrade_tool /usr/bin

最后,需要重启终端。工具即可生效。(注:此工具仅需要在虚拟机环境中部署一次,后续使用过程中均无须重复此步骤)
1.2 开发环境准备
通过阅读《入门指南/开发环境准备/Easy-Eai编译环境准备与更新》,并按照其相关的操作,进行编译环境的部署。
在PC端Ubuntu系统中执行run脚本,进入EASY-EAI编译环境,具体如下所示。
cd ~/develop_environment ./run.sh

1.3 源码获取
通过阅读《嵌入式底层开发/ubuntu系统SDK/编译说明》,并按照其相关的操作,进行内核源码的获取以及进行初次编译。
1.4 创建内核开发目录
完成SDK初次编译以后,执行下方命令,拷贝一份kernel仓库
cp kernel -r kernel_dev

进到kernel_dev目录,然后创建一个分支,用于管理用户的自定义代码
cd kernel_dev/ git checkout -b dev

2. 内核使用说明
2.1 编译配置说明
回到sdk根目录,修改板卡编译配置文件:
cd /opt/rv1126b_sdk/ubuntu vim configs/easy-eai-nano-tb-cfg.sh

内核驱动配置文件在此目下:/opt/rv1126b_sdk/ubuntu/kernel_dev/arch/arm64/configs/
设备树文件在此目录下:/opt/rv1126b_sdk/ubuntu/kernel_dev/arch/arm64/boot/dts/rockchip/
2.2 内核编译
在sdk根目(/opt/rv1126b_sdk/ubuntu/)录,执行下列命令,把需要编译内核的目录,从“kernel”切换成“kernel_dev”
export KERNEL_DEVELOP=kernel_dev
* 此环境变量仅在【当前环境】的【当前终端窗口】生效,若重新打开一个终端窗口,则又会默认去编译“kernel”目录。
* 也可以把这条命令添加到.config文件里,使其一直生效。但在不需要它时,记得要对其进行注释。
再次执行build kernel命令
./build.sh kernel

先按下【回车键】确认编译的是内核源码。一旦需要编译“非kernel目录”的内核源码,则会出现如上提示:需要编译的内核目录是否/opt/xxx/xxx/kernel_dev?按下【回车键】再次确认后,执行编译动作。
编译完成如下所示:

* 注意:在编译【到内核】时,会有一步检查磁盘文件时间戳的操作,如果此时/mnt已经断开,则会因为nfs无限超时一直卡着不动。解决方法是:先用Ctrl+C退出编译,然后再用sudo umount -f /mnt去卸载这个目录,最后再重新编译。
2.3 编译wifi驱动
一旦内核【驱动配置】或者【设备树配置】修改过多,则会出现内核驱动符号表变更的情况,如果需要在rootfs上加载的wifi驱动符号表未变更。就会因为符号冲突而导致wifi驱动失败。解决方法是:在编译完内核源码以后,再一次编译wifi驱动。
在ubuntu目录,执行下方命令,实行wifi驱动的编译:
./hooks/hook-none-install-wifibt-db37.sh
注:此命令依赖rootfs,因此在执行它之前,必须要执行过./build.sh all或者./build.sh rootfs

编译完成会出现如下输出:

2.4 编译结果说明
编译完毕后,会在output目录中更新以下3个文件:

boot.img:内核镜像文件(rk的uboot镜像叫uboot.img)。
db37-ko.tar.gz:wifi蓝牙驱动及相关配置(wifi驱动编译比较特殊,它需要单独生成)。
lib_modules.tar.gz:需要在rootfs阶段加载的驱动(比如那些CONFIG配置成"=m"的驱动)。
*若修改dts或驱动配置的内容比较多,驱动符号表变更,则需要把lib_modules.tar.gz和db37-ko.tar.gz解压到rootfs中。
3. 更新内核
kernel编译完成后,通过组合键【Ctrl+Shift+T】打开一个新的终端窗口,如下所示:

然后定位到刚刚内核编译的输出目录中:
cd ~/rv1126b_sdk/ubuntu/output

再打开第三个终端窗口,通过adb shell进入到【开发板】后台(adb使用可参考《入门指南/开发板调试方式介绍/adb调试》一文)。

3.1 更新db37-ko.tar.gz
回到【第二个窗口】,采用adb命令,把db37-ko.tar.gz推送到板卡上:
adb push db37-ko.tar.gz /userdata

去到【第三个窗口】,解压db37-ko.tar.gz
tar -xvf /userdata/db37-ko.tar.gz -C / && sync

3.2 更新lib_modules.tar.gz
回到【第二个窗口】,采用adb命令,把lib_modules.tar.gz推送到板卡上:
adb push lib_modules.tar.gz /userdata

去到【第三个窗口】,把lib_modules.tar.gz解压到/usr,命令如下:
cd /userdata tar -xvf lib_modules.tar.gz -C /usr && sync

3.3 更新boot.img
在【开发板上(第三个窗口)】执行【重启到loader模式】命令:
reboot loader

* 如果这种方式进入loader模式失败,还可以通过硬件按键进入(参考《固件烧录与更新》==2.1-手动进入 Loader模式==);
再回到【第二个窗口】,执行下方命令,把kernel.img更新到开发板上
sudo upgrade_tool di -boot boot.img

出现Download image ok.则说明内核已经成功烧录。此时用下方命令,或者【RST按键】重启设备即可。
sudo upgrade_tool rd
若出现下方报错,则有可能是板卡进入了MASKROM模式,需要用网盘固件把MiniLoaderall.bin烧录一遍。

除了上述方法可以更新内核镜像以外,还可以通过【固件烧录工具】去更新boot.img,具体操作就是:把编译生成出来的boot.img拷贝出来,拿去替换掉【固件】中的boot.img,最后采用烧录工具把boot.img烧录进开发板。
4. 修改内核配置
在ubuntu目录执行过./build.sh all或者./build.sh kernel以后。在对应的内核目录(kernel或kernel_dev)中就会出现.config文件。

通过下方命令,把平台环境变量指定为arm64:
export ARCH=arm64
* 打开新的终端或者重新进入编译环境,此环境变量会丢失,需特别注意。
再执行make menuconfig打开内核配置菜单:
make menuconfig

* 此处的menuconfig仅用于查找内核配置,若不熟悉内核编译相关操作,不建议直接使用menuconfig。
按下键盘中【/】按键,就会出现搜索菜单,并输入想要查找的驱动配置(以CH343为例):

通过按下【回车键】,选择,就会出现以下菜单:

【Symbol】就是当前所需的驱动:USB_SERIAL_CH343,【Depends on】就是这个USB_SERIAL_CH343所依赖的驱动:USB_SUPPORT、USB、USB_SERIAL。
给它们加上“CONFIG_”前缀,然后 添加到rv1126b_eai.config中即可,如下所示:

===>>> 至此,已经说明了完整的内核开发流程。若没有其它需要,下文则可不用继续浏览。
5. ====补充描述====
5.1 关于menuconfig
如果要直接使用menuconfig进行内核配置,则不允许使用ubuntu目录下的./build.sh kernel去编译内核。而是直接进入到内核源码目录,去手动编译。操作如下:
cd kernel_dev #进入内核源码目录 export ARCH=arm64 #把平台定成arm64,打开新的终端或者重新进入编译环境,此环境变量会丢失,需特别注意 make rockchip_linux_defconfig rv1126b.config rv1126b_eai.config #用这堆配置文件,生成.config make savedefconfig #把.config备份为defconfig cp defconfig mydefconfig #把defconfig备份好,以防弄丢
此时,就可以通过make menuconfig去修改.config了。
make menuconfig
最后,就是手动编译内核的命令:
make rv1126b-nano.img -j8 #以rv1126b-nano.dts为根设备树去编译内核驱动 # 编译那些需要在rootfs上加载的驱动,并打包成lib_modules.tar.gz make modules -j8 make modules_install INSTALL_MOD_PATH=/tmp cd /tmp/ tar czvf /tmp/lib_modules.tar.gz lib cd - # 把lib_modules.tar.gz拷回来--当然,不拷也行 mv /tmp/lib_modules.tar.gz ./ # 最后,把带有emmc分区修复功能的ramdisk打包进boot.img内 ./mk-fitimage.sh boot.img boot4recovery.its arch/$ARCH/boot/Image $DTB_PATH resource.img rootfs.cpio.gz
手动执行完以上操作后,则参考本文的==2.3编译wifi驱动==去更新:db37-ko.tar.gz
在调试完所有功能以后,有【归档发布】的需求,可以执行make savedefconfig把.config变成defconfig,用于与mydefconfig对比。手动把差异项补充到rv1126b_eai.config内。
-
人工智能
+关注
关注
1821文章
50523浏览量
267777 -
开发板
+关注
关注
26文章
6513浏览量
121368 -
瑞芯微
+关注
关注
27文章
906浏览量
54738 -
EASY-EAI灵眸科技
+关注
关注
4文章
140浏览量
3753 -
RV1126B
+关注
关注
0文章
134浏览量
283
发布评论请先 登录
瑞芯微(EASY EAI)RV1126B 音频输入
瑞芯微(EASY EAI)RV1126B PWM使用
瑞芯微(EASY EAI)RV1126B 音频输出
瑞芯微(EASY EAI)RV1126B RV1126B最小系统
【EASY EAI Nano-TB(RV1126B)开发板试用】+初识篇
【EASY EAI Nano-TB(RV1126B)开发板试用】介绍、系统安装
RV1126系列选型指南:从RV1126到RV1126B,一文看懂升级差异
【免费试用】EASY EAI Nano-TB(RV1126B)开发套件评测
替代升级实锤!实测RV1126B,CPU性能吊打RV1126
瑞芯微(EASY EAI)RV1126B 人体关键点识别
瑞芯微(EASY EAI)RV1126B rknn-toolkit-lite2使用方法
瑞芯微(EASY EAI)RV1126B yolov11训练部署教程
瑞芯微RV1126B 方案特性
瑞芯微(EASY EAI)RV1126B ubuntu系统SDK源码获取
瑞芯微(EASY EAI)RV1126B kernel
评论