目录

  • 一、树莓派Linux源码配置(适合树莓派)
    • 总体概述
    • 配置的三种方式
      • 1.照搬厂家的配置(使用这种方式)
      • 2.参考厂家的配置(感受一下)
      • 3.完全自主配置(需要一定工作经验)
  • 二、树莓派Linux内核编译
  • 三、树莓派挂载新内核
    • 总体概述
    • 1.打包zImage文件成kernel_new.img(用linux源码包里的工具)
    • 2.树莓派sd卡挂载到ubuntu上(两个分区:boot kernal/根文件)
    • 3.安装modules
    • 4.拷贝新kernel.img文件
    • 5.拷贝其他文件到fat
  • 四、在树莓派上运行
    • 1.用window配置sd卡文件方便观看启动过程
    • 2.sd卡插回树莓派
    • 3.打开secureCRT 串口方式登陆树莓派

一、树莓派Linux源码配置(适合树莓派)

总体概述

配置的三种方式

参照博文(一般厂家会给到这样的操作手册,没有就凉凉了,玩不了):http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan-nei-he.html

前提:交叉编译工具要先安装好,在我的博文树莓派内核开发准备第一节有讲到。因为内核配置全部在宿主机ubuntu下完成的,必须要有交叉编译工具。

1.照搬厂家的配置(使用这种方式)

在内核源码目录文件下搜索厂家配置文件(此步骤作为了解)
可以找到树莓派3、树莓派4使用的厂家配置文件bcm2709_defconfig

find . -name *_defconfig

  • 执行命令
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

注意:这个命令要在路径/linux-rpi-4.14.y(存放的源码目录文件)下执行,否则提示 “make: *** 没有规则可制作目标“bcm2709_defconfig”。

  • 执行结果
    可以发现 厂家config 变成了 .config

2.参考厂家的配置(感受一下)

基于厂家的config,用make menuconfig一项项配置,通常需要自主增删一些驱动

首先要安装必要的库

  • 系统自带,一般都有
sudo apt-get install bc
  • 必须
sudo apt-get install libncurses5-dev libncursesw5-dev
  • 必须
sudo apt-get install zlib1g:i386
  • ↓ 若这一步提示“E: 无法定位软件包 lib32ncurses5”可以先留着不做
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5

执行menuconfig

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig

可以看到以下界面


回车 selects submenus 进入子菜单带—>的
[ ]表示略过的,不参与编译
空格键切换状态

驱动的两种加载方式:

  • [*] built-in:表示编译进了内核,zImage包含了驱动。
  • [M] modularizes:表示以模块的方式生成驱动文件xxx.ko。系统启动后,通过命令inmosd xxx.ko临时加载(后面的驱动就是这么进行的)

3.完全自主配置(需要一定工作经验)

可以工作2-3年后在涉猎。

二、树莓派Linux内核编译

编译指令:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

是否成功编译?

可以看到在内核的源码树目录下生成了vmlinux(没有压缩的linux)即为成功。

而我们真正想要的目标镜像是/arch/arm/boot/zImage

三、树莓派挂载新内核

总体概述

1.打包zImage文件成kernel_new.img(用linux源码包里的工具)

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

树莓派的镜像文件结尾就是.img,这个文件就是要放到sd卡中的文件

2.树莓派sd卡挂载到ubuntu上(两个分区:boot kernal/根文件)

树莓派断电,把SD卡插入读卡器后按照下图配置

查看内核信息,有设备接入的时候内核会打印出驱动层面的信息。

dmesg

接入成功!

sdb1,2分别是树莓派sd卡的两个分区
①一个fat分区。是boot相关的内容,kernel的img文件在此分区。
②一个是ext4分区,也就是系统的根目录分区。(cd /进入的就是系统的根目录)

这里我在我的ubuntu桌面底下(/Desktop)新建两个文件夹

mkdir data1
mkdir data2

然后分别关联到sd卡的两个分区中(必须挂载到文件夹才能看到里面内容)

sudo mount /dev/sdb1 data1
sudo mount /dev/sdb2 data2

查看data1,2分别存放的是什么

可以看到data1为fat分区(boot、kernal相关),data2为ext4分区(系统根目录相关),要对应好。

老陈这里的boot用的之前刷机刷好的,没有重新进行移植,下面直接讲了内核的移植。

3.安装modules

modules就是内核驱动相关,少了这一步类似网卡,wifi,usb,HDMI这些都用不了

注意:操作的是ext4分区,对应的就是data2

来到linux-rpi-1.14.y文件路径下操作

安装modules的指令是:

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install

实际使用的时候要将“[ext4]”更改为自己data2的绝对路径 ,这里根据我自己的文件路径修改成:

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/zhugl/Desktop/data2 modules_install

可以看到很多的.ko文件,这与驱动相关。出现的提示make: arm-linux-gnueabihf-gcc: Command not found不用管它。

4.拷贝新kernel.img文件

注意查看原来镜像名字是kernel7.img

ls /home/zhugl/Desktop/data1


因为原来的这个kernel7.img将要被覆盖(树莓派镜像规定必须要定义成这个名字),为了防止刷机失败,或者拷贝过程中文件损坏,需要提前用别名备份这个文件。打开新的终端(ctrl alt t)(方便操作罢了),进入其存放路径(cd /home/zhugl/Desktop/data1)

sudo cp kernel7.img kernel7OLD.img

从源码树目录(linux-rpi-4.14.y)拷贝kernel_new.img(是由zImage打包而成)到data1并且命名为kernel7.img覆盖原来的文件

sudo cp kernel_new.img /home/zhugl/Desktop/data1/kernel7.img

检查拷贝是否有问题

md5sum显示文件的唯一编码号,若相同则为同一个文件

md5sum kernel_new.img
md5sum /home/zhugl/Desktop/data1/kernel7.img


编码号一样,拷贝正确。

5.拷贝其他文件到fat

都是从目录linux-rpi-4.14.y进行拷贝

这些配置文件是为了能够加载驱动以及一些其他的配置。

————————①

  • 更改前
cp arch/arm/boot/dts/.*dtb* [fat]/
  • 根据实际更改后
sudo cp arch/arm/boot/dts/.*dtb* /home/zhugl/Desktop/data1/

————————②

  • 更改前
cp arch/arm/boot/dts/overlays/.*dtb* [fat]/overlays/
  • 根据实际更改后
sudo cp arch/arm/boot/dts/overlays/.*dtb* /home/zhugl/Desktop/data1/overlays/

————————③

  • 更改前
    README有没有都行
cp arch/arm/boot/dts/overlays/README [fat]/overlays/
  • 根据实际更改后
sudo cp arch/arm/boot/dts/overlays/README /home/zhugl/Desktop/data1/overlays/

四、在树莓派上运行

1.用window配置sd卡文件方便观看启动过程

如果之前在做别的项目,例如串口编程时用于串口数据交互和传输会把这个配置信息删掉,这时需要添加回来,用来观察操作系统启动过程

点击选择断开连接sd卡,使其重新挂载在windows上。

打开sd卡中boot文件夹下的cmdline.txt

按照上图位置添加(直接在虚拟机上修改这个配置文件也可以)

console=ttyAMA0,115200

2.sd卡插回树莓派

sd卡插回树莓派,USB-TTL连接。注意树莓派要在断电下操作

3.打开secureCRT 串口方式登陆树莓派

树莓派重新上电,可以看到启动正常。

如何确定内核已经更换了呢?

查看内核版本号

uname -r

原来版本为4.14.98-v7

所以成功啦!

有意思的是,之前在上一个内核版本树莓派里编写的一些Demo文件都在!而且以前配置的SSH登录、固定IP地址配置都原样不动!所以内核新配置的那两个分区并没有改变以前的一些文件和配置,因为我们只是更新了kernal.img,Uboot和根文件系统都没改变。

树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核相关推荐

  1. Linux 内核模块ko在内核源码外部编译的方法

    前言 默认Linux 内核驱动,可以模块编译为 *.ko 文件,不编译进内核 默认开发Linux 内核驱动,驱动一般放在Linux 内核源码中,如 drivers 目录 本篇尝试在 Linux ker ...

  2. 树莓派Linux系统内核源码下载方式

    树莓派Linux系统内核源码下载方式(参考了rpi-source的wiki) 最近使用树莓派开发东西,买了个树莓派3B,然后去官网下载了img镜像烧写进去,由于需要用到内核源码,去/lib/modul ...

  3. v50.03 鸿蒙内核源码分析(编译环境) | 编译鸿蒙防掉坑指南 | 百篇博客分析HarmonyOS源码

    颜渊死.子曰:"噫!天丧予!天丧予!" <论语>:先进篇 百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 编译构建相关篇 ...

  4. v57.02 鸿蒙内核源码分析(编译过程) | 简单案例说透中间过程 | 百篇博客分析HarmonyOS源码

    子畏于匡,颜渊后.子曰:"吾以女为死矣."曰:"子在,回何敢死?" <论语>:先进篇 百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译 ...

  5. 如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能

    如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能 Hello,大家好!我是--邪恶君子! 今天,给大家分享一下解决源码包编译安装 LEMP 环境下开启 OpenSSL 功能问题的过程 ...

  6. linux源码编译安装lamp环境搭建,linux下源码包编译安装LAMP环境

    1.下载所需的源码包 Httpd-2.4.10  apr-1.5.1  apr-util-1.5.3  pcre-8.33(这些均可在Apache官网进行下载) Mysql-5.5.39    php ...

  7. linux下载源码并编译x264,x265并引用进FFmpeg

    x264源码下载地址:https://www.videolan.org/developers/x264.html x265源码下载地址:https://www.videolan.org/develop ...

  8. linux从源码编译软件,linux软件源码的编译安装

    软件包的组成: 1二进制文件/bin,/sbin /usr/bin ,/usr/sbin /usr/local/bin /usr/local/sbin 2库文件 /lib, /usr/lib /usr ...

  9. UNIX环境高级编程(第三版 源码及编译好的静态库文件)

    UNIX环境高级编程(第三版) 源码 及 库文件 链接: https://pan.baidu.com/s/1tPY17lWNDEbzkOwZaRUUNg 提取码: 1024 复制这段内容后打开百度网盘 ...

最新文章

  1. 迈向更高效通用的加速之路:谷歌提出视觉和多任务MoE方法
  2. 中秋祝福网页_中秋客户维系关怀,该送客户什么礼品?
  3. leetcode - 474. 一和零
  4. php mysql 持久化_PHP: mysqli 扩展和持久化连接 - Manual
  5. 指针常量、常量指针和常量指针常量
  6. python怎么读取excel-python怎么读取excel中的数值
  7. SharePoint 2010中增强的错误跟踪机制
  8. 实验二 OpenGL的简单动画
  9. linux scp传输文件权限被拒绝,Linux的远程传输文件scp及出现Permission denied (publickey).lost connection问题解决方法-Go语言中文社区...
  10. 如何用示波器测量输出阻抗
  11. mysql数据库首次查询缓慢
  12. linux下载tkinter模块,Linux升级Python提示Tkinter模块找不到解决
  13. 基于 Servlet + jsp 的企业财务管理系统设计与实现
  14. Python三方微博登录
  15. 最新zotero与obsidian笔记联动教程(可代替citations和mdnotes)
  16. Apollo配置中心使用篇
  17. 中专计算机学籍分数,中考成绩不理想,有高中录取却说给办中专学籍,这有什么不同吗?...
  18. python:计算股票 CAPM
  19. <数据结构>创建一个有理数类
  20. 无监督分类的4种方法

热门文章

  1. T24412 Cup#182-3 洞穴之旅
  2. 大数据开发实战:数据流图及相关数据技术
  3. Java使用原子类进行多线程的 i++ 操作示例
  4. 《 Python树莓派编程》——2.7 总结
  5. 基本数据类型的自动装箱
  6. 一个简单粗暴的前后端分离方案
  7. intellij idea 热部署 spring jvm 版
  8. PPT图片内嵌文字效果
  9. 圆环划痕检测halcon
  10. Texture Inspection 纹理检验halcon算子,持续更新