1、单片机开发属于嵌入式开发吗?
广义:单片机开发属于嵌入式开发---(嵌入式微处理器开发) 一般不带mmu(地址映射)
狭义:单片机开发不属于嵌入式 ---(Linux嵌入式开发)一般带mmu(地址映射)
2、ARM逻辑代码和驱动有什么区别?
共同点:都能操作硬件
不同点:
ARM裸机:
1、直接操作物理地址
2、单独编译单独执行
3、arm裸机同时只能执行一份代码
4、arm裸机代码只需要一个main函数即可,在main函数中编写逻辑程序
驱动:
1、需要对物理地址进行转换-->虚拟地址
2、依赖内核编译,依赖内核执行
3、驱动可以同时执行多份代码(Linux操作系统具有进程管理)
4、驱动是依赖内核的框架和操作硬件的过程,每个模块都有独立的运行任务
3、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来访问
网卡设备驱动:
1.按照网络数据包来收发的。
--------------------------------------------------------------------------------------------------------
hardware:led 鼠标 键盘 lcd 触摸屏 摄像头 u盘 emmc 光猫 路由器 dm9000
字符设备:LED(0/1)、鼠标(坐标点)、键盘(按压)、LCD(控制灯0/1)、摄像头
块设备:U盘、emmc
网卡设备:光猫、路由器、dm9000
4、宏内核、微内核
宏内核:将进程、网络、文件、设备、内存等功能集成到一个内核中
特点:代码运行效率高 缺点:一部分出错整个内核就崩溃
eg:Android 、 Ubuntu
微内核:只将进程、内存机制集成到内核中,文件、设备、驱动等在操作系统外
优点:通过API接口让整个系统运行起来 缺点:效率低 优点:稳定性强
eg:鸿蒙、Window、QNX
5.驱动移植
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路径)