poky linux初探 -- 添加自己的内核食谱

本文介绍了如何使用Poky(现称Yocto)为嵌入式系统添加自定义的Linux内核食谱。Poky是一个基于OpenEmbedded的Linux发行版,提供了一种构建嵌入式软件栈的方法。通过元数据(食谱)和元工具(Bitbake)管理软件构建过程。作者详细展示了从创建linux_2.6.37.bb食谱文件,设置SRC_URI获取源代码,到调整变量确保构建过程顺利进行的步骤。通过这个过程,读者可以学习到Poky和Bitbake的基础知识,以及如何在Poky中定制内核。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.pokylinux.org/

poky是一个distribution,采用 openembedded 构建,包含一个基于GNOME的embedded linux software stack。poky封装了openembedded,选择了openembedded的核心,外加更多的脚本,作为开发者,如果想学习openembedded这一强大的工具,建议从poky开始。即便如此,poky的学习曲线仍然是陡峭的(虽然很好用)。

poky的思想大致是:开发者提供元数据(食谱或菜谱),每份食谱都是描述某个软件的‘清单’,比如源代码从哪里下载,需要哪些补丁文件,可能需要的特殊编译链接选项,打包时的需要的特殊配置,依赖其他什么软件等信息。食谱是由一种标记性的语言所写,由元工具(bitbake)解析、执行。元工具则抽象了构建一个软件过程中的fetch,unpack,patch,configure,compile,package等任务;同时,元工具还负责按不同软件之间的依赖关系有序的执行。

我最早接触的poky其实已经不是当前最新的poky了。如果用git来取得poky的源码仓库的话,那其实是名叫pinky-3.1的分支。可惜这个分支从09年左右就停止维护了,现在的poky(如master分支)叫"Yocto",这应该已经是OpenHand被intel收购之后的事了。成为Yocto之后,poky已不再简单地定位为一个distribution,而是一个tool-maker,或者是“ 协作开发软件,增加了更多的模版、脚本、工具等,来帮助开发者定制嵌入式系统 ”,相对于增加了更多layers的Yocto,早期的poky(pinky)显得更“单纯”,简单的说,就是更少的文件(meta bb file,meta class file等)。对于一个初学者来说,这意味着遇到问题后更容易解决(不管你的native system同poky要求的多么匹配,问题仍然是难免的)。当然,缺点就是不再被社区支持后,各软件包的版本均停留在了pinky-3.1发布的那一刻,想升级,想使用更新的软件的话,要么就老老实实切换到poky(Yocto),与社区同步;要么就Do It Yourself。相对与前者,后者这种行为无疑是‘重新发明轮子’,但重新发明轮子有时也不是一件坏事,按候捷的话说(非原话)“学往深处学,用往易处用”。用我的话来说,就是“想学会游泳的方法就是下水”。下面,我就从零开始自己动手添加一个食谱,这个食谱将产生一个较新的linux内核包(2.6.37),取代poky(pinky)中还较早版本(2.6.24)的内核,以此来学习poky,bitbake中的一些概念。

一步步创建inux kernel的食谱

创建linux_2.6.37.bb 食谱文件,食谱的文件名很重要,bitbake会从文件名中提取信息来设置一些环境变量。这些环境变量决定比如在哪里找到源代码,最后所生成的包的名字等等。

首先,我要将kernel源代吗从网上下下来。bitbake通过SRC_URI 变量知道到哪里去下载源码的,linux 2.6.37的source code从git repository取得,而poky(pinky)时期git冒似还未流行,kernel源代码仍然是通过ftp、http方式下载的tar.bz压缩包,所以我无法直接copy linux_2.6.24.bb 中的SRC_URI 设置。

于是,第一步,在linux_2.6.37.bb 中添加:

### 安装与配置 `arm-poky-linux-gnueabi-gcc` 编译器 #### 已知信息 - 用户希望解决无法找到 `arm-poky-linux-gnueabi-gcc` 的问题。 - 提供了关于 GNU 交叉编译工具链的信息[^1]以及 Poky 编译器的相关说明[^3]。 #### 解决方案概述 要正确安装并配置 `arm-poky-linux-gnueabi-gcc`,需遵循以下方法: --- #### 方法一:通过官方资源获取预构建的工具链 可以访问指定网站下载适合目标平台的交叉编译工具链。例如,可以从以下地址获取: ```plaintext http://www.veryarm.com/arm-none-linux-gnueabi-gcc [^2] ``` 需要注意的是,上述链接可能仅提供通用的 ARM 跨编译工具链(如 `arm-none-linux-gnueabi-gcc`),而并非特定于 Yocto Project 或 Poky工具链。如果需要针对 Poky工具链,则应优先考虑从 Yocto 构建环境生成或直接使用其发布的 SDK。 --- #### 方法二:基于 Yocto Project 配置开发环境 Yocto Project 提供了一种机制用于创建定制化的交叉编译工具链。以下是具体操作方式: 1. **设置环境变量** 进入已有的 Yocto 开发目录,并加载对应的环境脚本文件。例如: ```bash source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi ``` 此命令会自动调整 PATH 变量以包含所需的工具链路径。 2. **验证工具链可用性** 加载完成之后,可以通过运行以下命令确认工具链是否正常工作: ```bash arm-poky-linux-gnueabi-gcc --version ``` 如果未报错且返回版本号,则表明工具链已被成功激活。 3. **手动添加到全局 PATH** 若因某些原因未能自动更新 PATH,可手动将其加入当前用户的 shell 配置中。假设工具链位于 `/opt/toolchain/bin` 下,执行如下指令即可实现永久生效: ```bash echo 'export PATH=/opt/toolchain/bin:$PATH' >> ~/.bashrc && source ~/.bashrc ``` --- #### 常见错误排查 当遇到 “找不到 `arm-poky-linux-gnueabi-gcc`” 错误时,通常由以下几个原因之一引起: - 环境变量未正确定义; - 工具链尚未被正确安装至系统; - 文件权限不足导致不可执行。 对于这些问题,建议逐一检查以上各环节是否存在遗漏之处。 --- #### 示例代码片段 下面展示了一个简单的 C 程序及其跨编译过程作为参考: ```c // test.c #include <stdio.h> int main() { printf("Hello, world!\n"); return 0; } ``` 随后利用 Poky GCC 对该源码进行编译: ```bash arm-poky-linux-gnueabi-gcc -o test test.c ``` 最终生成的目标程序适用于嵌入式 Linux 平台。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值