如何在Yocto环境中快速构建单个驱动配方?
Yocto驱动开发快速构建优化方案
术语定义
- 嵌入式机器:Yocto项目的目标设备
- 主机:用于克隆Yocto项目、执行bitbake的桌面开发机器
当前开发流程
每次修改驱动后,执行以下步骤验证:
devtool build MyDriver devtool deploy-target -Ss MyDriver root@<ip> # 嵌入式机器IP ssh root@<ip> insmod /lib/modules/<kernel_version>/MyDriver.ko sleep 10 rmmod MyDriver dmesg -t | tail
注:驱动已通过devtool add添加至<build>/sources/路径下。
问题痛点
devtool build MyDriver会触发整个Linux内核的全量构建,导致仅1000行左右的驱动编译耗时数分钟,效率极低。
优化方案
可以通过以下两种方式仅构建目标驱动配方,避免内核全量编译:
方案一:直接用bitbake单独构建驱动
利用devtool生成的临时配方,直接调用bitbake执行指定任务,跳过内核依赖的全量构建:
# 强制重新编译驱动 bitbake MyDriver -c compile -f # 完成编译后执行安装打包(用于后续deploy-target) bitbake MyDriver -c install -f
执行完成后,继续使用你原有的devtool deploy-target命令即可部署新编译的驱动。
方案二:进入构建目录直接调用oe_runmake
直接在Yocto的构建环境中编译驱动,步骤如下:
- 进入驱动的构建工作目录(替换
<machine_arch>和<version>为实际值):
cd <build>/tmp/work/<machine_arch>/MyDriver/<version>/build
- 调用Yocto环境中的make命令编译:
oe_runmake
编译完成后,你可以手动将生成的MyDriver.ko通过scp拷贝到嵌入式机器:
scp MyDriver.ko root@<ip>:/lib/modules/<kernel_version>/
之后再执行原有的insmod、rmmod等验证步骤即可。
前置条件
确保已提前构建过内核头文件,避免编译驱动时触发内核构建:
bitbake linux-<your_kernel_name> -c headers_install
内容的提问来源于stack exchange,提问作者Adrian Maire
相关产品推荐
相关产品推荐

