树莓派内核开发

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

1.X86,Intel   windows
        启动过程:  电源 -》 BIOS -》windows内核-》C,D盘-》 程序启动(QQ)

2.嵌入式产品: 树莓派,mini2440, mini6410,nanopi,海思,RK(瑞芯微)------人脸识别打卡器,智能家居主控。。。
        启动过程:  电源-》BootLoader(引导操作系统启动)-》Linux内核-》文件系统(根据功能性来组织文件夹,带访问权限)-》KTV点歌机,
    
3.安卓
        启动过程:  电源-》 fastBoot/Bootloader/-》linux内核-》文件系统-》虚拟机-》HOME应用程序-》点某图标打开某APP

什么是BootLoader:一阶段 让CPU  跟内存,FLASH, 串口,IIC,IIS, 数据段,打交道,驱动这些设备(汇编和C结合)
                                二阶段: 引导Linux内核启动 (纯C)

二.树莓派Linux源码目录树分析

参考:https://www.cnblogs.com/senior-engineer/p/4929703.html

大约有1.3w个C文件,几千万行代码,Linux是开源免费的,由Linux开源社区工作者共同维护;而且是多架构多平台代码,可执行度很高;由于支持多平台,多架构,所以在编译之前要配置,配置成适合的目标平台使用。

三.树莓派 Linux 源码配置

参考:树莓派-内核开发-说明 下载代码 编译 替换内核_nicekwell的博客-CSDN博客_树莓派内核开发

驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置,配置的最终目的会生成 .config 文件,该文件指导 Makefile 把有用的东西组织成内核。

配置内核源码的几种情况

第一种:厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码,cp 厂家.config .config

内核配置指令:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
指定ARM架构       指定编译器                      树莓派          主要核心指令

此命令功能是获取bcm2709_defconfig的配置到 .config里。

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

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

会有一个基于ncurses库的图形界面:

选项前的*和M是啥意思 

驱动两种加载方式:
                * 编译进内核  zImage包含了驱动
                M 模块方式生成驱动文件xxx.ko  系统启动后,通过命令inmosd xxx.ko 加载

M和*可以通过按空格切换。

第三种:完全自己来(难)

四.树莓派linux内核编译:

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

-jx指定用多少电脑资源进行编译
zImage生成内核镜像
modules要生成驱动模块
dtbs生成配置文件

打包zImage文件:

目标zImage镜像在arch/arm/boot底下

打包zImage成树莓派可用的xxx.img

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

在本目录生成一个kernel_new.img文件,这个文件就是要放到sd卡中的文件。

五、挂载树莓派sd卡,并安装编译出的DIRECTLY 到sd卡

1.使用dmesg查看设备

 有sdb1和sdb2

创建两个文件夹: data1 和 data2

将sdb1挂载到data1,sdb2挂载到data2

2.挂载u盘,使用指令:

sudo mount /dev/sdb1 data1

 把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:
一个fat(咱的data1)分区,是boot相关的内容,kernel的img文件就放在这个分区里,不需要root
一个是ext4分区(咱的data2),也就是系统的根目录分区,需要root

3.安装modules,设备驱动文件: hdmi usb wifi io ...

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

操作ext4(咱的data2)分区,需要root权限。

4.安装更新 kernel.img 文件,注意镜像名字是kernel7.img
                先备份

cd /home/chenlc/data1
cp kernel7.img kernel7OLD.img

再把编译新生成的拷贝到data1,起名kernel7.img

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

使用md5sum检查拷贝过去的文件是否正常:

md5sum kernel_new.img

5.复制其他相关文件:

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

.和*之间是通配

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值