Linux驱动开发
流水石板路
物联网 机器人 自动控制 嵌入式
展开
-
块设备驱动示例程序
参考LDD3块驱动章节、及附带的示例程序。转载 2023-04-26 21:54:07 · 98 阅读 · 0 评论 -
LDD3官方资料
官方github : gitee上同步的镜像: 官网上的pdf英文书:转载 2023-04-25 21:32:07 · 114 阅读 · 0 评论 -
qemu--以韦东山IMX6ULL开发板为例
实操可行:韦东山官网介绍qemu模拟imx6ull: 其他:转载 2023-04-08 15:07:08 · 876 阅读 · 0 评论 -
netlink经典帖子--转载
注:在bind时用到的是group组的掩码,参考内核代码使用。转载 2023-04-03 19:47:48 · 75 阅读 · 0 评论 -
flash操作复习
2- 写入数据前需要先擦除flash。flash擦除指令有扇区(4k)擦除(20h);32k块擦除(52h);64k块擦除(d8h);3- 读、写、擦除动作前需要读取总线是否忙;擦除整个芯片要在擦除前后判断总线忙,用于判断是否可以进行擦除、擦除是否完成。1- flash的也大小位256 byte,一次最多写一页大小的数据。具体代码、讲解参考金沙滩stm32资料:lesson6。以华邦W25Q128为例介绍。原创 2023-03-04 08:37:52 · 301 阅读 · 0 评论 -
SPI Flash为何需要24位地址线?
128M bit = 16M byte = 0X100 0000, 这样需要24位地址线就可以访问16M空间了。刚开始误以为flash时128M字节的大小,算了下128MB=0x800 0000, 地址线至少需要27位.由于现在的SPI 协议手册里都是24位地址线宽度,就限制了flash的最大存储容量只能是16M。以W25Q128 flash为例,芯片手册规定对于flash的读写地址长度位24bit。后来发现芯片手册里写的flash容量是128M bit。原创 2023-03-04 08:28:39 · 1340 阅读 · 0 评论 -
设备驱动模型--存储技术原理分析笔记 基于2.6.43内核
本文为读书笔记,详细内容参考《存储原理技术分析》原创 2023-02-27 21:58:15 · 430 阅读 · 0 评论 -
驱动开发资源
LDD3 电子版:原创 2022-09-07 21:56:49 · 128 阅读 · 0 评论 -
字符设备驱动--韦东山视频笔记
发现自己太懒了,驱动的系统学习是在19年就提上日程了,结果都2022年了还没结束,好在断断续续一直在学习,就当中间的日子用来吸收之前所学的知识了吧,哈哈。为热爱不断学习,加油。话说也不是很热爱,就是不懂想弄明白而已。总之,保持热爱,保持好奇,加油就对了。我们写完驱动后,即对用户态提供了接口,可以调用驱动接口操作硬件。比如我们写了一个led驱动,驱动中设计了led_open; led_read; led_write接口用于打开、读写LED灯。在用户态程序中,我们通常使用c库函数open、read、write函原创 2022-06-02 21:37:56 · 210 阅读 · 0 评论 -
根文件系统--制作
回顾:最小根文件系统的组成:1- 终端设备: /dev/console, /dev/null2- init程序,这里指busybox程序3- 配置文件,这里指/etc/inittab 文件4- 配置文件指定的应用程序,例如ls, cp, init等5- C库文件--busybox会用到printf, 需要由c库等其他库文件本文主要内容:1- 制作最小根文件系统2- mdev自动挂载设备3- 制作NFS文件系统相关帖子:根文件系统--代码简单分析_u01.原创 2022-03-04 22:12:57 · 857 阅读 · 0 评论 -
内核启动第二阶段
前言:本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。本文分析重点:1- 内核处理uboot传入的启动参数2- 挂载文件系统相关帖子:内核启动第一阶段内核Makefile文件简单分析内核配置文件分析--以CONFIG_DM9000为例内核初体验:编译、下载uboot启动第二阶段uboot启动第一阶段UBOOT初体验:编译、下载初识uboot Makefile...原创 2022-02-20 12:57:16 · 1032 阅读 · 0 评论 -
内核启动第一阶段
前言:本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。linux启动过程内容较多,本文只是简单分析内核启动流程。并将汇编代码初始化过程称为第一阶段;C代码称为第二阶段。接上文分析,可知内核启动的第一个文件为:arch/arm/kernel/head.S,链接脚本为:linux-2.6.22.6\arch\arm\kernel\vmlinux.lds本文分析重点:如何根据链接脚本的段属性内容,在代码中找.原创 2022-02-18 23:10:46 · 619 阅读 · 0 评论 -
内核配置文件分析--以CONFIG_DM9000为例
前言:本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。本文以CONFIG_DM9000网卡配置为例简单介绍内核的配置文件。相关帖子:内核初体验:编译、下载uboot启动第二阶段uboot启动第一阶段UBOOT初体验:编译、下载初识uboot MakefileCONFIG_DM9000都存在在那些文件?在内核中搜索CONFIG_DM9000,可以看到CONFIG_DM9000主要...原创 2022-02-13 16:47:38 · 433 阅读 · 0 评论 -
内核初体验:编译、下载
前言:本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。相关帖子:uboot启动第二阶段uboot启动第一阶段UBOOT初体验:编译、下载初识uboot Makefile环境说明S3C2440开发板串口线下载线光盘linux kernel源码、补丁文件:002_JZ2440资料光盘_20200423(免费)\资料光盘\B盘\uboot+kernel+filesystem..原创 2022-02-13 16:04:27 · 548 阅读 · 0 评论 -
如何在uboot里加入自定义命令
前言:本帖是学习韦东山老师uboot教程,粗略总结的课堂笔记及自己感悟。如想深入了解uboot 启动过程,请绕路。本节内容了解即可。相关帖子:uboot启动第二阶段uboot启动第一阶段UBOOT初体验:编译、下载初识uboot Makefile1- 添加一个hello 命令--先体验1.1- cmd_hello.c在/u-boot-1.1.6/common路径下创建一个cmd_hello.c文件,给予文件777权限。内容如下:/* * hello原创 2022-01-26 22:10:04 · 1946 阅读 · 0 评论 -
uboot启动第二阶段
前言:本帖是学习韦东山老师uboot教程,粗略总结的课堂笔记及自己感悟。如想深入了解uboot 启动过程,请绕路。相关帖子:uboot启动第一阶段UBOOT初体验:编译、下载初识uboot Makefile概述uboot第一阶段在汇编代码中进行了硬件初始化(看门狗、中断、堆栈)第二阶段主要是C代码进行硬件初始化、设置内核启动参数、将内核加载到内存(SDRAM)并启动内核。注意:uboot的目的就是启动内核。其他的初始化,参数设置都是辅助启动内核的。这就是唯物辩证法原创 2022-01-23 16:27:32 · 1266 阅读 · 0 评论 -
初识uboot Makefile
前言:本帖是学习韦东山老师uboot教程,粗略总结的课堂笔记及自己感悟。如想深入了解uboot makefile,请绕路。相关帖子:UBOOT初体验:编译、下载uboot makefile主要包括两部分:配置编译参数;编译1- make 100ask24x0_config 配置makefile编译环境在makefile中搜索100ask24x0_configSRCTREE := $(CURDIR)MKCONFIG := $(SRCTREE)/mkconfig100as原创 2022-01-21 23:15:26 · 747 阅读 · 0 评论 -
在flash上对地址寻址怎么看?
前言对于地址寻址范围给定,初始地址给定,如何求结束地址的问题一直感觉很模糊,写个帖子记录下问:如果有个64M的flash,flash的起始地址对应地址总线的0x3000 0000(32位地址总线),问该flash的结束地址时多少?分析地址总线: 32bitflash起始地址: 0x3000 0000flash大小:64M对于0x3000 0000 -0x3000 0001存放1 byte数据。我们一共64M = 64 * 1024 = 65536 kb = 655原创 2022-01-21 22:19:58 · 1232 阅读 · 1 评论 -
fcnt select用法总结
fcnt : file controlfcnt用于控制文件句柄的操作select用于非阻塞监控文件句柄基本操作:/* 0- 定义读写句柄集合 */fd_set rd_set, wr_set;/* 1- 获取文件句柄 */fd_rd = fopen()fd_wr = fopen()/* 2- 获取句柄参数 */flags_rd = fcntl(fd_rd, F_GETFL, 0)flags_wr = fcntl(fd_wr, F_GETFL, 0)/* 3- 设置取原创 2021-12-16 11:28:59 · 454 阅读 · 0 评论 -
历史内核源码下载
Index of /pub/linux/kernel/转载 2021-11-12 18:05:49 · 964 阅读 · 0 评论 -
内核mod相关的内容--转载
讲的不错转载:内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe转载 2021-10-30 10:08:25 · 90 阅读 · 0 评论 -
ioctl--驱动开发
参考:IOCtl经验贴转载 2021-03-03 15:40:04 · 110 阅读 · 1 评论 -
sysfs-kset
写在前面:kset是一种特殊的kobj可以类比为链表,链表头包括head、tail、count等参数,下挂第一个链表元素,第二个....kset与此类似,下挂第一个kobject、第二个...不要把这玩意想的太复杂,感觉就是链表的基本原理,实操一把就知道什么意思了。对于涉及的深层次内核处理不做过多研究,只看下怎么用,怎么处理的。示例:#include <linux/module.h>#include <linux/timer.h>#...原创 2020-08-12 23:07:00 · 256 阅读 · 0 评论 -
sysfs--kobject
写再前面:sysfs就是所说的虚拟虚拟文件系统。道行太浅,原理性的东西自己都说不太清,就不瞎写误人子弟了。可以看下搜寻的几篇帖子,讲的还不错,看完你应该有所收获吧。https://blog.csdn.net/u010743406/article/details/107694951对于这些东西直接干示例,理解最直观了。不论是kobject还是kset的示例都是参考内核的示例。自己会下载内核代码吧,下了后搜索kobject-example.c文件,就是我学习的示例。理解:...原创 2020-08-05 22:16:23 · 256 阅读 · 0 评论 -
驱动、内核学习法门
无意间看帖子发现内核已经给我们做好了一系列的例子,已经在指引我们前行了,不要去网上什么示例了。讲真的,网上的帖子可能是人家自己给自己看的,给你解惑的。所以不要埋怨别人帖子写的垃圾!想看明白自己多写多悟!当然这些话是将给我自己听的,哈哈哈哈.闲话收一收,上内核示例路径:kernel\linux-source-4.13.0\samples\别告诉我,你连内核代码都没有下。。。。...原创 2020-08-05 22:03:06 · 172 阅读 · 0 评论 -
虚拟文件系统几个好贴
其中最经典的还是内核示例:\kernel\linux\linux-4.4.39-cgel\samples\kobject-example.c\kernel\linux\linux-4.4.39-cgel\samples\kset-example.c对着内核示例操作一遍,再看下面帖子,应该会有所感悟吧。https://www.cnblogs.com/helloahui/p/3677192.htmlhttps://www.cnblogs.com/helloahui/p/3674933..原创 2020-07-30 18:35:44 · 164 阅读 · 0 评论 -
linux异步通知 -7
学习目标:了解linux常用信号;了解异步通知概念;在前面代码基础上增加异步通知;理解:异步通知:举个例子吧。比如我想要买口罩,现在肺炎很厉害商店都没有卖的了,我在药店交押金预定,不用专门去药店问今天有没有,药店有口罩了售货员小姐姐会通知我。这种情况我认为就是异步通知。同步通知:我去药店问小姐姐(也可以打电话问,就是我必须主动问人家),问完结果才罢休。综上:同步和...原创 2020-02-10 10:11:07 · 699 阅读 · 0 评论 -
查看当前进程的pid
ps -ef 可看到所有进程的PIDgetpid()可获取进程的pid号,参考:https://blog.csdn.net/u010743406/article/details/104238987杀死进程:kill -9 进程号原创 2020-02-09 19:26:26 · 1882 阅读 · 0 评论 -
linux设备驱动中的非阻塞IO之poll -6
学习目的:学习非阻塞IO的编程练习主要用到poll进行阻塞等待。具体的还没理解好,只是比着代码敲了一遍。先贴上代码,后续有了新的认识再更新。1- 阻塞IO的用法理解poll()理解:2- 代码实现代码实现原理:现象:之前的都是内核态代码,这里需要再用户态进行编程验证。a- 用户态代码C文件#include<stdio.h>#includ...原创 2020-02-07 18:03:56 · 279 阅读 · 0 评论 -
设备驱动编程:查看函数所在头文件-5
在字符设备编程过程中,经常会出现没有包含头文件的告警,刚开始学习对linux也不熟悉,不能快速找到要添加的头文件,可这把我难坏了。。。不会问百度啊,果然找到了。言归正传,放大招:man 函数名没错就这么简单!!示例:我要在用户态程序中读写字符设备,需要用到read()函数,它在那个头文件中呢?没错就是在unistd.h中!参考:https://blog.csdn...原创 2020-02-07 16:56:44 · 290 阅读 · 0 评论 -
linux设备驱动中的阻塞IO之等待队列-4
学习目的:学习等待队列用法编程练习:在读写中加入等待队列1- 阻塞IO阻塞就是当我想要玩手机时,手机没电了,我得先充电,等有电了,我才能玩手机;当我想玩手机时,手机正好有电,那我就玩呗。在手机没电的时候,我啥也不干,就躺床上(等待队列)发呆(睡眠)。当手机有电了,会自动重启播放音乐,我听到音乐就会从床上一跃而起(移除等待队列),去拿玩手机(任务处于RUNNING状态),开始玩...原创 2020-02-07 12:11:36 · 373 阅读 · 1 评论 -
linux设备驱动中的并发控制-3
学习目的:学习linux设备驱动中的并发控制编程练习:在globalmem字符设备基础上增加信号量管理共享资源意外收获:第一次比着书上代码抄,很多东西理解不了,尤其file_operation什么时候调用,虽然现在也不懂。。。但好歹有个大致猜测理解1- linux并发控制理解学过ucos,很多和Linux相通。并发控制就是对共享资源的互斥访问。比如有一把手枪,你我都能想玩,但同一时...原创 2020-02-06 15:56:22 · 214 阅读 · 0 评论 -
dmesg用法
dmesg用于记录开机相关的日志,路径/var/log/dmesg#1- 查看dmesgdmesg#2- 查看前面/最后几行dmesg | head -10 //开头10行dmesg |tail -10 //最后10行#3- 监视dmesgwatch “dmesg | tail -10”#4- 清空缓存dmesg -c参考:https://www.cnblogs.com/z...原创 2020-02-05 11:46:33 · 973 阅读 · 0 评论 -
异步通知相关的学习帖子
其中关键一点之前一直不理解的就是:调用factl()监控文件的异步通知函数后会调用file_ops中的.fasyc成员函数,该成员函数中调用fasync_helper()函数。http://blog.chinaunix.net/uid-20498191-id-1704861.htmlhttps://blog.csdn.net/u012041204/article/details/529...原创 2020-01-22 11:55:43 · 120 阅读 · 0 评论 -
字符设备驱动-2
参考:宋宝华 Linux设备驱动开发详解 嵌入式Linux驱动开发教程开发环境:ubuntu16.04内核版本:4.13.0-36-generic主要目的:学习字符设备的编写疑问:为何cat /dev/globalmem会执行两次??file_opration中的函数和open()、 release()、read()、write()调用关系是怎样的,什么时候调用到open...原创 2019-12-08 22:58:09 · 242 阅读 · 0 评论 -
linux设备驱动开发 第一个驱动程序-1
参考:宋宝华 Linux设备驱动开发详解 嵌入式Linux驱动开发教程开发环境:ubuntu16.04所需Makefile文件感谢网友,链接:https://www.cnblogs.com/guanguangreat/p/7920378.html1- hello world 模块代码,名字取为hello.c。由于Makefile文件不会写,直接复制过来,人家用的就是hello.c,其...原创 2019-12-03 21:19:43 · 256 阅读 · 2 评论 -
Linux设备驱动中的并发控制
随书总结:《linux设备驱动开发》 宋宝华著主要有:中断屏蔽;原子操作;自旋锁;信号量1- 中断屏蔽:进入临界区前后关、开中断使能2- 原子操作:在多进程(线程)的操作系统中不能被其它进程(线程)打断的操作就叫原子操作。原子操作是不可分割的,在执行过程中不会被任何其它任务或事件中断。 linux内核提供了一系列函数来实现内核中的原子操作,内核代码可以安全地调用它们而不被打断。位和...原创 2019-10-09 17:15:04 · 203 阅读 · 0 评论