300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 树莓派-linux内核编译

树莓派-linux内核编译

时间:2024-05-10 01:36:19

相关推荐

树莓派-linux内核编译

树莓派-linux内核编译

装虚拟机[^1]配置共享文件夹配置交叉编译工具下载树莓派linux系统内核[^3]树莓派等芯片带操作系统的启动过程树莓派linux源码目录树树莓派linux源码配置配置树莓派linux的内核[^5]编译拷贝内核文件到SD内存卡

装虚拟机1

用于生成一个放linux系统2的虚拟硬件设备

配置共享文件夹

linux的共享文件夹路径

/mnt/hgfs/linux-gongxiang

配置交叉编译工具

因为有时,有的平台刚开始是没有能编译的环境,有的是没有办法配置编译环境,所以就需要交叉编译

1、cp /mnt/hgfs/linux-gongxiang/tools-master.zip .

从共享文件夹复制下载的交叉编译工具链压缩包,到当前文件夹下

2、unzip tools-master.zip

解压文件tools-master.zip

3、vi /home/yang/.bashrc

打开要修改的配置文件

4、在文件最后一行加入配置的环境变量

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/yangyingchun/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

或者

export PATH=$PATH:/home/yangyingchun/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

5、source /home/yang/.bashrc

加载这个配置文件,使其马上生效

6、arm-linux-gnueabihf-gcc -v

查看交叉编译工具链的版本

下载树莓派linux系统内核3

许多操作系统可用于 Raspberry Pi,包括 Raspberry Pi OS、树莓派官方4支持的操作系统以及来自其他组织的操作系统。

1、cp /mnt/hgfs/linux-gongxiang/linux-rpi-4.14.y.zip .

从共享文件夹复制下载的树莓派系统内核压缩包,到当前文件夹下

2、unzip linux-rpi-4.14.y.zip

解压树莓派系统

树莓派等芯片带操作系统的启动过程

C51、STM32(裸机的状态下是没有BIOS以后的东西)这些芯片是单纯的C语言直接操控底层寄存器实现相关业务

遥控灯:while(1)一直检测用户是否按下了某个按键,给出对应的反应

垃圾桶:WemosD1 LOOP循环

恩智浦智能车:STM32

x86、Intel、windows

启动过程:电源——>BIOS——>windows内核——>C盘,E盘——>程序启动(QQ、微信、钉钉)

嵌入式产品:树莓派,mini2440,mini6410,nanopi,海思,RK(瑞芯微)

启动过程:电源——>BootLoader(引导操作系统启动)——>linux内核——>文件系统(根据功能来组织分隔存放对应内容的文件夹,带访问权限)——>KTV点歌机,人脸识别打卡器,智能家居主控……

安卓

启动过程:电源——>fastBoot/BootLoader——>linux内核——>文件系统——>虚拟机——>HOME应用程序——>靠点击应用程序图标来打开某APP

BootLoader

1、需要处理CPU跟内存,FLASH,串口,IIC,IIS,数据段,这些东西之间的沟通,就需要驱动这些设备(汇编和C语言结合)

2、引导linux内核启动(纯C语言)

树莓派linux源码目录树

tree 查看文件夹的整个文件的目录树,会把当前文件夹下的所有文件以树状结构展示

linux-rpi-4.14.y内核:5549个目录,76482个文件

1、linux是一个开源的,支持多架构,多平台代码,可移植性非常强,非常厉害。

2、linux内核编译出来一般,就几MBit大小,原因是在整个linux内核中只用抽取需要编译的平台,需要的架构的那部分代码去编译,所以就做到了轻量化,可移植性强

3、因为支持多平台,多架构,所以编译之前需要配置,配置成适合目标平台的架构来用

现有的架构:

ARM(海思,友善之臂、RK、树莓派、nanoPi)、X86、PowerPC、MIPS

**arch:**放硬件架构,平台相关的代码,X86,ARM等

重要的包括kernel(内核核心部分)、mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。

block

crypto

Documentation

drivers

fs

include

init

ipc

kernel:内核核心

lib

mm

net

scripts

security

sound

usr

树莓派linux源码配置

驱动代码的编写:

驱动代码的编译需要一个提前编译好的内核

编译内核就需要配置内核里需要的内容

配置好后会生成一个 .config文件,该文件指导Makefile去把需要的东西组织成内核

配置方法:

一般芯片厂家会提供linux内核源码,比如树莓派linux源码

第一种:

复制厂家提供的.config文件

第二种:

make menuconfig 一项项配置,通常是基于厂家的config来配置

第三种:

完全自己来弄

配置树莓派linux的内核5

1、获取交叉编译工具

2、获取linux源码

3、配置环境变量

4、用厂家提供的配置config编译内核

使用源码里自带的config配置文件:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfigARCH=arm 指定ARM架构CROSS_COMPILE=arm-linux-gnueabihf- 指定编译器KERNEL=kernel7 树莓派内核make bcm2709_defconfig make为配置命令

获取当前树莓派的config

已经开机的树莓派上会有这个节点:/proc/config.gz,从这个节点可以获取本树莓派的config。

如果没有这个节点的话则需要先加载模块:sudo modprobe configs

把 config.gz 内容复制到要编译的电脑上:

scp pi@[ip]:/proc/config.gz .

解压,保存为.confg文件。

zcat config.gz > .config

注:必须在linux环境下解压,在mac下会乱码。

把此config文件复制到linux源码的根目录。

编译

安装必要的库:

sudo apt-get install bc

sudo apt-get install libncurses5-dev libncursesw5-dev

sudo apt-get install zlib1g:i386

sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5

1、执行menuconfig

用工具界面配置config配置文件

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

剪切,更改内核一些内容,如果没什么改的就不用执行这一步。

驱动的两种加载方式:

[ * ] * 代表Y,编译进内核 zImage文件包含了驱动

[ M ] 模块的方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载驱动

2、编译

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs命令:make -j4 zImage modules dtbs-j4 用多少电脑资源进行编译zImage 生成内核镜像modules 要生成的驱动模块dtbs 要生成的配置文件

查看是否编译成功:

1、看编译是否出错

2、源码目录树文件是否生成 vmlinux 文件,有就成功,失败则无此文件

3、linux-rpi-4.14.y/arch/arm/boot 查看此内核文件路径下 zImage 内核镜像文件的生成

3、打包zImage文件

打包 zImage 内核镜像文件为xxx.img

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

拷贝内核文件到SD内存卡

dmesg 查看打印内核的一些信息

把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:

一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;

一个是ext4分区,也就是系统的根目录分区。

1、数据拷贝

mkdir data1 data2

挂载U盘

sudo mount /dev/sdb1 data1 挂载U盘里sdb1文件分区到当前目录data1文件夹,fat分区

sudo mount /dev/sdb2 data2 挂载U盘里sdb2文件分区到当前目录data2文件夹,ext4分区

2、安装modules,设备驱动文件,HDMI,USB,wifi,IO …

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

操作ext4分区,需要root权限。

3、更新 kernel.img 文件,注意镜像文件名称为:kernel7.img

避免新内核出错,所以需要先备份一下以前的内核

cd /home/yang/data1

cp kernel7.img kernel7OLD.img

在把新编译的内核拷贝到data1文件夹下

cp kernel_new.img /home/yang/data1/kernel7.img

du kernel7.img 查看文件大小

du kernel7.img -h 查看文件大小,结果按kb,M显示

md5sum kernel7.img 查看文件独有的文件编码

4、其它配置文件拷贝

cp arch/arm/boot/dts/.*dtb * /home/yang/data1

cp arch/arm/boot/dts/overlays/.*dtb * /home/yang/data1/overlays

cp arch/arm/boot/dts/overlays/README /home/yang/data1/overlays/

更新完成后插回树莓派即可开机,开机后可以用 uname -a 命令查看kernel信息已经改变

uname -r 查看内核版本

删除挂载到linux的文件夹

fuser -km 文件夹

sudo umount 文件夹

rm -rf 文件夹

VMware虚拟机 ↩︎

Ubuntu-linux系统 ↩︎

树莓派系统内核下载 ↩︎

树莓派官网 ↩︎

树莓派内核开发参考 ↩︎

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。