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. docker login 私有仓库时报错

    连接私有harbor报错如下: docker login 192.168.1.88 -uadmin -pHarbor12345 WARNING! Using --password via the CL ...

  2. Python网络爬虫第一弹

    03.Python网络爬虫第一弹<Python网络爬虫相关基础概念> 爬虫介绍 引入 之前在授课过程中,好多同学都问过我这样的一个问题:为什么要学习爬虫,学习爬虫能够为我们以后的发展带来那 ...

  3. vue中使用elementUI的全选表格,点击全选,选中子表格的checkbox

    效果图如下: 由于elementUI提供的表格没办法满足需求,我就在elementUI表格的基础上又做了一些改动 首先,全选的checkbox不是表格自带的,是自己加上去的,子表格中的checkbox ...

  4. 负载测试工具之Fortio

    github: github.com/fortio/fortio 日常开发中通常需要知道系统能承受的最大负载,不满足当前需求时对系统软硬件进行相应的优化或升级.今天推荐的工具 Fortio 就是用来测 ...

  5. 从Hbase shell理解列式存储

    列存储和行存储在理解上的差别挺大,特别是在非常数据行存储之后. 在行存储中,每张表的结构是固定的,某一列可以没有值但是这一列是必须在的.那么可以理解行存储的数据是结构化的. 但是列存储确有每行的数据却 ...

  6. 开源 - Ideal库 - Excel帮助类,设计思路(一)

    今天开始和大家分享关于Excel最长常用操作封装. 01.起因 市面上有很多Excel操作库,这些库设计之初的目标是提供对Excel的各种操作功能,包括数据.样式.公式.图表等等.而对于我们平时开发来 ...

  7. CSS 样式百分比

    1.宽高百分比 元素宽度/高度百分比是基于父级元素的width/height,不包含padding,border 注意:高度百分比一定要求父元素有设置height属性,只设置 min-height 虽 ...

  8. GPUStack v0.4:文生图模型、语音模型、推理引擎版本管理、离线支持和部署本地模型

    GPUStack 是一个专为运行 AI 模型设计的开源 GPU 集群管理器,致力于支持基于任何品牌的异构 GPU 构建统一管理的算力集群.无论这些 GPU 运行在 Apple Mac.Windows ...

  9. 前端每日一知之css隐藏页面元素

    脑图在线链接 本文内容依据[js每日一题]公众号精彩文章总结而来

  10. docker-compose的nginx更换完ssl证书不起作用的完美解决方法

    ​以Harbor为例,ssl证书更新后,docker-compose启动不起作用. 问题出在一句很重要的命令:./prepare 步骤:(Harbor样例) 1. cd /data/ssl 换ssl证 ...