写在前面
主要是记录一下rk平台px30 linux移植过程中,buildroot做的一些修改和注意事项,记录一下,希望后来人可以少踩一点坑。
buildroot简介
Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。
整个Buildroot是由Makefile(*.mk)脚本和Kconfig(Config.in)配置文件构成的,因此可以像配置Linux内核一样执行make menuconfig进行配置,编译出一个完整的、可以直接烧写到机器上运行的Linux系统文件(包含bootloader、kernel、rootfs以及rootfs中的各种库和应用程序)。
官方文档
https://wiki.t-firefly.com/zh_CN/Firefly-Linux-Guide/development_buildroot.html#pei-zhi
修改编译选项
配置修改这块属实是有点恶心,有几个需要注意的地方
1 有时候更改了配置得重新编译 make clean all 都不行 我目前只能make distclean ,但是这个清除的太干净,把dl中的安装包都清除了,emmm…最好自己备份一下dl中的数据包吧
2 有时候会因为下载地址有问题下载失败,此时也不能继续编译了,将他要下载的包通过手动下载的方式,下载之后放到dl包中,可以解决大部分问题。
3 修改defconfig的方式添加配置的方式,在他这里不太靠谱,这玩意不能自动把依赖加上,或者给你提示出来,不要过度依赖手动修改配置的方式,老老实实的用make menuconfig的方式,添加,找到所有的依赖,慢慢添加吧,最后make savedefconfig
4 添加了包之后需要 重新make clean all 重新搞?
目前看有一些工具链或者库改了之后,需要重新修改,我正好改的是编译工具链,官方文档摘抄如下
当通过 make menuconfig,make xconfig 或其他配置工具之一更改系统配置时,Buildroot 不会尝试检测应重建系统的哪些部分。在某些情况下,Buildroot 应该重建整个系统,在某些情况下,仅应重建软件包的特定子集。但是以完全可靠的方式检测到这一点非常困难,因此 Buildroot 开发人员已决定不尝试这样做。
1 何时需要完全重建?
目标体系结构修改时,需要全部重新编译
编译工具链修改时,需要全部重新编译
新增一个包无需全部重新编译,但是如果新增的是一个库,且别其他文件所引用,则需一起重新编
译,或者全部重编。
删除一个包的时候,需要全部重新编译,因为BuildRoot不会去删除编译产生的文件,这样会照成文件系统臃肿等问题,但是你没有必要马上重新编译,可以等到最后一起编译。
文件系统框架修改时,除了overlay 之外,都需要全部重新编译。
一般而言,当你遇到构建错误并且不确定所做的配置更改可能带来的后果时,请进行完全重建。
2 如何进行全部重建?
方法一:
rm -rf output/
方法二:
make clean all
文件系统分区
uboot 分区: 烧写 uboot 编译出来的 uboot.img。
trust 分区: 烧写 uboot 编译出来的 trust.img。
misc 分区: 烧写 misc.img。给 recovery 使用。
boot 分区: 烧写 kernel 编译出来的 boot.img。
recovery 分区: 烧写 recovery.img。
backup 分区: 预留。
oem 分区: 给厂家使用,存放厂家的 app 或数据。只读,挂载在/oem 目录。
rootfs 分区: 存放 buildroot 或者 debian 编出来的 rootfs.img,只读。
userdata 分区:存放 app 临时生成的文件或者是给最终用户使用。可读写,挂载在
/userdata 目录下。
buildroot遇到的问题(比较杂)
1 UI界面方向翻转180度
网上搜到的正常修改方式
# 修改 /etc/xdg/weston/weston.ini
[output]
name=UNNAMED-1
# normal|90|180|270|flipped|flipped-90|flipped-180|flipped-270
transform=180
如果需要动态改变的方式
#可行
echo "output:all:rotate180" > /tmp/.weston_drm.conf
#下面这个名字是正常的时候使用,我们这边使用这个名字不行
#[root@px30_64:/etc/init.d]# ls /sys/class/drm/
#card0-DPI-1/ card0/ controlD64/ renderD128/ version
echo "output:UNNAMED-1:rotate180" > /tmp/.weston_drm.conf
真正使用的时候不可用的原因:(FAE回复)
从log上看,你们的DPI显示器识别到的名字是UNNAMED-1:
[15:21:23.468] Output UNNAMED-1, (connector 71, crtc 60)
可能的原因是weston版本较低,还没有添加DPI显示器类型。
所以需要使用UNNAMED-1,或者更新最新sdk(weston-10)
emmm…
最后修改/buildroot/board/rockchip/common/base/etc/xdg/weston/weston.ini 重新编译烧写即可。
[output]
name=UNNAMED-1
transform=180
2 报错
2022-03-16T10:42:28 package/qemu/qemu.mk:110: * “Refusing to build qemu-user: target Linux version newer than host’s.”. Stop.2022-03-16T10:42:28 make: * [_all] Error 2
更换Ubuntu 16.04系统 (文档推荐版本)
3 buildroot编译时文件下载失败
将fontconfig-2.13.1.tar.bz2 放置到buildroot/dl. 重新编译 会先检查dl包的内容然后操作。