板子到手几天了,记录下这几天刚开始学习使用的一些问题。
一到手就上电就直接运行了内置的buidlroot系统,但是buildroot可玩性太低,啥都要自己折腾,换了官方的ubuntu镜像,emm...怎么说呢,毕竟还是a7的芯片,太难为他了,ubuntu卡的不行。
还好在教程里看到有大佬分享的移植alpine的帖子,果断跟着做,定制一个自己的alphine系统,即保留了buildroot的精简,又有ubuntu的包管理器。
1:build的镜像目录,用瑞芯微的工具死活烧录不进去,提示找不到oem.img
搜了下论坛,发现官方提到过,WSL编译下载固件提示oem.img不存在 - Luckfox Forums,wsl环境下编译的镜像,烧录的时候会出问题,原因是oem.img rootfs.img等是软链接的,只有1KB大小,不能成功烧录进入。
用官方提供的脚本,把软链接的对象改成实际对象即可。
#!/bin/bash
files=("output/image/oem.img"
"output/image/rootfs.img"
"output/image/userdata.img")
for file in "${files[@]}"; do
if [ -e "$file" ]; then
filename=$(basename "$file")
target=$(readlink -f "$file")
rm "$file"
mv "$target" "output/image/$filename"
echo "文件 '$filename' 已删除并重命名为 '$filename'"
else
echo "文件 '$file' 不存在"
fi
done
2:启动后,64M内存实际只有30M左右
因为默认配置给摄像头了,如果不需要摄像头的,到你的配置文件里把RK_BOOTARGS_CMA_SIZE改小即可,例如我的是:
3.nand的启动方式,rootfs空间太小,没干啥就满了
nand虽然有128M,但是官方分配给userdata 10m, oem 30m,一下子就浪费了40m的空间,直接把它干掉(暂时不知道这个oem分区的作用是啥,有知道的小伙伴告诉我)
4.内核编译的时候,没有将modules导出到/lib/modules下面
官方SDK默认是导出到oem下面的,不知道这种做法的原因是啥,这样还导致不能直接通过modprobe加载驱动。必须手动去目录下insmod,没办法自动加载依赖。
sysdv目录下的make文件,是编译kernel,uboot,rootfs用的,在这里编译内核的部分修改下,让它编译好内核后把modules导出到我们指定的目录(这个目录自己决定,待会打包根文件系统的时候还要用到它):
$(MAKE) -C $(KERNEL_DIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) INSTALL_MOD_PATH=$(KERNEL_DIR)/out/modules_install modules_install
5.打包alpine根文件系统
具体制作方式看官方的文档:Alpine Linux 移植(2) | LUCKFOX WIKI
这里假设已经成功制作得到alpine.tar.gz文件,并且放在sysdrv/source/alpine/下面
首先修改makefile,把all的项目,也就是默认打包的那一项的rootfs去掉,因为我们要用自己的rootfs,不用官方的,所以不需要打包rootfs,节省时间:
然后到配置文件下面BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_Mini_B-IPC.mk,增加一项:
# 配置自定义镜像目录
export RK_CUSTOM_ROOTFS=../sysdrv/source/alpine/alpine.tar.gz
接下来主要是修改build.sh里的打包部分:
整个打包流程大概如下:
1.判断有没有上面定义的RK_CUSTOM_ROOTFS变量,如果有的话,说明是用自己的自定义的根文件系统
2.将根文件系统解压
3.将firmware以及上面导出的modules拷贝到文件系统里
4.重新打包成img镜像
6.wifi的支持
usb wifi暂时没驱动成功(很大原因是电压不足,有空再试)
sdio wifi,同样参考官方的教程:【RV1103】RTL8723bs (SD卡形状模块)驱动开发-CSDN博客
但是说实话,那篇文章有点复杂了,而且里面的配置参杂了很多作者自己的配置,跟wifi无关的,导致有点混乱。
以r8723bs sdio wifi模块为例,先去kernel的配置里把8723bs激活。
如何配置可以参考官方的例子:内核配置 | LUCKFOX WIKI,或者简单粗暴点,直接修改config文件,在里面加入相关选项:
因为8723是用了sdio的,默认的内核里sdmmc没有开启sdio的支持,需要手动修改下设备树,只需要添加一个sdio_pwrseq节点以及修改下sdmmc的功能即可: