Linux驱动开发入门基础

1.系统运行所需4大组件

uboot、kernel(即内核)、设备树dtb、根文件系统。

Uboot(下载模式和启动模式)

  • Uboot是一个bootloader(注意发音low),一个比较复杂的裸机程序,为系统的启动做准备,主要完成DDR、FLASH的初始化。
  • 用来启动linux或其它系统,linux一般是运行在DDR的,所以要将存放在SD/EMMC/NANDFLASH的zImage,uImage等系统镜像拷贝到DDR中,再去启动。
  • 我们也可以根据自己的需要去修改Uboot,加上相应的驱动以适应我们自己的板子。
  • 下载模式下,可以使用uboot命令(输入?即可)查看板子信息bd_info,读写EMMC等设备,还有常用的比如bootz命令启动linux,要启动linux先要将Linux镜像和设备树拷贝到DDR中:可以从EMMC,SD卡中拷贝到DDR中启动,也可以从直接用nfs命令将文件下载到Dram中启动。
    boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统,环境变量是启动命令的合集,可以通过setenv bootcmd命令来设置。

kernel

  • Windows采用微内核架构,只将内核的基本功能放入内核,如进程调度,进程管理,其它放在用户空间,把系统分为各个小的功能模块,设计难度大大降低,具有非常好的扩展性。
  • Linux内核采用宏内核架构,具有五大功能:进程、内存、设备、文件、网络管理,他们运行在内核空间中(特权模式)。宏内核架构没有很好的扩展性,所以引入了内核模块(全称LKM内核可加载模块),在内核运行时可以动态加载一组目标代码到内核作为内核一部分在内核空间运行,以实现特定功能,不需要重新编译内核就可以实现动态扩展。
  • Linux系统组成:Linux内核由五部分组成(同上):进程管理子系统,内存管理子系统,设备子系统,文件子系统,网络子系统
    在这里插入图片描述
  • 字符设备:应用程序按字节/字符来读写数据,不支持随机存取。如键盘,串口。
  • 块设备:应用程序可以随机访问设备数据,可以寻址磁盘上的任何位置,数据的读写只能以块的倍数进行。
  • 网络设备:一种特殊设备,它并不存在于/dev 下面,主要用于网络数据的收发。

设备树(DT)

  • 早期Linux内核中存在大量描述芯片以及板级差异的代码,但这些代码对Linux内核来说都是垃圾,Linux创始人linus向Linux社区提出用Device Tree机制描述硬件,Linux内核中便不再需要大量冗余代码,许多硬件及芯片平台的细节便可通过其传递给内核。
  • DTS文件采用树形结构描述板级设备。大多时候是直接在 SOC 厂商提供的.dts
    文件上进行修改,一般一个dts对应一个硬件平台。
  • DTC 工具源码在 Linux 内核的 scripts/dtc 目录下,如scripts/dtc/Makefile 。要编译 DTS 文件的话只需要进入到 Linux 源码根目录下,“make all”命令是编译 Linux 源码中的所有东西,包括 zImage, .ko 驱动模块以及设备树,如果只是编译设备树的话建议使用“make dtbs”命令。
  • DTB 可以被内核与 BootLoader 识别解析,在BootLoader启动内核时,BootLoader 会将保存在 flash 中的 DTB 拷贝到内存,并把 DTB 在内存中的起始地址传递给内核,最终加载到内核中。内核通过其获取硬件信息。
    在这里插入图片描述

根文件系统(rootfs)

  • 它是 linux 在初始化时加载的第一个文件系统,而非文件子系统中的文件系统,它,是加载其它文件系统的“根”。根文件系统包函 Linux 启动时所必须的目录和关键性的文件,使其它文件系统得以挂载。
  • Linux 中只存在一个根目录“/”,在Linux 启动后,根目录就位于真实的文件系统中。
  • Linux 中的文件系统多种多样,同时在 Linux 中一切皆是文件,普通文件、目录、字符
    设备、块设备、套接字等都以文件方式被抽象化;
  • Linux 中的文件系统多种多样,同时在 Linux 中一切皆是文件,普通文件、目录、字符
    设备、块设备、套接字等都以文件方式被抽象化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值