linux驱动 day60
Linux驱动
一: linux
启动流程
1.1.1基础概念
bootloader
:一个裸机程序,为操作系统启动准备环境,引导操作系统启动
kernel
:一个复杂的程序,操作系统核心,加载根文件系统
rootfs
:根文件系统,一堆文件的集合
相对地址,有局限性,无法偏移到 数值大的地址
1.1 bootloader
运行流程
初始化CPU--工作模式
初始化异常向量表
初始化栈
关看门狗
初始化时钟
初始化内存
关闭Cache---D-Cache必须关I-Cache
关闭MMU(MMU:虚拟地址转换物理地址)
初始化相关外设(flash/串口 and so on)
集成相关协议
搬移内核到内存,向内核传参(根文件系统类型/位置/控制台/init进程)
引导内核启动
bootloader不再控制CPU,CPU的控制权彻底移交给内核
1.2 kernel
进程管理 内存管理 文件管理 网络管理 设备管理
kernel
启动到最后阶段,加载根文件系统
启动ini
进程 -> shell
-> user app
//内核中的init
退化为用户的init
进程(变成1号进程)
1.3 rootfs
内核启动后第一个挂载的文件系统,通过挂载的方式(获取访问该文件集合的方式)
1.4-1
norflash
: 可线性寻址(访问方式和内存相同)
nandflash
:不可线性寻址,访问需要专用的 程序控制
地址相关代码:加载地址必须和链接地址一致
地址无关代码:加载地址和链接地址无关
绝对跳转(长跳转):
相对跳转(短跳转):
1.4 nandflash
启动形式
bootloader
,kernel
,rootfs
均存储在nandflash
上
1.系统上电后CPU自动搬移nandflash
的前4KB程序到IRAM中,此时0地址被映射到0x40000000地址处(IRAM的起始地址),直接执行IRAM中的程序,bootloader必须在前4KB代码中初始化好内存,并搬移自己剩余的部分到内存运行,bootloader向内核传参,从nandflash
中搬移内核到内存的0x30008000地址,启动内核
2.内核启动后,挂载nandflash
中的根文件系统(mnt
)
3.根文件系统被挂载完成后,内核会启动根文件系统中的init
进程进一步启动shell
及用户程序
1.5 norflash
启动形式
从norflash
启动,bootloader
使用norflash
中的kernel
和rootfs
存放于ubuntu
主机上
1.系统上电后,直接执行norflash
中(norflash
被接在0地址处)的bootloader
程序,bootloader向内核传参,通过tftp
服务中搬移内核到内存的0x30008000
地址处,启动内核
2.核启动到最后阶段通过nfs
服务挂载ubuntu中的rootfs
3.根文件系统被挂载完成后,内核会启动根文件系统中的init
进程进一步启动shell
及用户程序
1.5.1 tftp
/nfs
tftp(简单文件传输协议)
:一种网络协议,主机设置tftp
目录,只有该目录下的文件才能被客户端下载,客户端上传的文件也只能放在这个目录下,从机运行tftp
客户端链接服务器,然后下载到本地,上传文件要通过服务器的同意
nfs(网络文件系统)
:主机设置nfs服务的目录该目录下的所有文件共享给挂载该目录net nfs需要手动挂载远端的服务器的客户端确定远端服务器的ip及目录
客户端需要手动挂载远端的服务器,确定远端服务器的ip及目录,确定本地挂载的目录,可以在mnt目录下访问服务端nfs目录下所有文件
挂载完成后本地mnt
目录(home/linux/mmt
)原来的文件会被隐藏,解除挂载后会重新复现