目录
1.驱动大纲:
2.单片机开发属于嵌入式开发吗?
3.RAM裸机代码和驱动有什么区别?
4.Linux系统的组成
5.宏内核、微内核
6.驱动移植
1.驱动大纲:
(1)内核模块
(2)字符设备驱动
(3)中断、内核定时器
2.单片机开发属于嵌入式开发吗?
广义: 单片机开发属于嵌入式的---(嵌入式微处理器开发)---单片机搭载实时的系统
单片机一般不带mmu(地址映射,物理地址和虚拟地址做转换)
狭义:单片机开发不属于嵌入式--- (Linux嵌入式开发)
3.RAM裸机代码和驱动有什么区别?
共同点:
都能操作硬件
不同点:
arm裸机:
1.直接操作物理地址
2.单独编译单独执行
3.arm裸机同时只能执行一份代码
4.arm裸机代码只需要一个main函数就可以了,在main函数中编写裸机程序
驱动:
1.需要对物理地址进行转换----转换成虚拟地址
2.依赖内核编译,依赖内核执行
3.驱动可以同时执行多份代码(操作系统具有进程管理)
4.驱动是依赖内核的框架和操作硬件的过程,每个模块都有独立的运行任务
4.Linux系统的组成
app : app glibc 【0-3G】
---------------------------------系统调用(软中断)--------
kernel : 【3-4G】
5种功能
进程管理:进程的创建,销毁,调度等功能
文件管理:通过文件系统ext2/ext3/ext4 yaff jiffs等来组织管理文件
网络管理:通过网络协议栈对数据进程封装和拆解过程。
内存管理:通过内存管理器对用户空间和内核空间内存的申请和释放
设备管理: 设备驱动的管理
字符设备驱动:
1.按照字节为单位进行访问,顺序访问
2.会创建设备文件,open read write close来访问
块设备驱动 :
1.按照块(512字节)(扇区)来访问,可以顺序访问,可以无序访问
2.会创建设备文件,open read write close来访问
网卡设备驱动:
- 按照网络数据包来收发的。
---------------------------------------------------------
hardware:led 鼠标 键盘 lcd 触摸屏 摄像头 u盘 emmc 猫 路由器 dm9000
5.宏内核、微内核
宏内核:将进程、网络、文件、设备、内存等功能集成到一个内核中
特点:代码运行效率高
缺点:如果有一部分出错,整个内核就崩溃了
eg:Android Ubuntu
微内核:只将进程、内存机制集成到内核中,文件、设备、驱动等在操作系统之外
特点:运行效率低一些,通过API接口让整个系统运行起来
缺点:效率低
优点:稳定性强
eg:鸿蒙 window QNX
6.驱动移植
1)需要一个驱动对应的.c代码
一般用什么东西,什么东西的厂商会提供一套驱动代码
2) 将.c文件放到对应的驱动文件夹下(drivers/char)
3)修改char文件夹下的Makefile-->连接自己的.o文件
4)修改char下的Kconfig-->
5)去顶层目录下执行make menuconfig-->配置自己的驱动
--> Device Drivers --> Character devices --> <>this is LCD 修改为<M>this is LCD
<*> 编译到内核里 <>不编译 <M>编译为独立模块
6)顶层目录下make modules(编译独立的驱动模块),如果配置编译到内核中执行 make uImage
7) ubuntu下(sudo insmod lcd.ko)开发板下(cp自己的驱动.ko nfs路径)insmod lcd.ko
cp lcd.ko /opt/6818/rootfs/rootfs (nfs路径)