LINUX 移植流程(常识)

linux 内核包含七大子系统

1、内存管理子系统

负责寻找空闲的虚拟地址 和 物理地址进行映射 一旦系统启动 程序都是面想虚拟地址编程 。寄存器地址指针 操作物理地址的方式将不复存在。
如果没有操作系统,内存是需要程序自己来管理的。譬如在uboot中要使用内存的哪里是自己随便用的,没有注册也没有限制。这时候如果程序自己不小心把同一块内存重复用了就会出现程序逻辑错误。系统大了之后(内存多了)内存管理非常麻烦;有了操作系统之后,操作系统负责管控所有的内存,所有的应用程序需要使用内存时都要向操作系统去申请和注册,由操作系统的内存管理模块来分配内存给你使用,这样好处是可以保证内存使用不会冲突

2、进程管理子系统

负责多进程多任务处理 提高 CPU的处理能力 ,宏观上的并行就是操作系统提供的分时复用机制,提高 CPU的使用率和即时处理能力,完成每个进程的。
调度管理,销毁,PCB资源记录。 进程就是人 PCB就是户口本,对每个人进行管理。
操作系统下支持多个应用程序同时运行(所以可以一边聊QQ一边看电影···),这是宏观上的并行。实际上在单核心CPU上微观上是不能并行的,宏观上的并行就是操作系统提供的分时复用机制。操作系统的进程调度模块负责在各个进程之间进行切换。

3、设备管理系统

负责 和 每个硬件 设备进行 通过通信交互的 接口 ,它将以 文件 的方式 ,被用户程序进行访问。
没有操作系统时要控制任何硬件都要自己写代码,有了操作系统后操作系统本身会去控制各个硬件,应用程序就不用考虑硬件的具体细节了。操作系统的硬件设备管理模块就是驱动模块。

4、网络管理系统

负责 网络协议栈 网络设备的 管理,通过它能和 其他计算机 设备进行 通信。牛不牛逼。

5、文件管理系统

将系统里的一切静态存放的东西 抽象成目录 和 文件的方式 可以被用户直观的进行 交互。
文件系统是管理存储设备的一种方式。存储设备是由很多个扇区组成的,每个扇区有512/1024/2048/4096字节,存储设备要以扇区为单位进行读写。如果没有文件系统,程序要自己去读写扇区,就得记得哪个文件在哪个扇区。有了文件系统之后我们人不用再关注扇区,人只用关注文件系统中的目录和文件名,而不用管这个文件在物理磁盘的哪个扇区。

6、系统调用

提供用户层与 linux 内核交互的接口,也是和系统交互的唯一方式,没有之一。

7、平台相关

支持芯片架构相关 多种不同的硬件架构。


linux 内核编译流程

  • 修改源码目录
    目录根据个人需求看是否修改
  • 修改顶层 Makefile 里面的 ARCH 和 CROSS_COMPILE
    根据所编的目标平台所支持芯片架构、编译器的选择
    ARCH=${chip} 
    CROSS_COMPILE=${编译器}
    
  • make clean
    清理一下linux 内核之前的文件
  • 配置 Linux 内核
    添加模块、创建或添加设备树、添加驱动等操作,对于刚开始的做移植的小伙伴来说,根据项目需求,结合开发板所需功能模块,修改相关文件,来实现具体的功能
    修改设备树文件、添加驱动程序、修改编译文件都是有迹可寻。使用自己称手的文档编辑工具编辑文档,编辑之前可将原始文件备份。
    修改设备树:
es8326-sound {
status = "okay";
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";  //set data type
simple-audio-card,name = "rockchip-es8326";  //card name
simple-audio-card,mclk-fs = <256>;  //void signal
// sound part
simple-audio-card,widgets =
        "Microphone", "Microphone Jack",
        "Headphone", "Headphone Jack";
simple-audio-card,routing =
        "Microphone Jack", "MICBIAS1",
        "MIC1", "Microphone Jack",
        "Headphone Jack", "HPOL",
        "Headphone Jack", "HPOR";
// set dai
simple-audio-card,cpu {
        sound-dai = <&i2s3_2ch>;
};
//set codec
simple-audio-card,codec {
        sound-dai = <&es8326>;
};
};
  • 编译内核
    以下的编译指令在内核所在目录下执行
    make ARCH=arm64 rk3568_adv_defconfig -j8
    make ARCH=arm64 rk3568-rom5880-a1.img -j12
    
  • 编译输出文件
    将编译出来的boot.img镜像文件通过dd命令替换系统中镜像(镜像烧录方式之一)
    dd if=boot.img of=/dev/mmcblk0p3
    
    dd命令使用详情

移植目标板(uboot移植)

uboot概述

  • uboot是一个裸机程序,比较复杂。我们需要先将其编译生成bin文件,然后添加头文件,然后将其烧写进去,最后通过他来启动Linux。
  • uboot就是一个bootloader(启动加载器),作用就是用于启动Linux或其他系统和初始化DDR。
    • uboot首先初始化ddr,然后将Linux镜像zImage(uImage)+设备树(.dtb)搬运到DDR中,然后启动起来。启动起来以后他就寿终正寝了,把CPU的使用权交给Linux系统。
    • 因为Linux是运行在DDR里面的。一般Linux镜像zImage(uImage)+设备树(.dtb)存放在SD、EMMC、NAND、SPI FLASH等等外置存储区域。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值