linux驱动1

linux移植

1、移植一个Linux到ARM上

2、ubuntu上开发应用程序(交叉编译)

----在A平台上开发编译B平台运行的程序

3、移植应用程序到ARM上

nfs----网络文件系统(做网络之间的文件共享)

linux启动流程:

|------------------------------------------|
| 1、bootloader是一个为内核启动准备环境的裸机程序,引导内核启动 |
| 2、kernel操作系统的核心(实现整个系统功能的程序) |
| 3、rootfs 加载(挂载)跟文件系统 |

1、bootloader(uboot)

为了读到arm里面再写到内存当中
--- 初始化异常向量表
--- 初始化CPU(工作模式)
--- 初始化栈
--- 初始化时钟
--- 关看门狗

看门狗(Watchdog Timer, WDT)

用于防止系统死机、实现自动恢复的关键安全机制,相当于系统的 "监护者"。
正常时:程序定时喂狗(重置定时器)
异常时(死机、死循环、崩溃):没人喂狗 → 定时器溢出 → 强制复位(重启)系统
--- 关闭Cache (数据Cache必关,指令可选)

Cache

CPU 内部高速缓存,用来加速内存访问,但它是异步、自动缓存的。
关 Cache:
防止外设寄存器被缓存,导致读写不真实
保证代码搬运、重定位时数据严格一致
让硬件初始化行为可预测、稳定
--- 关MMU

MMU

负责虚拟地址 ↔ 物理地址转换
负责内存权限、属性控制
负责内存映射(比如外设、DDR 映射)
Bootloader 早期只认物理地址,MMU 只会添乱所以关掉
--- 关中断
--- 初始化内存
--- 初始化相关设备(串口、网口)
--- 集成相关协议
--- 搬移内核到内存 --- 向内核传参(根文件系统类型,init进程,控制台)
--- 引导内核启动
-----bootload不再控制CPU,CPU控制权移交给内核

2. kernel 一个复杂的程序

文件管理 进程管理 内存管理
网络管理 设备管理 IPC进程间通信
内核启动到最后阶段 加载(挂载)根文件系统
启动init进程(由内核init进程退化(exec))
init -> 其他进程 -> shell -> uaerapp

3. rootfs 跟文件系统(第一个挂载的文件系统)

一堆文件的集合
--- 配置文件
--- 系统命令
--- 库
--- 用户程序
--- 普通文件(文本、mp3、jpg)

系统上电根据启动模式配置引脚从不同的介质加载bootloader(以SD卡为例)

  1. cpu拷贝bootloader前半部分到OCRAM, bootloader在前半部分代码中初始化好内存,并搬移自己后半部分到内存中执行,bootloader执行到最
    后阶段搬移内核到内存,并引导内核启动
    2-1 内核在SD卡中,则bootloader需要在代码中初始化好SD卡,然后读SD的kernel分区写入内存
    2-2 内核在ubuntu上,则bootloader需要在代码中初始化有线网卡及集成tftp协议,通过tftp协议下载内核到内存
    3-1 根文件系统如果在SD卡中,则内核直接挂载SD卡的rootfs分区
    3-2 根文件系统在ubuntu上,则内核应该通过nfs挂载ubuntu上的rootfs目录(bootloader向内核传参是应该包含内核启动阶段使用的ip)
相关推荐
摸鱼仙人~2 小时前
LLM量化技术全景对比:AWQ、GPTQ、GGUF与FP8/INT8/INT4的抉择指南
运维·服务器
zoujiahui_20182 小时前
ubuntu使用中的问题
linux·ubuntu·github
这辈子谁会真的心疼你2 小时前
如何修改视频媒体修改时间?两个方法介绍
java·服务器·数据库
默|笙2 小时前
【Linux】线程互斥与同步_线程互斥
linux
wanhengidc2 小时前
服务器 网络信息安全
运维·服务器·网络
wanhengidc2 小时前
裸金属服务器都有什么作用
运维·服务器
Harvy_没救了2 小时前
MySQL主从架构深度解析:原理、优化与实践指南
运维·mysql·架构
CHANG_THE_WORLD2 小时前
演示宽度数组解析
linux·服务器·前端
安审若无2 小时前
运维监控及可视化工具Prometheus和grafana
运维·grafana·prometheus