- 博客(50)
- 资源 (17)
- 收藏
- 关注
原创 我的创作纪念日
目前文章还是停留在50篇左右,半年没有更新了,后面还是要继续更新下去,尤其是Linux驱动篇,后面还要演进到对Linux内核的深入学习,继续完善自己的知识体系架构,借用刚刚雷总的演讲:我们要坚持做难而正确的事,毕竟我们的梦想是星辰大海😂😂😂。
2024-07-21 11:33:46
626
原创 Linux---应用层获取usb设备描述信息&通过endpoint地址数据通讯
VID指的是Vendor ID(厂商识别码),用于唯一标识USB设备的制造商。通过VID和PID,可以确定一个具体的USB设备,因为每个设备的VID和PID是唯一的,可以帮助系统识别和与设备进行交互。与我们要搜索的一致,可以判定为我们需要找的设备节点。应用层可以打开USB设备的节点,读取包括USB设备的配置,端口,端点等信息。为该USB设备的节点,我们后续读取USB设备信息以及数据读写操作都是通过这个节点进行的
2023-09-07 20:50:12
2837
原创 程序员的六一儿童节
它是为了保障世界各国儿童的生存权、保健权和受教育权,抚养权,为了改善儿童的生活,为了反对虐杀儿童和毒害儿童而设立的节日。世界上许多国家都将6月1日定为儿童的节日。了解背景之后有点震惊,可能也是因为真相过于残忍,考虑到对孩子们心灵的冲击,所以无论是课本还是老师都很少提及这个节日的背景(反正我小时候老师,包括课本上没有讲过这段历史,不知道现在是否会讲)。作为程序员要过儿童节吗 😂如果有小孩可以陪孩子一起过,如果没有,你要是觉得你还是个宝宝也可以过 😝,在此使用C语言画一幅涂鸦,表达下六一儿童节程序员的心情。
2023-06-03 21:49:01
266
原创 科技发展的那些事儿
科技发展的成就不仅改变了我们的生活和工作方式,也影响了社会的发展和进步,创造了更多的就业机会和经济增长点。iPod是一款便携式音乐播放器,以其简单易用和时尚的设计风格迅速赢得了全球用户的青睐,推动了数字音乐的发展,成为苹果公司的重要产品之一。iPhone是一款革命性的智能手机,以其简洁的设计和先进的功能迅速赢得了全球用户的喜爱,推动了智能手机的普及和发展。Linux是一款开源的操作系统,可以免费使用和修改,其问世改变了计算机科学的发展方向,推动了开源软件的发展,成为后来互联网时代的基石。
2023-05-30 00:14:33
375
原创 可持续能源技术改变世界
气候变化和能源安全是我们必须直面的问题,而可持续能源技术能够提供一个可持续的解决方案。随着技术的不断进步和应用的推广,我们相信可持续能源技术必将成为全球未来能源发展的主力。当然,这需要政府、企业和个人的齐心协力,共同为可持续能源技术的发展注入更多的力量和支持。与传统能源相比,可持续能源在使用过程中不会产生过多的温室气体和其他污染物,同时也不会耗尽地球上的自然资源。可持续能源技术的应用现状正在不断发展。一些国家已经在推广太阳能、风能、水能等可持续能源技术,并制定了一系列政策和规定,以促进可持续能源的发展。
2023-05-29 23:14:56
780
原创 Linux---GUN binutils
什么是GUN binutis?它是一个二进制工具集,默认情况下所有 Linux 发行版中都会安装这些二进制工具。实际大部分人应该是用过这些工具的,我一说大家就知道了。常用的二进制工具包括。工具用途nm列出目标文件中的符号size列出目标文件中各个段的大小和总大小,如数据段,代码段addr2line将程序地址翻译成文件名和行号objcopysection复制和删除objdump显示目标文件的信息和反汇编readelf显示有关ELF文件的信息strip从目标文件中剥离符号。
2023-05-28 22:51:04
975
原创 Linux---TP外设调试(ti,tsc2046)
另外关于匹配问题我们可以看到驱动文件与设备树都函数compatible = “ti,tsc2046”,所以理论上只要SPI没有问题(SPI是基础),就会正常匹配,我们也可以在驱动文件probe函数中添加打印以辅助判断或者阅读代码通过驱动文件所建立的节点以及对应打印进行判断。经过上面几步,如果一帆风顺的话可以看到/dev/input下面会产生新的event节点,使用手指点击TP,然后查看有无数值变化,如下图我们点击发现event可以正常上报且有变化产生,证明驱动整体是ok。3、tp的中断是否可以正常收到。
2023-05-03 23:22:13
2246
1
原创 Linux应用之参数解析函数---getopt()与getopt_long()
在Linux应用程序中往往运行时会带入参数,例如./xxx_tool -f filename -d portnum,这里-f 和-d后面都带有参数,再比如最基础的命令ls,- -help之后告诉你一大堆可使用的参数(如下图),例如短参数-a, 长参数–all。这里提及一个概念:在Linux命令行参数可以分为两类,一类是短选项,参数前加一个杠"-“,如-a -A都是,另外一类是长选项,长选项在参数前连续加两个杠”–",如–all,–author都表示长选项。
2023-03-11 22:04:56
830
原创 程序员的世界杯
在这个被定义为诸神黄昏的世界杯中,不断有真神转身远去,无论是苏亚雷斯,内马尔,还是C罗,都逃不过岁月这把刀,正所谓没有人永远18岁,但永远有人18岁,这便是竞技体育的残酷与魅力吧。
2022-12-13 20:47:56
256
原创 使用seq_file接口导出内核数据到应用层---seq_open()/single_open()
今天介绍另外一种方法---使用seq_file接口,关于该类接口在内核Documentation/filesystems/seq_file.txt中有详细的介绍,相比较于之前的方法其优势可以向应用层导出比较多的数据,例如大于1个PAGE_SIZE,同时驱动文件中我们不用关注复杂的缓冲区管理,这些内核自己处理,属于比较成熟的内核接口。
2022-11-24 11:40:18
1242
原创 Linux内核日志调试方法
本文档主要介绍在Linux系统下常用的一些内核日志调试方法 oops: 内核告知用户有不幸发生的最常用的方式。 进程上下文:进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。 中断上下文中:就是硬件通过触发信号,导致内核调用中断处理程序,进入内核空间,这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。
2022-10-24 10:45:58
4359
2
原创 Linux监控串口数据并写入文件-C语言demo
【代码】Linux监控串口数据并写入文件-C语言demo。程序是基于Linux操作系统,监控串口是否有数据,如果有数据就写入到文件系统中。Demo涉及串口初始化,poll函数监控,以及文件读写操作。
2022-10-08 16:45:01
1455
原创 ALSA架构应用程序aplay及amixer调用关系(应用层到内核驱动)
ALSA架构应用程序aplay及amixer调用关系(应用层到内核驱动)
2022-02-22 18:23:55
1277
原创 ALSA驱动asoc框架之Codec
一、Nau8810芯片系统框架图由系统框架图可以看出,输入端为差分MIC输入,输出端可以为MOUT或Speaker。Codec对外硬件接口通过Audio I/O和Digital I/O,其中Audio I/O一般传输的是音频信号为I2S或PCM,Digital I/O为控制信号一般为I2C。芯片引脚分布如下:二、Codec注册
2022-02-22 18:15:34
2100
原创 ALSA驱动asoc框架之machine(一)
从前面内容我们知道ALSA 驱动 asoc 框架主要包括 codec driver、 platform driver、 machine driver,其中machine是连接codec driver及platform driver的桥梁,我们本节内容来看看platform driver驱动。
2022-02-22 18:08:25
3095
原创 音频ALSA架构简介
ALSA(Advanced Linux Sound Architecture)即高级 Linux 声音架构。嵌入式移动设备的音频子系统目前主要是ALSA 驱动 asoc 框架,其中包括 codec driver、 platform driver、 machine driver 等。
2022-02-22 18:06:18
11215
1
原创 Linux---ALSA音频工具arecord、aplay、amixer使用
Linux---ALSA音频工具arecord、aplay、amixer使用
2022-02-22 17:49:32
9980
原创 Linux---input输入子系统设备驱动写法 input_allocate_device()、input_event()、input_sync()
Linux---input输入子系统设备驱动写法 input_allocate_device()、input_event()、input_sync()
2022-02-22 17:46:14
4442
6
原创 Linux---驱动属性文件添加、DEVICE_ATTR宏、device_create_file()及sysfs_create_group()
#include <linux/module.h>#include <linux/fs.h>#include <linux/errno.h>#include <linux/miscdevice.h>#include <linux/kernel.h>#include <linux/major.h>#include <linux/mutex.h>#include <linux/proc_fs.h>#i
2021-11-14 12:19:40
7388
1
原创 Linux字符设备驱动新写法
Linux 社区推荐使用动态分配设备号,在注册字符设备之前先申请一个设备号,系统会自动给你一个没有被使用的设备号,这样就避免了冲突。卸载驱动的时候释放掉这个设备号即可,设备号的申请函数如下:int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)函数 alloc_chrdev_region 用于申请设备号,此函数有 4 个参数:dev:保存申请到的设备号。baseminor:
2021-11-14 12:17:41
614
原创 Linux---应用层RTC测试程序与时间相关函数time()、gmtime()、localtime()使用
一、时间相关函数说明time_t time(time_t *timer)函数功能: 得到当前日历时间或者设置日历时间参数说明: timer=NULL时得到当前日历时间(从1970-01-01 00:00:00到现在的秒数);timer=时间数值时,用于设置日历时间;如果 timer不为空,则返回值也存储在变量 timer中。函数返回: 当前日历时间time_t是一个unsigned long类型。struct tm *gmtime(const time_t *timer)函数功能: 使
2021-11-14 12:16:50
2433
原创 Linux---自旋锁spinlock、信号量semaphore、互斥锁mutex介绍及各自对应使用场景
一、Linux 锁的介绍Linux中按照大类分为2种锁,睡眠锁和自旋锁。其中睡眠锁就是无法获得锁的时候,当前线程进入休眠状态,包括信号量semaphore、互斥锁mutex。自旋锁就是当无法获得锁时,不会休眠,一直循环等待,只有一种spinlock。
2021-11-14 12:15:27
4229
原创 Linux---select()实现高精度延时与alarm()定时器
一、select函数int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);设置timeout的值,而将其他参数都置为NULL,当内部时间耗尽后select便会退出。二、select延时程序实例#include <stdio.h>#include <stdlib.h>#include <time.h>#inclu
2021-10-24 12:04:33
1788
原创 Linux应用层定时器timer使用---timerfd_create()、timerfd_settime()、timerfd_gettime()
一、timerfd相关函数及说明#include <sys/timerfd.h>int timerfd_create(int clockid, int flags);int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itimerspec *old_value);int timerfd_gettime(int fd, struct itimer
2021-10-21 22:45:03
6333
原创 Linux---MISC杂项驱动
一、MISC 驱动简介MISC 驱动其实就是最简单的字符设备驱动,所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。MISC 设备会自动创建 cdev,不需要像我们以前那样手动创建,因此采用 MISC 设备驱动可以简化字符设备驱动的编写。我们需要向 Linux 注册一个 miscdevice 设备, miscdevice是一个结构体定义在文件 include/linux/miscdevice.h 中,内容如下:struct miscdevice { int minor
2021-10-06 21:42:08
447
原创 Linux---Pinctrl子系统与GPIO子系统
一、Pinctrl子系统pinctrl子系统主要完成工作:1、获取设备树中 pin 信息2、根据获取到的 pin 信息来设置 pin 的复用功能3、根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等pinctrl子系统源码目录:drivers/pinctrl,主要涉及 2 个对象: pin controller、 client device。前者提供服务:可以用它来复用引脚、配置引脚。后者使用服务:声明自己要使用哪些引脚的哪些功能,怎么配置它们driver
2021-10-06 16:31:27
2206
原创 使用Ubuntu挂载解析ubi文件与使用mkfs.ubifs、ubinize制作ubi文件
一、应用背景客户嵌入式系统启动即Crash,由于特殊原因没有打开抓取dump的功能,所以无法知晓客户系统Crash的原因。但基本确认是客户在文件系统中添加自己的应用程序启动后导致的,我们拿到故障机后导出rootfs分区对应ubi文件,需要将其挂载,然后排查核心文件是否被修改或者损坏或者其他原因导致Crash(因为原嵌入式系统挂载即Crash,我们需要使用Ubuntu挂载,然后排查)。UBI文件系统不能直接挂载,而是要用 nandsim 模拟出一个 mtd 设备,而且这个 mtd 设备要与 ubi 镜像的
2021-09-17 12:14:05
8598
原创 Linux休眠与唤醒---wakelock唤醒锁与autosleep功能使用
一、Linux系统休眠在嵌入式设备中由于省电功耗等原因我们需要让系统在不忙的时候进入休眠模式,Linux pm core提供给我们wakelock及autoslepp内核休眠机制。autosleep 和 wakelock是并行存在,只有 wakelock 唤醒锁全部释放且 autosleep 为 enable 时候系统才能进入休眠;二、autosleep功能节点路径为/sys/power/autosleep,该值为mem表示打开autoslepp功能,如果值为off表示关闭。如果没有此节点路径,我
2021-09-11 17:59:37
6822
Office2010.cjstyles.7z
2020-12-07
Office2007.cjstyles.7z
2020-12-07
HLK学习笔记.docx
2020-04-16
dosfstools.zip
2019-07-14
[嵌入式Linux.C语言应用程序设计].华清远见培训(完整版PDF-带书签).zip
2019-06-01
s3c2440开发板Jlink烧写配置
2017-10-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人