Yocto中开发内核的两种方法

参考文档:

Note:
   devtool与bitbake类似,同属于yocto中的构建工具,使用前通过如下命令进行声明: source ~/poky/oe-init-build-env
            开发内核前,推荐了解bitbake的常用命令


1. 内核开发准备

1.1 devtool内核开发准备

1.	初始化bitbake环境
		source  ~/poky/oe-init-build-env
		
2.	准备conf/local.conf 文件,该文件包含了构建的环境变量,默认下:
		MACHINE = “qemux86”
		MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
		
3.	创建一个层,存放修改后的内核补丁文件:
		cd poky/build
		bitbake-layers create-layer ../../meta-mylayer
		
4.	配置自定义层的构建环境
		cd poky/build
		bitbake-layers add-layer ../../meta-mylayer
		
5.	构建可扩展的SDK:
		cd poky/build
		bitbake core-image-minimal -c populate_sdk_ext
(完成后,在目录poky/build/tmp/deploy/sdk/下,存在poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-3.3.1.sh)

6.	安装SDK:   
		./poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-3.3.1.sh
		
7.	声明SDK中的环境变量(如交叉编译器):
		source poky_sdk/environment-setup-i586-poky-linux
		echo $CROSS_COMPILE    # 查看是否声明成功
		
8.	构建原始的内核镜像:
		devtool build-image
		

1.2 传统内核开发准备

1.	初始化bitbake环境
		source  ~/poky/oe-init-build-env
		
2.	准备conf/local.conf 文件,该文件包含了构建的环境变量,默认下:
		MACHINE = “qemux86”
		MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
		
3.	创建一个层,存放修改后的内核补丁文件:
		cd poky/build
		bitbake-layers create-layer ../../meta-mylayer
		
4.	配置自定义层的构建环境
		cd poky/build
		bitbake-layers add-layer ../../meta-mylayer
		
5.	创建一个本地git库:
		cd ~
		git clone git://git.yoctoproject.org/linux-yocto-4.12 --branch standard/base
		(yocto project 2.4 之后不能使用linux-yocto-4.12版本)
		
6.	创建本地内核缓存 Git 库:
		cd ~
		git clone git://git.yoctoproject.org/yocto-kernel-cache --branch yocto-4.12

7.	声明SDK中的环境变量(如交叉编译器):
		source poky_sdk/environment-setup-i586-poky-linux
		echo $CROSS_COMPILE    # 查看是否声明成功
		
8.	构建原始的内核镜像:
		devtool build-image
		

2. 创建和准备层

1. 创建一个层的结构体:
		mkdir meta-mylayer
		mkdir meta-mylayer/conf
		mkdir meta-mylayer/recipes-kernel
		mkdir meta-mylayer/recipes-kernel/linux
		mkdir meta-mylayer/recipes-kernel/linux/linux-yocto
		
2.	创建一个层的配置文件:
		vim meta-mylayer/conf/layer.conf
			# We have a conf and classes directory, add to BBPATH
			BBPATH .= ":${LAYERDIR}"
			
			# We have recipes-* directories, add to BBFILES
			BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
			            ${LAYERDIR}/recipes-*/*/*.bbappend"
			
			BBFILE_COLLECTIONS += "mylayer"
			BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"
			BBFILE_PRIORITY_mylayer = "5"
			
3.	创建内核配方的 .bb 文件:
		vim meta-mylayer/recipes-kernel/linux/linux-yocto_4.12.bbappend
			FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
			
			SRC_URI_append = " file://patch-file-one.patch"
			SRC_URI_append = " file://patch-file-two.patch"
			SRC_URI_append = " file://patch-file-three.patch"
			

3. 使用devtool工具开发内核

1.	检查内核源文件: 
		source  ~/poky/oe-init-build-env;
		devtool modify linux-yocto  (出现的调试错误可忽略)
		
2.	进入内核源码目录,修改内核源码:
		cd poky_sdk/workspace/sources/linux-yocto/ 
		vim init/calibrate.c
			void calibrate_delay(void)
			{
			    unsigned long lpj;
			    static bool printed;
			    int this_cpu = smp_processor_id();
			
			    printk("*************************************\n");
			    printk("*                                   *\n");
			    printk("*        HELLO YOCTO KERNEL         *\n");
			    printk("*                                   *\n");
			    printk("*************************************\n");
			
			    if (per_cpu(cpu_loops_per_jiffy, this_cpu)) {
			          .
			          .
			          .
			 
3.	更新修改后的内核源码:
		devtool build linux-yocto
		
4.	创建内核新镜像:
		cd  ~ 
	    devtool build-image core-image-minimal
	    
5.	测试修改后的内核: 
		烧录目标系统,查看启动日志  dmesg (printk)
		
6.	暂存并提交修改后的内核:
		cd poky_sdk/workspace/sources/linux-yocto
		git status
		git add init/calibrate.c
		git commit –m “calibrate: Add printk example”
		
7.	导出内核修改后的补丁并创建.bb文件: 
		devtool finish linux-yocto workdir/meta-mylayer 
		meta-mylayer 为自定义的层, 上述命令完成后,补丁文件和 .bb 文件将位于workdir/meta-mylayer/recipes-kernel/linux/)
		
8.	利用修改的内核,构建整个镜像:
		cd ~/poky/build 
		bitbake core-image-minimal


4. 使用传统方法开发内核

1. 进入内核源码目录,修改内核源码:
		cd ~/linux-yocto-4.12/ 
		vim init/calibrate.c
			void calibrate_delay(void)
			{
			    unsigned long lpj;
			    static bool printed;
			    int this_cpu = smp_processor_id();
			
			    printk("*************************************\n");
			    printk("*                                   *\n");
			    printk("*        HELLO YOCTO KERNEL         *\n");
			    printk("*                                   *\n");
			    printk("*************************************\n");
			
			    if (per_cpu(cpu_loops_per_jiffy, this_cpu)) {
			          .
			          .
			          .

2.	阶段性提交修改后的内核:
		git add init/calibrate.c
		git commit –m “calibrate: Add printk example”
		
3.	更新local.conf配置文件,指向内核源码:
		cd poky/build/conf
		vim local.conf
			SRC_URI_pn-linux-yocto = "git:///path-to/linux-yocto-4.12;protocol=file;name=machine;branch=standard/base; \
			                          git:///path-to/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-4.12;destsuffix=${KMETA}"
			SRCREV_meta_qemux86 = "${AUTOREV}"
			SRCREV_machine_qemux86 = "${AUTOREV}"
			
4.	使用bitbake构建修改后的内核镜像
		cd poky/build
		bitbake core-image-minimal
		
5.	测试修改后的内核:
		烧录目标系统,查看启动日志  dmesg (printk)
		
6.	产生内核修改后的补丁文件:
		cd ~/linux-yocto-4.12/init
		git format-patch -1
		0001-calibrate.c-Added-some-printk-statements.patch
		
7.	移动补丁文件到上文创建的层:
		mv ~/linux-yocto-4.12/init/0001-calibrate.c-Added-some-printk-statements.patch ~/meta-mylayer/recipes-kernel/linux/linux-yocto
		
8.	在recipes-kernel/linux目录下创建 .bb 文件:
		vim linux-yocto_4.12.bbappend
			FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
			SRC_URI_append = "file://0001-calibrate.c-Added-some-printk-statements.patch"
			
9.	重新构建修改后的内核:
		cd poky/build
		bitbake -c cleanall yocto-linux
		bitbake core-image-minimal -c cleanall
		bitbake core-image-minimal


【脱离yocto命令的传统内核开发】

传统方法开发内核也可不依赖于yocto中的工具:

1.	将 yocto 目录下的内核拷贝出来, 内核源码目录可通过如下命令查询:
		bitbake -e linux-yocto | grep ^S=
		
2.  找到相应芯片厂商的内核补丁包,将其复制出来,一般在 meta-厂商 目录下
	(将所有补丁放在内核源码的上一层)

3.	声明SDK中的环境变量(如交叉编译器):
		source poky_sdk/environment-setup-i586-poky-linux
		echo $CROSS_COMPILE    # 查看是否声明成功

4.	进入内核目录,打入补丁包并进行编译:
		for p in `ls -1 ../*.patch`; do patch -p1 < $p; done 		# 将所有补丁打入内核中
		cd ~/linux-yocto-4.12
		make menuconfig
		make

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值