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)
相关推荐
NamoAmitabha1281 小时前
libpng12-0 1.2.54-1ubuntu1.1 (amd64 binary) in ubuntu xenial
linux·ubuntu20.4
Madison-No71 小时前
搭建项目测试环境
linux·运维·服务器·python
吴声子夜歌2 小时前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
悠悠121383 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
xiaoye-duck4 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
云老大-阿里云国际站代理商4 小时前
华为云国际站服务代理商:NAT网关怎么配?多台ECS共用公网IP要注意什么
服务器·华为云·云计算
zx_741484815 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS5 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿5 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
wdfk_prog6 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros