树莓派3b内核和驱动的交叉编译

本文介绍了如何在Ubuntu 16.04虚拟机上为树莓派3B进行内核和驱动的交叉编译。首先从GitHub获取树莓派的内核源码和工具,然后生成.config文件,通过make命令编译内核和模块,更新SD卡上的内核文件。最后,文章提到了驱动编译中需要注意的问题,包括依赖库的安装和驱动的编写。

树莓派原本的系统为:ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi,系统安装后没有附带内核的库。

为了可以在树莓派上使用自己编译的内核程序,我升级了树莓派的系统内核,并用升级时编译的内核库来编译树莓派上的驱动程序(用的是虚拟机Ubuntu16.04 amd64进行交叉编译)。

0、获取源码和编译器

资源链接:https://github.com/raspberrypi

将inux和tools两部分下载(此处内核源码的分支:linux-rpi-4.4.y)

1、生成.config

方法1:使用树莓派的.config
在树莓派上使用命令:
$ sudo modprobe configs
将生成的config.gz拷贝到源码目录下,执行命令:
$ zcat config.gz > .config

方法2:生成一个.config
在源码目录下执行:
$ make ARCH=arm CROSS_COMPILE=../tools-master/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf- bcm2709_defconfig

如果生成.config时报错:
curses.h:No such file or directory
执行:$ sudo apt-get install libncurses5-dev libncursesw5-dev

2、编译内核
$ KERNEL=kernel7
$ make ARCH=arm CROSS_COMPILE=../tools-master/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -j4 zImage modules dtbs

### 树莓派内核交叉编译教程 #### 准备工作 为了在非树莓派设备(如Ubuntu)上完成针对树莓派内核交叉编译,需要准备必要的开发环境工具链。以下是具体的准备工作: - **安装依赖软件包** 需要在宿主机(如Ubuntu)上安装一系列用于构建内核所需的依赖项。这些依赖项可以通过APT包管理器安装[^4]: ```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install build-essential bison flex make libc6-dev libncurses5-dev gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu bc libssl-dev -y ``` - **获取交叉编译工具链** 如果未预装合适的交叉编译工具链,则需手动下载并配置支持ARM架构的目标平台工具链。通常可以从官方资源或第三方提供者处获得。 - **克隆树莓派内核源码** 使用Git命令从GitHub上的官方仓库拉取最新的Linux内核源代码版本[^3]: ```bash git clone --depth=1 https://github.com/raspberrypi/linux cd linux ``` #### 设置交叉编译环境变量 定义好目标体系结构以及所使用的特定交叉编译器路径非常重要。这一步骤确保Makefile能够识别到正确的工具集。 ```bash export ARCH=arm export CROSS_COMPILE=aarch64-linux-gnu- ``` 上述设置表明正在处理的是ARM架构,并指定了`aarch64-linux-gnu-*`作为前缀名的一组GNU交叉编译工具集合。 #### 开始实际编译流程 一旦所有前期条件都已满足,就可以正式进入核心操作阶段——即执行真正的编译动作本身了: - **加载默认配置文件** 运行下面这条指令会自动应用一套适用于Raspberry Pi硬件特性的初始参数组合方案: ```bash make bcmrpi_defconfig ``` - **定制化修改(可选)** 对于某些特殊需求场景而言,可能还需要进一步调整部分选项开关状态或者新增额外驱动模块等功能特性进来;此时可以借助menuconfig图形界面来进行直观便捷的操作体验. ```bash make menuconfig ``` - **启动最终组装过程** 当一切就绪之后便能下达最后通牒般的关键性命令啦!耐心等待一段时间过后就能收获属于自己的专属订制版kernel镜像成果咯~ ```bash time make -j$(nproc) ``` 以上便是整个基于Ubuntu系统的环境下实现对Raspberry Pi专用linux kernel进行跨平台远程制作的大致轮廓描述. #### 处理WiringPi库的情况 如果项目涉及到了需要用到wiringPi这样的外部C函数库的话,那么除了常规意义上的单纯应用程序之外还得多加注意一下关于该类静态/动态共享对象(.so/.a files)的相关事宜才行哦~简单来说就是得先把它们也给提前做好相应的适配转换处理才行呢~具体做法如下所示[^5]: 1. 获取最新版wiringPi源码资料; 2. 修改其内部makefiles使之兼容新的build system rules; 3. 利用刚才提到过的那些cross-compilation flags重新生成符合target platform requirements的新形式output binaries. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值