驱动开发--根文件系统

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

驱动开发--根文件系统_第1张图片

4、宏内核、微内核

宏内核:将进程、网络、文件、设备、内存等功能集成到一个内核中

    特点:代码运行效率高   缺点:一部分出错整个内核就崩溃

eg:Android 、 Ubuntu

微内核:只将进程、内存机制集成到内核中,文件、设备、驱动等在操作系统外

   特点:通过API接口让整个系统运行起来   缺点:效率低  优点:稳定性强

eg:鸿蒙、Window、QNX

5.驱动移植

1)需要一个驱动对应的.c代码

 2) 将.c文件放到对应的驱动文件夹下(drivers/char)

驱动开发--根文件系统_第2张图片

 3)修改char文件夹下的Makefile-->连接自己的.o文件

驱动开发--根文件系统_第3张图片

 4)修改char下的Kconfig-->

驱动开发--根文件系统_第4张图片

驱动开发--根文件系统_第5张图片

5)去顶层目录下执行make menuconfig-->配置自己的驱动

--> Device Drivers --> Character devices --> <>this is LCD 修改为this is LCD  

<*> 编译到内核里      <>不编译    编译为独立模块

驱动开发--根文件系统_第6张图片

驱动开发--根文件系统_第7张图片

驱动开发--根文件系统_第8张图片

6)顶层目录下make modules(编译独立的驱动模块),如果配置编译到内核中执行 make uImage

驱动开发--根文件系统_第9张图片

7) ubuntu下(sudo insmod lcd.ko)开发板下(cp自己的驱动.ko nfs路径)insmod lcd.ko

cp lcd.ko  /opt/6818/rootfs/rootfs (nfs路径)

 

你可能感兴趣的:(linux,运维,服务器)