linux驱动开发
文章平均质量分 89
linux驱动开发从入门到精通
子非龙
这个作者很懒,什么都没留下…
展开
-
linux 内核地址空间
一、内核镜像在3GB~(3GB+896MB)这段直接/线性映射区域,包含了内核初始化页表swapper_pg_dir,内核镜像等。内核也是由一个elf文件(比如vmlinux)加载启动的,加载后也有text段,data段,bss段等。二、内存分配kmalloc和vmalloc在虚拟内存空间的normal memory区域,内核使用kmalloc()来分配内存,kmalloc()返回的也是虚拟地址,但是分到的内存在物理地址上是连续的(因为是直接映射,在虚拟地址上自然也是连续的...转载 2020-11-02 13:41:46 · 555 阅读 · 0 评论 -
linux音频驱动之ALSA框架
原创 2020-06-23 09:48:34 · 575 阅读 · 0 评论 -
linux驱动之I2C总线驱动框架分析
Table of Contents1、I2C模型框图2、设备信息层2.1、非设备树形式2.2、设备树形式3、芯片控制器层adapter3.1、控制器初始化3.2、控制器底层传输函数(起始,数据,应答,停止)4、核心层core.c i2c_bus4.1、i2c_bus总线初始化4.2、client(设备)和i2c_driver(设备驱动)匹配过程4....原创 2020-05-06 13:46:06 · 1102 阅读 · 1 评论 -
设备树节点转换为设备节点device_node、和平台设备资源platform_device
1、_dtb转换为device_node在dts文件里,每个大括号{ }代表一个节点,比如根节点里有个大括号,对应一个device_node结构体;memory也有一个大括号,也对应一个device_node结构体。节点里面有各种属性,也可能里面还有子节点,所以它们还有一些父子关系。根节点下的memory、chosen、led等节点是并列关系,兄弟关系。对于父子关系、兄弟关系,在d...转载 2020-05-05 20:07:54 · 3320 阅读 · 0 评论 -
I2C、SPI设备树驱动对设备子节点的处理
对于i2c, spi等总线节点会转换为platform_device,然后它们下面的子节点交给父节点的platform_driver里面probe函数处理1、I2C总线节点的处理过程:/i2c节点一般表示i2c控制器, 它会被转换为platform_device, 在内核中有对应的platform_driver; platform_driver的probe函数中会调用i2c_add...转载 2020-05-05 21:46:05 · 1501 阅读 · 0 评论 -
linux 驱动之PWM蜂鸣器驱动
1、常用pwm函数//申请一个PWM设备 pwm_device *pwm_get(struct device *dev, const char *con_id);//配置PWM周期和占空比 int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);//使能pwm int pwm_enab...原创 2020-05-04 09:38:59 · 2109 阅读 · 0 评论 -
linux中断处理原理机制
本笔记摘自《深入linux设备驱动程序内核机制》1、硬件中断框架其中PIC为中断控制器,现在的ARM SOC处理器已经集成了PICirq是发生中断后,从中断寄存器中读出的中断号码,用于识别是发生了哪个中断INT代表触发CUP的统一外部中断中断信号,进过一些汇编代码处理后,调用统一的外部中断处理函数asm_do_IRQ2、中断软件处理流程...原创 2020-04-29 20:00:18 · 755 阅读 · 0 评论 -
linux驱动调试copy_from_user错误
注意应用层读写的时候传递buf是否是指针,本次由于应用层调用write函数传递得是buf的值,而不是传递指针,虽然编译能通过,但是调用copy_from_user 失败...原创 2020-04-26 21:56:43 · 2321 阅读 · 0 评论 -
tiny4412 支持设备树支持网络文件系统笔记
移植老版本内核支持设备树参考https://blog.csdn.net/fengyuwuzu0519/article/details/74101380https://blog.csdn.net/fengyuwuzu0519/article/details/74160686怎么下载内核和设备树到emmc先在uboot模式下输入fastboot然后进入dos窗口敲命令下载内核和设备树fas...原创 2019-08-31 22:28:30 · 320 阅读 · 0 评论 -
linux内核移植步骤
1.解压内核源码 tar -jxvf linux-xxx.tar.bz2 或者 tar -zxvf linux-xxxx.tar.gz2.清除之前的配置clean - 清大部分生成的文件, 但是保留配置文件, 以及可以保证足够编译模块的信息。mrproper - 清所有的生成文件, 以及配置文件, 以及各种备份文件distclean - mrproper 效果 + ...原创 2020-04-23 23:14:35 · 3841 阅读 · 0 评论 -
uboot引导linux内核过程 卡死Starting kernel ...(下载地址,加载地址,入口地址的修改)(uImage和zImage的区别)
red\color{#FF3030}{red}red 小龙原创 2020-03-16 11:06:57 · 2001 阅读 · 1 评论 -
uboot tiny4412_config
https://www.cnblogs.com/ynxf/p/5952896.html原创 2020-02-07 21:10:51 · 210 阅读 · 0 评论 -
uboot-2015-07的start.S的文件启动过程
https://blog.csdn.net/u013904227/article/details/51648179https://www.cnblogs.com/debruyne/p/9208809.htmlhttps://blog.csdn.net/weixin_41734376/article/details/98586549转载 2019-12-03 10:39:13 · 170 阅读 · 0 评论 -
高效学习linux驱动
参考:https://blog.csdn.net/W1107101310/article/details/79871029原创 2019-04-21 17:23:25 · 119 阅读 · 0 评论 -
linux驱动--输入子系统input
参考:https://blog.csdn.net/lizuobin2/article/details/51508839目录什么是输入设备框架:输入子系统的工作流程(以按键为例):1、开机,执行input.c input_init函数2、应用程序打开输入设备input_open_file,通过input_table找到事件处理器3、应用程序调用read函数 ...原创 2019-04-02 17:20:08 · 278 阅读 · 0 评论 -
linux驱动 struct file_operations 解析
目录file_oprations整体解析int (*open) (struct inode *, struct file *);int (*release) (struct inode *, struct file *);ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*w...原创 2019-04-02 11:52:59 · 1247 阅读 · 1 评论 -
ARM--LCD控制原理笔记
目录LCD接口介绍:概念:2440LCD接口原理图解析:LCD显示图像原理:扫描:LCD时序:控制信号:时序图:时序图时间参数:LCD 控制器LCD接口介绍:概念:2440LCD接口原理图解析:①是时钟信号,每来一个CLK,电子枪就移动一个像素;②是用来传输颜色数据;③是垂直方向同步信号...转载 2019-03-28 17:33:03 · 1216 阅读 · 0 评论 -
linux驱动——平台总线驱动 platform_driver
目录:平台总线的意义:平台总线定义:平台总线的设备和驱动 platform_device 和 platform_driver平台总线驱动的编写步骤:1、定义设备和资源:2、定义驱动和实现probe方法3、匹配方法解析4、接口函数(open read write ....)亮灯和灭灯 的实现参考别人的笔记:实验代码:plat_ded_pdrv.cp...原创 2019-03-26 17:13:44 · 2069 阅读 · 0 评论 -
linux设备驱动之——总线模块驱动编写步骤
目录:总线设备驱动模型设备 总线 驱动 分离思想文件系统sysfs实验1:完成mybus的构建实验步骤实验1代码:实验运行结果:驱动实验总结:总线设备驱动模型设备 总线 驱动 分离思想文件系统sysfs总线bus下面很多总线,包括要学习的平台设备:platform...原创 2019-03-25 21:47:43 · 862 阅读 · 0 评论 -
嵌入式linux驱动中断编程笔记
目录中断申请函数:中断释放函数:休眠等待宏:休眠唤醒宏实例代码:程序难点分析:中断申请函数:int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id)/*...原创 2019-03-12 17:32:55 · 428 阅读 · 0 评论 -
嵌入式字符设备驱动编写步骤
目录编写步骤:设备号的申请注册注销:通用函数(静态动态申请都可以):静态申请:动态申请:设备号的注销:设备节点的创建与销毁:手动创建设备节点:自动创建设备节点:设备节点的销毁:IO资源的映射与配置:读写函数编写,操作IO口,比如点灯:应用实验程序的编写驱动示例代码:编写步骤:/*编写步骤:**1、编写驱动模块的基本框架h...原创 2019-03-09 20:42:58 · 1550 阅读 · 0 评论 -
驱动模块编写步骤
头文件编写 #include <linux/init.h> ........ 入口初始化函数,和退出函数编写 static int __init hellow_drv_init(void) static void __exit hellow_drv_exit(void) 驱动的注册:module_init(hellow_drv_init) mod...原创 2019-03-09 16:11:46 · 1150 阅读 · 0 评论 -
linux驱动基本命令
加载驱动:insmod driver.ko卸载驱动:rmmod driver注意:卸载没有.ko列出加载了哪些驱动: lsmod原创 2019-03-09 16:03:01 · 5049 阅读 · 0 评论 -
linux装载驱动错误: insmod: can't insert 'xxx.ko': unknown symbol in module, or unknown parameter
原因:一般是驱动写错了,重新检查驱动,虽然编译出了.ko, 但是在编译的过程中出现了警告没注意例如把printk 误写成:printf原创 2019-03-09 12:16:23 · 8583 阅读 · 1 评论 -
uboot start.s文件分析
参考:http://blog.chinaunix.net/uid-22891435-id-380150.htmluboot 作用:初始化硬件,加载操作系统内核继续详细往下说:1—————>关掉中断,关掉看门狗,(刚开始是不需要中断和看门狗的)2—————>MMU关掉 ( 在板子启动的时候是没有对mmu进行初始化的,而且这个时候也用不到mmu,为了避免他...转载 2019-02-25 11:52:42 · 544 阅读 · 0 评论 -
uboot.lds文件分析
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")/*指定输出可执行文件是elf格式,32位ARM指令,小端*/OUTPUT_ARCH(arm)/*指定输出可执行文件的平台为ARM*/ENTRY(_start)/*指定输出可执行文件的起始代码段为_start*/SECTIONS{/*指定可...转载 2019-02-25 10:08:09 · 307 阅读 · 0 评论 -
source insight 新建工程
参考https://blog.csdn.net/tech_pro/article/details/70596435 第四步:按需求添加工程文件 第五步:同步工程文件原创 2019-02-24 21:34:45 · 628 阅读 · 0 评论 -
详细的 jz2440-uboot移植学习笔记总结
参考资料:Uboot启动分析笔记-----Stage1(start.S与lowlevel_init.S详解):https://www.cnblogs.com/80scd/p/5872373.html比较详细的jz2440移植:https://blog.csdn.net/lizuobin2/article/details/52054293 推荐uoot star.s分析:http:...原创 2019-02-24 17:05:34 · 999 阅读 · 1 评论 -
嵌入式开发环境搭建
参考:https://www.cnblogs.com/Ocean-Star/p/8906232.html转载 2019-02-24 15:39:03 · 651 阅读 · 0 评论 -
达内课程学习笔记
压缩解压命令 1、*.tar 用 tar –xvf 解压 2、*.gz 用 gzip -d或者gunzip 解压 3、.tar.gz和.tgz 用 tar –xzf 解压 4、*.bz2 用 bzip2 -d或者用bunzip2 解压 5、*.tar.bz2用tar –xjf 解压 6、*.Z 用 uncompress 解压 7、*.tar....原创 2018-08-23 14:26:51 · 2136 阅读 · 0 评论 -
linux内核中的IS_ERR()、PTR_ERR()
https://blog.csdn.net/ljk0922/article/details/47911203转载 2019-11-18 22:01:38 · 467 阅读 · 0 评论 -
Linux-printk分析、使用__FILE__, __FUNCTION__, __LINE__ 调试
1.在驱动调试中,使用printk(),是最简单,最方便的办法当uboot的命令行里的“console=tty1”时,表示printk()输出在开发板的LCD屏上当uboot的命令行里的“console=ttySA0,115200”时,表示printk()输出在串口UART0上,波特率=115200当uboot的命令行里的“console=tty1 console=ttySA0,...转载 2020-03-14 15:24:04 · 1497 阅读 · 0 评论 -
linux怎么查看已装好硬件驱动
linux系统中的设备驱动是否安装好一般检查几个方面:1、系统日志。嵌入式系统多是直接dmesg一下,看有没有设备关键字相关的出错信息(通用系统可检查/var/log/messages文件)。2、已加载的模块。检查模块加载列表中有没有相关设备的模块。lsmod3、设备列表。检查已加载的设备中有没有相关设备cat /proc/devices4、设备入口。如果以上检查都正常,还需要检查设备目...转载 2020-03-13 17:18:34 · 3861 阅读 · 0 评论 -
linux (platform driver)平台设备驱动匹配方法
Table of Contents一、匹配函数platform_match1.1、设备树匹配方法1.2、id_table匹配方法1.3、dev-name和platform_driver->drv->name匹配方法一、匹配函数platform_match平台设备驱动分为设备层和驱动层,每当有新的设备或者新的设备驱动注册时都要首先调用匹配函数进行匹配...原创 2020-02-23 16:01:48 · 3065 阅读 · 0 评论 -
linux (platform_driver)平台设备驱动常用API函数
Table of Contents1、设备层注册、注销函数1.1、platform_device_register1.2、platform_device_unregister1.3、platform_add_devices2、驱动层注册注销函数2.1、platform_driver_register2.2、platform_driver_ unregister3、...原创 2020-02-22 18:43:05 · 5240 阅读 · 0 评论 -
LCD数据手册解析
Table of Contents一、基本信息(分辨率尺寸)二、时序解析2.1、水平horizontal2.2、垂直vertical2.3、时钟相位极性(上升沿,或者下降沿有效)一、基本信息(分辨率尺寸)二、时序解析linux LCD驱动开发之原理时序分析(二)2.1、水平horizontalHS Blanking = HSPW + HBP...原创 2020-02-21 18:09:05 · 3657 阅读 · 0 评论 -
linux LCD 驱动编写(四)
一、应用程序访问驱动原理LCD驱动程序假设app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0--------------------------------------------------------------kernel: fb_open int fbidx = iminor(inode...原创 2020-02-21 16:28:37 · 650 阅读 · 0 评论 -
Linux LCD重要数据结构解析
一、struct fb_infoFb.h linux-3.5\include\Linux用法://驱动程序必须用这个结构体定义的成员,并且从平台设备数据中取出信息对该结构体进行填充struct fb_info {atomic_t count;int node;int flags;struct mutex lock; /* Lock for open/releas...原创 2020-02-21 14:27:08 · 694 阅读 · 0 评论 -
linux 自带LCD驱动框架(三)
一、驱动框架图二、内核kernel层(Framebuffer)2.1、入口出口函数(init exit)/*linux/drivers/video/fbmem.c*/主设备号: 29,提供了读写相关接口函数#define FB_MAJOR 29 /* /dev/fb* framebuffers */static const struct fi...原创 2019-12-26 17:20:57 · 791 阅读 · 0 评论 -
linux LCD驱动开发之原理时序分析(二)
Table of Contents一、LCD显示图像原理:2.1、物理屏、 虚拟屏认识2.2、扫描原理二、LCD时序分析:2.1、控制信号:2.2、重要的时间参数:2.3、帧的传输过程2.4、行中像素数据传输过程三、专业术语(英文解释):一、LCD显示图像原理:硬件接口见:https://blog.csdn.net/shenlong1356/articl...转载 2019-12-24 17:01:28 · 1145 阅读 · 0 评论