关键词:
点灯
上篇文章我们使用 buildroot 编译出了 BananaPi M1 的镜像,烧录到 SD 卡,系统跑起来后,我便开始了内核设备树的探索。
先从点灯开始,进入到板子的 /sys/class/leds/ 目录看到
# cd /sys/class/leds/
# ls
bananapi:green:usr
其中 bananapi:green:usr
正是对应板子上的绿色 LED 灯,原理图如下
进入到 bananapi:green:usr
,我们向 brightness 文件写入 1,即可点亮绿色 LED 灯
# cd bananapi:green:usr/
# ls
brightness max_brightness subsystem uevent
device power trigger
# echo 1 > brightness
向 trigger 写入 heartbeat 就可以让绿色 LED 灯像心跳一样闪动
# echo heartbeat > trigger
设备树
我们使用 buildroot 编译的 Banana Pi M1 镜像,内核使用的是 linux-4.18.12 原始代码。既然研究设备树,那就先动手改一改设备树,跑一跑感受一下。
修改内核
于是我就把设备树中 LED 的名字改了一下
buildroot-2021.05/output/build/linux-4.18.12/arch/arm/boot/dts/sun7i-a20-bananapi.dts
leds
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&led_pins_bananapi>;
green
/* label = "bananapi:green:usr"; */
label = "green";
gpios = <&pio 7 24 GPIO_ACTIVE_HIGH>;
;
;
重新编译
$ make linux-rebuild
make[1]: 进入目录“/home/liyongjun/project/board/buildroot-2021.05”
rm -f /home/liyongjun/project/board/buildroot-2021.05/output/build/linux-4.18.12/.stamp_installed
rm -f /home/liyongjun/project/board/buildroot-2021.05/output/build/linux-4.18.12/.stamp_staging_installed
rm -f /home/liyongjun/project/board/buildroot-2021.05/output/build/linux-4.18.12/.stamp_target_installed
rm -f /home/liyongjun/project/board/buildroot-2021.05/output/build/linux-4.18.12/.stamp_images_installed
rm -f /home/liyongjun/project/board/buildroot-2021.05/output/build/linux-4.18.12/.stamp_host_installed
rm -f /home/liyongjun/project/board/buildroot-2021.05/output/build/linux-4.18.12/.stamp_built
>>> linux 4.18.12 Building
...
comm: /home/liyongjun/project/board/buildroot-2021.05/output/build/linux-4.18.12/.files-list.before: No such file or directory
comm: /home/liyongjun/project/board/buildroot-2021.05/output/build/linux-4.18.12/.files-list-staging.before: No such file or directory
comm: /home/liyongjun/project/board/buildroot-2021.05/output/build/linux-4.18.12/.files-list-host.before: No such file or directory
make[1]: 离开目录“/home/liyongjun/project/board/buildroot-2021.05”
报错了,提示没有 .files-list.before
、.files-list-staging.before
、.files-list-host.before
这三个文件。
看了下 Makefile,貌似是用来辅助打包镜像用的。
灵性操作
我在这里也是卡了大半天,buildroot 的 Makefile 还是稍显复杂的,找了半天都没找到出错的地方是 Makefile 的哪条语句。后来索性想,你不是需要这三个文件吗,那我就手动给你创建这三个文件试试,结果,还真就编译通过了。。
正规操作
后来才知道原来 buildroot 有个功能叫 OVERRIDE_SRCDIR,专门处理修改代码并同步的问题。
我们可以在 output 以外的位置修改源码,这也是一个好习惯,不然哪天不小心 make clean 了,辛辛苦苦修改的代码就没了。。
我们在 local.mk 里指定 linux-kernel 对应的源码目录
buildroot-2021.05/local.mk
LINUX_OVERRIDE_SRCDIR = /home/liyongjun/project/board/buildroot-2021.05/override/linux-4.18.12
这样,当我们进行 make linux-rebuild 的时候,buildroot 就会使用 rsync 将指定路径的代码同步到 output/build 中进行重新编译。
完善
不过,编译的时候还是出现了和上面一样缺少那三个文件的错误,为了方便日后编译,索性将创建这三个文件的动作写到 Makefile 中
buildroot-2021.05/package/pkg-generic.mk
# Rsync the source directory if the <pkg>_OVERRIDE_SRCDIR feature is
# used.
$(BUILD_DIR)/%/.stamp_rsynced:
@$(call step_start,rsync)
@$(call MESSAGE,"Syncing from source dir $(SRCDIR)")
@mkdir -p $(@D)
$(foreach hook,$($(PKG)_PRE_RSYNC_HOOKS),$(call $(hook))$(sep))
@test -d $(SRCDIR) || (echo "ERROR: $(SRCDIR) does not exist" ; exit 1)
rsync -au --chmod=u=rwX,go=rX $($(PKG)_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS) $(RSYNC_VCS_EXCLUSIONS) $(call qstrip,$(SRCDIR))/ $(@D)
touch $(@D)/.files-list.before ; touch $(@D)/.files-list-staging.before ; touch $(@D)/.files-list-host.before ;
$(foreach hook,$($(PKG)_POST_RSYNC_HOOKS),$(call $(hook))$(sep))
@$(call step_end,rsync)
$(Q)touch $@
再次 make linux-rebuild && make,不会报错了。
验证
烧录新编译的镜像,开机运行,进入到 /sys/class/leds/ 目录
# cd /sys/class/leds/
# ls
green
果然,名称变成了 green
说明我们修改 dts 成功,重新编译成功。
搞定!
buildroot使用介绍(代码片段)
buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件... 查看详情
shdkmslinux内核模块在ubuntu上重新编译(代码片段)
使用buildroot编译构建系统(代码片段)
使用buildroot编译构建系统buildrootgithub仓库地址https://github.com/100askTeam/neza-d1-buildroot.gitopensbigitee仓库地址https://gitee.com/weidongshan/NezaD1-opensbi.gitu-bootgitee仓库地址https://gitee.com/weidongshan/Neza 查看详情
使用buildroot制作根文件系统(代码片段)
...移植。为了简便我就找大佬沟通了一下,大佬推荐了Buildroot工具来制作根文件系统。平台开发板:正点原子阿尔法Ubuntu版本:16.04buildroot工具来源:正点原子提供的资料包中uboot:原厂制作的uboot内核:原厂... 查看详情
buildroot使用总结与添加本地app到项目(代码片段)
...片平台:瑞芯微RV1126系统架构:uboot+kernel+buildrootBuildroot是Linux平台上一个构建嵌入式Linux系统的框架,整个Buildroot是由Makefile脚本和Kconfig配置文件构成。可以和编译Linux内核一样,通过buildroot配置,menuconf... 查看详情
buildroot构建交叉编译工具链(代码片段)
2.1介绍2.1.1工具链简介一个编译工具链模块是允许为系统编译代码的一组工具。它由一个编译器(在我们的例子中是gcc)、像汇编器和链接器这样的二进制utils(一般是binutils)和一个C标准库(例如GNULibc,uClibc-ng)组成。一个交叉编译工具... 查看详情
为旧内核设置 buildroot
】为旧内核设置buildroot【英文标题】:Setupbuildrootforoldkernels【发布时间】:2012-03-1001:26:28【问题描述】:我正在尝试设置buildroot以交叉编译自定义应用程序。/#uname-aLinuxVenus2.6.12.6-VENUS#323634WedMay2513:40:36CST2011mipsunknown到目前为止,... 查看详情
linux基于imx6ull移植buildroot(代码片段)
文章目录1.Buildroot简介2.获取buildroot源码3.编译环境配置4.通过buildroot编译imx6ull5.修改默认配置适配imx6ullbootloader6.修改默认配置适配imx6ullkernel8.编译烧录验证1.Buildroot简介Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Bui... 查看详情
buildroot构建指南——linux内核
Buildroot可以从LinuxKernel的官网(kernel.org)下载并编译内核,也可以使用用户自己的定制化内核。使用官方内核使用官方的内核构建系统非常简单,事实上,mini2440_defconfig就是采用官方的内核进行构建的。makemenuconfig-->Ke... 查看详情
瑞芯微rv1126buildroot开发学习笔记(代码片段)
1、BuildRoot如何增加一个包?参考<TheBuildrootUserManual.pdf>第17章2、BuildRoot如何单独编译某一个包?如果修改了源码,在编译前运行make<package>-dirclean如果只是修改output目录下的东西,编译前运行make<package>... 查看详情
瑞芯微rv1126buildroot开发学习笔记(代码片段)
1、BuildRoot如何增加一个包?参考<TheBuildrootUserManual.pdf>第17章2、BuildRoot如何单独编译某一个包?如果修改了源码,在编译前运行make<package>-dirclean如果只是修改output目录下的东西,编译前运行make<package>... 查看详情
最快的方式建立自己的linux环境-buildroot-qemu(代码片段)
...快方法。我说最快吗?然后开始:$gitclonegit://git.buildroot.net/buildroot$cdbuildroot/$makeqemu_arm_versatile_defconfig其中qemu_arm_versatile_defconfig是buildroot/configs目录中的文件和defconfig名称。下一个:$makemenuconfig出现类似于Linux内核menuco... 查看详情
android内核编译(代码片段)
...发异常而导致中断。如果是使用的是MacOS,必须在要重新划分磁盘分区,以区分大小写,原有的磁盘不区分大小写,没法编译软件 查看详情
rk3568开发笔记:在虚拟机上使用sdk编译制作ubootkernel和buildroot镜像(代码片段)
...p; 一个通用LinuxSDK(RV系类的sdk没有对工程目录包含有buildroot、de 查看详情
我们只能在内核源代码树中重新编译内核模块吗?
】我们只能在内核源代码树中重新编译内核模块吗?【英文标题】:Canweonlyrecompileakernelmoduleinkernelsourcetree?【发布时间】:2013-08-2905:34:47【问题描述】:假设我们安装一个内核2.6.32.el6,然后我们下载2.6.32.el6.src.rpm,我们可以只安... 查看详情
buildroot构建项目---buildroot介绍
1.1什么是buildroot Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器... 查看详情
rk3568开发笔记:在虚拟机上使用sdk编译制作ubootkernel和buildroot镜像(代码片段)
若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/125844240红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软... 查看详情
根文件系统构建(buildroot方式)(代码片段)
目录何为buildroot?buildroot简介buildroot下载buildroot构建根文件系统配置buildroot编译buildrootbuildroot根文件系统测试buildroot第三方软件和库的配置buildroot下的busybox配置busybox配置busybox中文字符的支持编译busybox根文件系统测试前面我... 查看详情