Linux内核基础知识

1.arm设备的启动过程

x86、Interl windows

  • 启动过程: 电源 ---- >BIOS----->windows内核 --->文件系统(C盘、D盘) ---->应用程序启动
  • 嵌入式产品: 树莓派、mini2440、manopi、海思、RK(瑞芯微)等
  • 启动过程: 电源-->bootloader (引导操作系统启动) -->linux内核--->文件系统(根据功能组织文件夹) --->应用
  • 安卓的启动过程: 电源---->bootloader/FastBoot--->inux内核---.>文件系统--->虚拟机--->Home应用程序C51/32启动过程: start启动文件--->应用程序
  • bootloader: 一段裸机代码,cpu、内存、flash、串口、数据段、驱动 (汇编和C语言)

2.linux内核源码分析

  1. 是开源、免费,linux开源社区工作者共同维护
  2. linux内核大概1.3万个文件,但是linux编译出来就几M
  3. Linux是一个开源,支持多架构的多平台代码,可执行非常高
  4. 支持多平台多架构,编译之前需要配置出适合的目标平台
  5. ARM: 海思: 树莓派、nanopi、2440; x86;PowerPC

3.linux内核源码配置

驱动代码的编写,必须要一个配置编译好的内核

配置的最终目标会生成 .config 文件 ,这个文件会指导makefile把需要用到的东西组织成内核

  • 第一种方式,厂家配了linux内核源码,cp厂家的.config   / find . -name *_defconfig
  • 第二种方式,make menuconfig 一项一项配置,基于厂家提供的config来配置
  • 第三种方式,完全自己手动配置

如何配置树莓派的Linux内核

1.ubuntu交叉编译环境的搭建

  • 获取交叉编译工具和源码
  • 手动配置环境变量

2.配置config

树莓派1是bcmrpi_defconfig,树莓派2、3工程是bcm2709_defconfig

使用源码自带的config:ARCH=arm CROSS_COMPILE=arm-linux-gnueablhf-KERNEL=kernel7 make bcm2709_defconfig 此命令功能是获取bcm2709_defconfig的配置到 .config里

驱动两种方式加载

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

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

4.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

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

5.2 编译成功后,看到源码树目录多了vmlinux,失败则无此文件
            成功后,目标zImage镜像arch/arm/boot底下

5.3 打包zImage成树莓派可用的xxx.img
            ./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

5.4 数据拷贝

(1)挂载U盘

        mkdir data1 data2

        sudo mount /dev/sdb1 data1   一个fat分区,是boot相关的内容,kernel的img

        sudo mount /dev/sdb2 data2   一个是ext4分区,也就是系统的根目录分区。

(2 )安装modules, 设备驱动文件: hdmi usb wifi io 等等

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

(3)安装更新 kernel.img 文件,注意镜像名字是kernel7.img

        先备份

        cd /home/zgl/data1

        cp kernel7.img kernel7OLD.img

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

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

  (4)复制其他相关文件

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

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

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

最后将Linux内核镜像拷贝至树莓派并启动新内核

猜你喜欢

转载自blog.csdn.net/m0_74712453/article/details/132655024