Yocto中开发内核的两种方法

您所在的位置:网站首页 内核编译工具 Yocto中开发内核的两种方法

Yocto中开发内核的两种方法

2023-10-24 16:04| 来源: 网络整理| 查看: 265

开发内核的两种方法 1. 内核开发准备1.1 devtool内核开发准备1.2 传统内核开发准备 2. 创建和准备层3. 使用devtool工具开发内核4. 使用传统方法开发内核【脱离yocto命令的传统内核开发】

参考文档:

yocto官方帮助文档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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3