
08 - 嵌入式内核及驱动开发
西红柿爆炒鸡蛋
成败论英雄
展开
-
05 - 设备树开发
DTS = device tree source 设备树源码 FDT = Flattened device tree 展开设备树 OF = open firmware = 打开固件 DTSI = device tree source include 设备树源码头的文件 DTC = device tree compiler 设备树编译器 >> (DTS -----DTC----- > DTB) DTB = device tree binary 设...原创 2020-11-23 21:13:51 · 170 阅读 · 0 评论 -
04 - I2C总线
1,i2c协议和时序2,i2c子系统软件框架=====I2C从设备举例====== 例1:cmos camera摄像头 例2:电容触摸屏 例3:重力传感器 例4:eeprom存储设备 例5:HDMI:高清输出接口=======确保i2c core和i2c adatper层必须编译进内核=====make menuconfig Device Drivers ---> [ √ ] I2C support ---> //选中后会将i2c-core.c编译进内核 ;启动原创 2020-11-21 16:12:10 · 232 阅读 · 0 评论 -
03 - 输入子系统
layer == 层次第一节======1,什么是输入设备======按键.鼠标,触摸屏,键盘..............======2,输入子系统的5层框架======= ---------------------------------------------------------------------------------------------------------- APP level ---------------------------..原创 2020-11-17 19:11:57 · 175 阅读 · 0 评论 -
2 -驱动中断编程
中断号是内核里面的一个资源,从设备树获取,指向设备中断中断类似于门铃,门铃一响就中断正在做的事情传统CPU采用轮询的方式获取设备数据,中断完美解决了该问题举个例子,今天有快递与外卖送到门口,外卖的优先级更高,但是你要洗衣服轮询:要么你隔5分钟去门口看一看中断:你洗你的衣服(当前线程),快递员(中断源1)与外卖员(中断源2)都到了按下(中断触发;电平跳变)一个门铃按钮,门铃智能系统((中断控制器:屏蔽/优先级/区分))识别到外卖员与快递员,选择优先发出外卖到了的声响:外卖到啦!外卖到啦!外卖到啦!原创 2020-11-17 13:34:02 · 177 阅读 · 0 评论 -
03 - 总线之平台总线
平台总线(platform bus)是 用于平台升级的比如你在一个生产智能门的公司使用的ARM芯片,公司接到多个订单,但是每个订单的芯片都不一样,一个是A7,A8,A9系列的,那就要为这三个芯片写三套完整的驱动,为了解决这个问题,平台总线可以驱动多个平台的驱动,已经有了各个框架SCO的驱动框架,只需要修改硬件物理寄存器地址就可以驱动不同的SOC;所以叫做平台总线平台总线是在原先总线的基础上进行了继承并扩展与标准化了平台总线三元素 = platform_bus + platform_driver原创 2020-11-05 22:54:42 · 336 阅读 · 0 评论 -
02 - 总线模型
链表在大量的开发过程中,Linux的开源开发者们在编写大量的设备驱动(字符设备驱动为主)时间重复的进行字符设备驱动步骤,而只有硬件驱动这一部分因不同设备不同,其他都是相同的,为了实现一个驱动程序,驱动多个设备,bus总线就由来了在/sys = /bus + /Device + /Classes总线就是device链表,drive链表南方与北方有一条高速路(bus总线)要经过很多南方城市A,B,C,D(device)与北方城市(drive)a,b,c,d,这些城市比如先在高速路系统认证( devic原创 2020-11-05 17:52:28 · 385 阅读 · 0 评论 -
2 - 字符设备驱动
设备号32位 = 主设备号(major = 高12bit)+次设备号(低20bit)设备节点 == 设备文件(c = 字符设备 ; b = 块设备)申请设备资源函数 register_chrdev( )释放设备资源函数 unregister_chrdev( )创建设备节点函数{手动创建(在内存中创建节点文件,关闭后文件消失)mknod自动创建节点文件创建一个类class_create( ){参数1:THIS_MODULE参数2:名字}创建一个设备文件device_create原创 2020-11-02 20:10:09 · 151 阅读 · 0 评论 -
模块
第一课驱动文件是.C文件,.c文件编译成.o的目标文件后有两个方向,如何你的驱动需要随着内核启动开机就使用,比如LCD屏幕,就编译到内核文件zImage,要么编译成.KO模块,使用模块就insmod镶嵌到内核中(向正在运行的内核申请资源),使用结束后就用rmmod将其从内核剥离出来,释放内核资源(减小内核体积 ; 方便管理驱动,灵活度高)第二课 模块的传参与导出内核各个模块是一个个黑匣子,用户层向黑匣子传递参数用module_param();黑匣子向其他黑匣子提供函原创 2020-11-01 14:51:57 · 176 阅读 · 0 评论