1、建议边看视频边跟着教程走

https://www.bilibili.com/video/av91990721?zw

2、准备工作

下载官方提供的交叉编译工具链
git clone https://github.com/raspberrypi/tools 使用vim工具编辑系统环境变量工具,将交叉编译工具链添加到系统的环境变量,vim工具教程请到菜鸟教程官网学习。
sudo vim /etc/bash.bashrc 请按照以下格式添加到最后一行,编译器路径仅供参考,请根据自己的路径来添加,编译32位系统请使用arm-linux-gnueabihf编译器。
export PATH=$PATH:/home/pi/toolchain/toolsraspi/arm-bcm2708/arm-linux-gnueabihf/bin/ 更新环境变量,使之立刻生效。
source /etc/bash.bashrc 测试交叉编译器,添加成功后输入以下命令将会出现gcc的版本信息。交叉编译器的名称和你实际添加的编译器名称对应。
arm-linux-gnueabihf-gcc -v 安装编译的必备软件。
sudo apt update
sudo apt install bc make bison flex libncurses-dev ctags python-sphinx -y

3、编译内核

进入内核源码顶层目录,具体路径看实际情况
cd linux 查看帮助,本步骤可忽略
make help 清理工程,清理编译生成的二进制文件以及各种配置文件,防止出错
make distclean 生成32位.config 板级配置,不同树莓派板子设定值不同
树莓派1, Pi Zero, Pi Zero W使用以下命令
KERNEL=kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig 树莓派2, Pi 3, Pi 3+,CM3使用以下命令
KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig 树莓派4使用以下命令
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig 编译32位内核、内核模块、设备树,生成内核压缩镜像
make ARmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs 多线程编译可以在make 传参中加入 -j8,数字代表编译程序将使用多少个线程,这里建议设置为cpu逻辑处理器的1.5倍,如我使用的amd 处理器为6核心12线程,那么可以使用-j18。 在内核顶层目录下创建一个文件夹
mkdir modules_install 拷贝编译生成的内核模块到modules_install文件夹
make modules_install ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-INSTALL_MOD_PATH=./modules_install 拷贝编译生成的设备树文件到modules_install文件夹
make dtbs_install ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_DTBS_PATH=./modules_install 使用工程自带的脚本将编译出来的压缩镜像转换成可树莓派启动的镜像文件
./scripts/mkknlimg ./arch/arm/boot/zImage ./kernel.img 将编译生成的文件拷贝到SD卡
树莓派的sd卡存在两个分区,可以通过 lsblk 查看
sdb
|-sdb1 (第一个一般是rootfs分区)
|-sdb2 (第二个一般是boot分区) 这里提示以下,如何找到U盘在Linux下的路径。一般ubuntu会将U盘自动挂载到
/media/usrname/ 下面,以下所有命令的路径都仅供参考,具体路径请按照自己实际情况来。 备份boot分区中的文件
mv /media/pi/boot/kernel.img /media/pi/boot/kernel.img.bak
mv /media/pi/boot/overlays /media/pi/boot/overlays.bak 拷贝编译生成的文件到SD卡
cp ./kernel.img /media/pi/boot/
cp -r ./modules_install/overlays /media/pi/boot/
cp ./modules_install/*.dtb /media/pi/boot/
sudo cp -r ./modules_install/lib /media/pi/rootfs/ 关于uboot启动阶段: 阶段1:汇编阶段
1> 构建异常向量表
2> 切换到svc模式,禁止看门狗
3> 关闭MMU和icache
4> 清除bss段,完成uboot代码到内存的自搬移
5> 初始化栈
阶段2:C语言阶段
1> 完成对gd(global data)结构体的初始化
2> 完成大部分硬件的初始化(串口\网卡\flash\电源\使能中断)
3> 根据用户命令或者预设命令,切换进入自启动模式或交互模式
4> 执行bootcmd中的命令参数
5> 将bootargs中的参数传递给内核 内核源码顶层目录简介:
--------------------------------------------------------------------------------
| arch |架构和设备树 | block | 块 |
| certs |证书 | crypto | 加解密子系统 |
| Documentation |文档 | drivers | 驱动 |
| firmware |固件 | fs | 文件系统 |
| include |头文件 | init | 初始化 |
| ipc |进程 | kernel | 内核 |
| lib |库 | LICENSES | 许可证 |
| mm |内存 |
| net |网络 | samples | 案例 |
| scripts |脚本 | security | 安全 |
| sound |声卡 | tools | 工具 |
| usr |用户 | virt | 虚拟机 |
-------------------------------------------------------------------------------- 遇到错误:
scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: No such file or directory
原因:主机没有安装libssl-dev,安装即可$sudo apt-get install libssl-dev

树莓派Zero W成功运行编译好的内核并查看版本

参考文档:
1、Ubuntu 16.04 (x64)下从源代码为Raspberry Pi Zero W编译实时内核
2、Kernel building

由于服务器带宽和流量有限,交叉编译器和内核源码采用百度网盘分享。
链接: https://pan.baidu.com/s/1wFUDr5xIDtolbsVTex-B3w 提取码: nrua

编译树莓派Linux内核的更多相关文章

  1. linux内核系列(一)编译安装Linux内核 2.6.18

    1.配置环境 操作系统:CentOS 5.2 下载linux-2.6.18版本的内核,网址:http://www.kernel.org 说明:该编译文档适合2.6.18以上的Linux内核版本,只需所 ...

  2. 【转】6.4.6 将驱动编译进Linux内核进行测试

    原文网址:http://www.apkbus.com/android-98520-1-1.html 前面几节都是将Linux驱动编译成模块,然后动态装载进行测试.动态装载驱动模块不会随着Android ...

  3. 将MPLS编译进linux内核中

    系统环境:linux kernel 2.6.35.(此环境是上一篇文章中将ubuntu内核替换后的环境) 编译过程如下: 1)首先需要下载patch文件:linux-kernel-v2.6.35-mp ...

  4. 编译安装linux内核步骤

    编译安装linux内核步骤: 一.获取内核源码 源码网址:www.kernel.org 二.解压内核源码 首先以root帐号登录,然后进入/usr/src子目录.如果用户在安装Linux时,安装了内核 ...

  5. 将驱动编译进Linux内核

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  6. 如何编译安装Linux内核

    操作系统环境 VMware workstation15 Pro ubuntu18.04 LTS 待编译内核5.3.10版本 内核下载地址 kernel.org 环境配置 在正式编译前需要安装部分软件. ...

  7. 编译aarch64 Linux内核并基于qemu运行

    核心流程 首先,本文主要讲述如何编译Linux内核并在qemu虚拟机上运行.这里针对的架构是aarch64. 本文的实验平台是Ubuntu 16.04. 为了达成目标,我们需要有qemu.buildr ...

  8. 编译x86_64 Linux内核并基于QEMU运行

    编译并运行内核镜像 安装包准备 $ sudo apt install git $ sudo apt install build-essential kernel-package fakeroot li ...

  9. 编译最新linux内核(version 4.4.2)

    环境:centos6.4 内核版本为2.6.32 目标:编译4.4.2内核,升级到 4.4.2 准备工作: 安装开发库和ncurses库 # yum groupinstall "Develo ...

  10. Linux课程实践二:编译模块实现内核数据操控

    一.内核模块原理 1. Linux内核增加功能 Linux内核整体结构很庞大,包含了很多的组件,现在有两种方法将需要的功能包含进内核当中: - 静态加载:将所有的功能都编译进Linux内核. - 动态 ...

随机推荐

  1. .NET使用Moq开源模拟库简化单元测试

    前言 今天大姚给大家推荐一个.NET开源.流行.使用简单的.NET模拟库:Moq. Moq类库介绍 Moq是一个.NET开源.流行.使用简单的 .NET 模拟库,充分利用了.NET 的 Linq 表达 ...

  2. 『玩转Streamlit』--文本与标题组件

    本篇准备开始介绍Streamlit的组件. Streamlit的组件非常多,后续几篇打算按照用途的分类,介绍每个分类中最常用的组件. 本次从最简单的组件开始,介绍文本和标题相关的组件,也就是以下4个组 ...

  3. 用Python创建一个简单的Web服务器

    基本思路: 在浏览器地址栏通过输入本机地址:http://127.0.0.1:8000 能够访问我们自己创建的Web服务器,并且给浏览器返回一句Hello World 代码实现: 1 import s ...

  4. 轻松上云怎么操作?IoT_CLOUD之中移OneNET

    ​  最近来了很多新朋友,也经常被问:可以多讲些云平台的操作吗?当然可以!文末留言你想要了解的云平台,优先安排~ 接下来,本文将以Air780E+LuatOS作为示例,教你使用合宙IoT_CLOUD连 ...

  5. 十分钟配置完成Go开发环境

    本文介绍了GO环境搭建以及GOPATH.GOROOT等基本概念,希望让你少走弯路 SDK下载 如果要使用Golang,我们首先要安装Golang的SDK开发包 Golang是网友给Go语言起的另一个称 ...

  6. Impala学习--Impala概述,Impala系统架构

    Imapla概述 Impala是Cloudera公司的一个实时海量查询产品.是对于已有Hive产品的补充.Impala采用了和Hive相同的类SQL接口,但并没有采用MapRed框架执行任务,而是采用 ...

  7. Windows之注册表

    1. Windows注册表简介 Windows操作系统中的注册表(Registry)是一个重要的系统数据库,用于存储系统和应用程序的配置信息.在本章中,我们将介绍Windows注册表的基本概念.作用和 ...

  8. Python消息队列之Huey

    缘起: 之前在Python中使用最多的就是Celery, 同样的在这次项目中使用了Celery+eventlet的方式,但是由于具体执行的逻辑是使用的异步编写的, 当时就出现了一个问题,当使用http ...

  9. README.md书写范例

    具体参考: https://learnku.com/docs/laravel-specification/5.5/readme-examplemd/523

  10. JPEG格式研究——(1)压缩原理及流程

    之前一直很好奇图片和视频是如何压缩的,由于视频格式会更复杂,所以先从JPEG下手 因为网上资料太难找太分散,有些又看不太懂,所以根据自己的理解整理了一下 JPEG简介 JPEG(Joint Photo ...