- 博客(84)
- 资源 (32)
- 收藏
- 关注
原创 一个常用的gpio驱动
分享一个gpio驱动,其中使用了gpio、pinctrl、irq、workqueue、input等知识,代码中有较详细的注释,不时可以来瞅一瞅!首先设备树中如下配置:&pio { touchsensor_pins_tp_int10: eint@10 { pins_cmd_dat { pins = <MT8163_PIN_32_EINT10__FUNC_GPIO32>; slew-rate = <0>; bias-disable; }; };
2022-05-20 13:51:16
1380
1
原创 左手力右手电,右手还定磁感线
左手定则、右手定则,初中的时候我们就学过,但二者老是搞混有句话叫:左手力右手电,右手还定磁感线,这句话是用来快速区分记忆的,意思是左手用来判断安培力与洛伦兹力,右手用来判断感应电流与感应电动势方向,右手还用来判断磁场方向,如下详细介绍:左手定则左手定则又叫电动机定则,它用来确定载流导体在磁场中的受力方向。左手定则规定:伸平左手使拇指与四指垂直,手心向着磁场的N极,四指的方向与导体中电流方向一致,拇指所指的方向即为导体在磁场中的受力方向。当带电粒子在匀强磁场中偏转时,我们知道磁场和粒子
2022-05-05 11:43:07
17925
原创 Rk3399—添加usb转串口驱动
有些时候我们板子上的原生串口不够用,需要通过usb转成串口使用,我们称之为u转串或u转TTL,u转串的芯片有ch340、pl2303、cp210x、ftxx等等,在adb下是可以看到rk3399 usb相关信息的,比如在adb下输入:lsusb查看usb信息Bus 008: 表明设备连接到哪条总线 Device 00x: 表明这是连接到总线上的第x台设备 IDxxxx:xxxx: 设备的供应商ID与产品ID,即VID与PID插上我们u转串设备,然后查看,发现多了一个usb在...
2022-04-21 12:37:24
3322
4
原创 从源代码到可执行文件
请简述编写的程序从源代码到可执行程序的过程,这是一个屡见不鲜的问题,面试的时候经常会被问到,编写的程序到成为处理器能够执行的二进制代码就四个步骤:预处理编译汇编链接...
2022-04-20 14:58:48
1215
原创 《linux内核设计与实现》读书笔记(三)linux进程管理
进程与线程①进程就是处于执行期的程序,通常进程还包含挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程,还包含存放全局变量的数据段等。②线程是进程中活动的对象,每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作(比如,创建,销毁等)都是有内核来实现的。③我们使用操作系统就是为了运行用户程序,而内核调度的对象是线程,对linux而言,不严格区分进程和线程,线程就是一种特殊的进程,或
2022-04-15 14:57:38
1192
原创 《Linux内核设计与实现》读书笔记(二)从内核出发
内核源码获取①可以直接登录linux内核官方网站http://www.kernel.org,可以随时获取当前版本的linux源代码②也可以使用git工具从远程仓库下载,如下:git clone git@gitee.com:mirrors/linux_old1.git这是码云上的linux镜像仓库,国内通过这个仓库下载速度很快,并且每日会同步一次,可以看到目前为止已经有上百万次提交记录内核源码结构 目录 说明 arch
2022-03-25 11:13:57
1731
原创 《Linux内核设计与实现》读书笔记(一)Linux内核简介
Unix的历史①Unix诞生于1969年,至今仍然被认为是现存操作系统中最强大和最优秀的系统。②Unix起源于一个失败的多用户操作系统Multics,Multics终止而Unix萌生。③1973年整个Unix操作系统用C语言进行了重写,为后面各种平台的移植铺平了道路。④至今,Unix已经成为一个支持抢占式多任务、多线程、虚拟内存、换页、动态链接和TCP/IP网络的操作系统。Linux简介①1991年 芬兰赫尔辛基大学的linus因不能随心所欲的使用强大的Unix系统而苦恼,于是开发了
2022-03-08 17:17:50
994
原创 linux命令行前面内容修改
root@ubuntu6:~#首先我们来认识一下linux命令行前面内容的含义:符号 含义 root 表示当前登录的用户 @ 是一个分隔符号 ubuntu6 表示你的主机名 ~ 表示你当前所在的目录 # 表示你当前登录用户的身份是root超级用户 有时安装完linux系统发现这些个用户名跟主机名太长,亦或是不是我们喜欢的名字,我们想把它修改,那么可以修改.bashrc文件,这个文件在/home/用户名/下,vim .bashrc 打开找到.
2022-03-08 15:11:24
2448
原创 Rk3399—调试串口用于普通串口
在开发过程中,有时遇到外设较多,串口不够的情况,而另外扩展串口又极为不便,此时可以使用调试串口(log信息打印串口)做为普通串口通讯!Linux中调试串口的配置是通过bootargs环境变量传递的,通过该参数告诉内核使用哪个串口以及波特率作为调试串口,bootargs可以在设备树(dts)下配置,chosen里有属性项bootargs,启动linux时,内核会使用chosen中定义的bootargs,如果没有定义bootargs,linux会使用kernel默认的bootcmdline。如果bootcm
2022-03-04 20:12:15
2229
原创 linux应用:串口模块编程
Linux下串口是比较常用的通讯接口,有直接用串口通讯的,也有用USB转串口通讯的,还有其它方式转串口的,但不管是以什么方式,以为在linux下可以说一切皆文件,操作文件设备基本都是一样的,都是使用open,read,write,ioctrl这几个函数进行操作,串口的应用编程也不例外,本例程中的串口程序是一个比较完善的串口模块,封装了比较丰富的API,包括串口波特率、数据位、校验位、停止位等参数设置的API,方便串口端口初始化以及读写参数,开发应用可以直接使用!一、查看系统中的串口设备如下所示:输入
2022-02-26 11:00:27
2384
原创 linux下最最常用的20条指令,掌握这些就基本够用了
ls:【list directory】显示目录下内容ls //不带参数,显示所有文件和目录ls -a //显示所有文件,包括影藏的文件ls -l //显示目录中文件详细信息,等效于llls -F //区分显示目录跟文件cd:【change directory】切换目录cd / //切换到根目录cd - //切换到上次工作路径cd ~ //不带参数跟带~参数一样,都是切换到home目录cd ../ //回退到上级...
2022-02-25 16:46:22
964
原创 linux命令行常用快捷键
SecureCRT作为linux常用的远程连接工具,其有很多常用的快捷键,在使用的过程中如果能熟练运用下面这些常用的快捷键,则能大大提高工作效率!1、补全tab:命令或路径补全2、光标跳转Ctrl + a 光标回到行首,a就是ahead(前头)的缩写Ctrl + e 光标回到行尾,e就是end(末尾)的缩写Ctrl + f 光标向右移动一个字节,f就是forward(向前)的缩写Ctrl + b 光标向左移动一个字节,b就是back(回退)的缩写3、快速删除...
2022-02-17 16:25:23
3276
原创 简单又神奇的container_of
看linux内核代码很多地方都用到了container_of,乍一看它的定义,感觉有点懵,不过实际了解了却发现实现的非常简单,由这个宏引发了我几点感慨:①一行代码的威力竟有如此之大②开发内核的大佬,恐怖如斯③没事要多看看内核代码为何会有这些感慨,且听我细细道来...一行代码的威力说到一行代码的威力,且看container_of(ptr, type, member)宏的作用,定义如下:/** * container_of - cast a member of a structu
2021-12-23 14:35:24
1227
原创 scons构建mdk工程
通过scons构建出的不带操作系统的工程,可通过如下链接下载:scons-mdk.zip-嵌入式文档类资源-优快云下载早就发现scons构建工程很方便也很省事,用起来很爽,但之前试过多次都没成功,网上也很少介绍这方面的资料,最近闲的蛋疼又捣鼓了一阵,终于成功了,记录一下之前遇到的坑!No module named building之前一直不成功,比如遇到如下这种情况:scons: Reading SConscript files ...ImportError: No module n
2021-12-16 15:11:03
2879
原创 变量命名缩写参考
有时候一个变量命名要想上半天,怎么命名合适,怎么才不显得别扭,怎么才显得更舒适,下面提供一些参考,如果某个变量意义一个单词无法表达,可以用多个单词缩写然后用下划线间隔表达,譬如:文件地址:file_addrAaddr = addressapp = applicationarg = argumentasm = assembleasyn = asynchronizationauth = authorization / authenticationavg = averageBbuf
2021-11-30 15:29:53
1143
1
原创 MTK开发 — touch key驱动
本驱动的大概流程是:加载驱动module_init—》注册platform驱动—》解析设备树—》申请gpio与中断—》注册input设备—》创建工作队列用于中断下半部其中涉及驱动相关的知识点有设备树、platform设备驱动总线、gpio/pinctrl子系统、input子系统、中断上/下半部、软中断与工作队列的使用如果要将以上每点都讲清,实在是不容易的,每个知识点都可以长篇大论,本人更喜欢实操,直接上代码,代码中有比较详细的注释,看看应该都能懂!设备树定义了一个touchsensor节
2021-10-13 17:03:14
790
原创 linux驱动 — regalator使用
Regulator,即LDO(low dropout regulator),低压差 线性稳压器,简称稳压器。本篇我们只讨论regalator api的使用,regalator 常用api如下:/* regulator get and put */struct regulator *__must_check regulator_get(struct device *dev, const char *id);struct regulator *__must_check devm_regulator
2021-10-11 11:12:32
583
原创 linux驱动 — 常用API
①of_find_compatible_node 函数 of_find_compatible_node 函数根据 device_type 和 compatible 这两个属性查找指定的节点, 函数原型如下: struct device_node *of_find_compatible_node(struct device_node,*from, const char *type,const char *compatible) 函数参数和返回值含义如下: from:开始查找的节点,如果为.
2021-10-08 14:58:04
1635
1
原创 MTK开发之—修改关机充电动画
关机充电相关文件修改关机充电动画,首先要关注的几个比较重要的文件:①/device目录下的ProjectConfig.mk文件,这是安卓端对boot、kerner传参的配置文件②/vendor/mediatek/proprietary/external/libshowlogo下的cust_display.h文件,这是定义动画logo形状以及位置的头文件③vendor/mediatek/proprietary/external/charger,关机充电实际就是个应用,就在这个目录下,入口即ma
2021-09-17 10:30:55
2009
转载 Linux-Kconfig总结与分析
发现一篇很优秀的博文,转载分享一下!转载:https://www.cnblogs.com/lifexy/p/10292742.html使用Kconfig时,需要注意的地方1.在Kconfig中定义的配置宏,前缀都没有"CONFIG_",只有编译内核时,自动生成autoconf.h才会出现前缀.2.如果XX_defconfig板卡配置文件中定义新的宏=y时,而在Kconfig并没有声明它,则内核编译出来的autoconf.h里也不会定义它的.3.如果XX_defconfig板卡配置文件中没有设
2021-08-17 19:40:34
1474
原创 linux驱动 — i2c设备总线驱动
前言linux下设备跟驱动是分开的,他们通过总线进行匹配,设备由设备树负责,在设备树中添加相应的结点,系统会自动向总线注册相应的设备,而驱动开发需要负责的主要就是驱动的编写,向总线注册驱动,如果通过of_device_id中的.compatible跟设备匹配成功进执行其中的probe函数。i2c结构体对于i2c设备我们都不陌生,i2c是一种实际存在的物理总线,不像有些字符设备,使用的是虚拟的platform总线,实际上是不存在的,是虚拟出来的总线。在linux下写i2c驱动,掌握4个结构体就够了
2021-08-12 16:36:08
894
原创 linux应用:多线程编程
线程在linux应用开发中是非常常用的,因为有些功能需要实时响应,而有些功能比较耗时,从而引入了并发的概念,即任务调度与时间片轮转,目的只有一个:更高效的利用cpu。那么如果不用线程用别的成吗,有没有其它的可取代线程的呢,比如进程、比如定时器?单纯从功能上说是可以的,但是严格意义上来说没有什么能取代多线程的地位。一、线程跟进程比较:1、线程是程序最基本的运行单位,也是参与系统调度的基本单位,而进程不能直接运行2、线程间切换的开销比进程间切换开销小,创建的速度也比进程创建速度快的多3、系统为.
2021-07-28 21:10:46
232
原创 一个函数超过1000行?
今天我就见到了一个函数超过1300行的。。。今天维护公司的一个老产品,因为要清库存,有一些bug需要修复,开发这个产品的那些同事早已不知去向,查了下git上的提交log,开发过这个产品的有好几个人呢,本来就是在炬芯方案上做的二次开发,现在到我这不知道几手了,有问题,那就查代码改呗,不看不知道,一看吓一跳,什么牛鬼蛇神写的,全局变量满天飞,一个函数动辄几百行,还没什么注释,更有好些函数是上千行的,我倒是不奇怪,几年前我就领教过上1000行一个函数的代码,逻辑重复混乱,TM谁写的,真想揪出来让他把它吃掉。。
2021-07-14 18:24:38
532
原创 人生的意义是什么?
我时常在想,上班的意义是什么,人生的意义又是什么?这份工作是我热爱的吗,这辈子就这么按部就班的过下去了?似乎每隔一段时间我都会迷茫一段时期也许是没有目标,也许是没有信仰,,人如果没有目标跟咸鱼又有什么区别在网上看到这样一段话:世人慌慌张张,不过图碎银几两,偏偏这碎银几两,能解世间惆怅。可让父母晚年安康,呵护幼子成长。但这碎银几两,也断了儿时念想,让少年染上沧桑,压弯了脊梁,让世人愁断肠。世人之所以慌慌张张,是怕来不及,是患得患失在股票论坛里经常看到一些人发今天的收益如何如何,
2021-07-08 15:56:15
190
原创 MTK开发之cpu核开关与频率调节
一、最近碰到MTK芯片cpu时常跑满,四核又经常变为两核,导致各种卡顿,放音乐都卡,所以想强制让它跑四核,让系统跑的流畅一些。1、首先通过adb查看系统cpu有几个核心在/sys/devices/system/cpu目录下,ls一下就可以看到,如果是四核,就是cpu0、cpu1、cpu2、cpu3,如果是双核,就没有cpu2和cpu3。2、查看cpu的某个核有没有启用比如查看cpu0有没有起来,可以查看cat /sys/devices/system/cpu/cpu1/online,0表示
2021-07-07 18:29:45
5865
4
原创 ADB常用指令
adb工具的全称是Android Debug Bridge:即android调试桥梁是安卓下开发非常方便的调试工具。adb工具链接如下: https://pan.baidu.com/s/1tPBrxKas3lM5jHnmEpDiVQ 提取码: cdhd无需安装,解压就可以用,将路径添加到环境变量path,就可以通过cmd在命令行直接使用...
2021-06-18 18:37:39
703
原创 Linux下开发怎样才算入门了?
记得开始学单片机的时候,也很想知道自己到底学的怎样了,到了什么水平,到处问人单片机开发怎么才算入门了,最后老师跟我说:能做一个万年历出来就算入门了于是用单片机控制显示器做一个万年历就成了我的目标,通过按键进行日期设置与时间调整,能区分闰年闰月,设置后的时间需要断电保存等。后面终于做出来了,并且显示方面我用了两种实现方式(数码管与LCD1602),当时欣喜若狂,自己心里面终于有底了,总算是入门了。这个万年历在今天看来,是挺简单的,不过在当时也确实是一个比较全面的练手项目,到现在为止我仍然认为这是单片机的
2021-06-15 23:06:55
1168
10
原创 嵌入式软件架构设计
一、前言小生做MCU方面的开发已经很多年了,记得当初开始做项目的时候,实现功能就是我的目标,基本不会关注其它方面,功能的实现已经够让我折腾的了,也没有多少精力关注其它方面,后面慢慢对代码风格、编码规范有一定的讲究,有些代码看起来令人赏心悦目,而有些却不忍直视,再后来发现有些功能模块在一个产品上做了,然后换一个平台(mcu)后,又得调一遍,有些甚至调了一遍又一遍,多几次之后真是烦躁,哲学上有句话叫"人不能两次踏入同一条河流",而我却是一个坑踩了一次又一次,直到实在受不了了,我决定"再也不踩了",于是,软件框
2021-06-02 23:40:21
4447
23
原创 linux驱动 — 中断下半部之tasklet&workqueue
前言linux中断下半部是linux中断处理中非常重要的一个组成,如果没有下半部系统很多情况都不能正常工作,所以我们如果用到了中断,比如gpio中断、定时器中断等最好将大部分工作都放到下半部去处理,中断中只做标记跟激活下半部的工作,尤其是那些需要休眠的、有阻塞的、或者耗时长的处理必须放到下半部的work_queue中,别问我为什么,因为你不这么做的话系统跑到这里就挂掉了。。。Linux实现下半部的机制主要有软中断、tasklet、工作队列和线程化irq,不过基于实际开发中的常用性,本篇只介绍taskle
2021-05-11 17:18:07
429
原创 MTK开发之—为上层提供简易操作文件
背景在实际开发中,底层驱动往往要暴露一些接口供上层应用,比如需要上层对一个gpio进行操作,应用层没办法直接去控制gpio,只能通过驱动层来间接调用,方式有很多,可以将gpio封装到一个字符设备中,或者直接用misc类注册等等,因linux下一切皆文件,我们也可以在驱动层将gpio封装成文件,让应用层操作文件方式来操作gpio;想必做过mcu开发的朋友对AT指令不陌生,AT指令后面加 ‘?’ 号表示查询,加 ‘=’ 表示设置,同样的,在应用层或者adb下,我们可以通过cat与echo对一个文件进行读写,
2021-04-30 16:43:42
375
1
原创 git 使用备忘录
前言网上与git相关的文章已经有很多了,其中有不少写的很优秀的文章,所以本篇对git的使用就不再详细赘述,本篇列出的是一些跟git相关的指令,与平时使用git时遇到的一些问题处理方法。一、git仓库相关的网址1、Git官网:https://github.com/这个网站因为服务器在国外,所以访问一般比较慢,我们国内相应的有码云2、码云官网:https://gitee.com/可以很方便的将git上的仓库导入码云3、阿里云:https://signin.aliyun.com/这个也不错,不过企
2021-04-28 20:14:35
366
原创 MTK开发之—添加aw21024 i2c设备驱动
从供应商处拿到一驱动led模块的 i2c设备驱动,人家驱动已经基本给我们写好,我们需要做的就是将驱动添加进我们的内核,烧录进我们的板子为我们所用,aw21024驱动与资料:https://download.youkuaiyun.com/download/maodewen11/18171562第一步:修改设备树首先按要求将设备树信息添加进我们的设备树文件:/kernel/arch/arm64/boot/dts下的dts文件相应的gpio需要改为我们板子对应的gpio口,例如我的板子aw21024挂载到的是i2c-2
2021-04-27 17:58:39
2474
原创 MTK开发之—最简单的触摸按键驱动
现在比较喜欢直接上代码,代码也不算难,就直入主题了!本程序实际包含了设备树、pinctrl子系统、gpio中断、工作队列等的使用,是一个较完善的触摸按键驱动,已在MTK8163上验证!代码实例#include <linux/irq.h>#include <asm/irq.h>#include <asm/io.h>#include <linux/string.h>#include <linux/gpio.h>#include <
2021-04-27 16:13:29
909
原创 linux驱动 — switch_dev类设备的使用
前言在项目中碰到有人用switch_dev_register注册了switch_dev类设备,并且应用层能读到它的状态信息,感觉挺好奇,于是网上搜了些资料,自个又琢磨了一下,算是理解了,现在整理一下。switch_dev是一个开关设备类,跟其它很多类一样的,像misc类,都是对一类设备的总称,使用起来很简单,大部分工作内核已经给你干了,通过switch_dev_register函数注册switch_dev类之后,系统会自动在/sys/class下生成你定义的文件夹,可以进入/sys/class/swit
2021-04-25 20:39:22
2563
原创 linux驱动 — timer定时器的使用
前言定时器是我们最常用到的功能,一般用来完成定时功能,本章我们就来学习一下 Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数,本章我们就来学习一下这些和时间有关的功能。一、普通定时器使用这种定时精度低,对实时性要求不严格的场合可以用,内核中使用 CONFIG_HZ 来设置自己的系统时钟。打开文件 include/asm-generic/param.h,有如下内容:# unde
2021-04-25 19:54:33
1074
原创 MTK开发之—音量大小修改
上电默认音量修改文件路径:/frameworks/base/media/java/android/media/AudioSystem.java找到DEFAULT_STREAM_VOLUME 数组,其中定义的就是各种音频流默认音量大小,比如语音呼叫、系统音量、打电话、播放音乐、闹钟等等; 如下设置的默认音量均是7. /** * M: modify the default stream volume @{ */ public static int[] DEFAULT_STRE
2021-04-21 10:46:46
1515
原创 MTK开发之—开机永不灭屏
步骤一:修改配置文件文件路径:/frameworks/base/packages/SettingsProvider/res/values/defaults.xml将<integername=“def_screen_off_timeout”>6000修改为:<integername=“def_screen_off_timeout”>-1步骤二:修改电源管理文件源码/frameworks/base/services/core/java/com/android/server/po
2021-04-20 13:52:58
1719
2
linux下串口模块程序
2022-02-26
Qt操作Excel文件
2020-12-03
linux source code.zip
2020-06-02
Linux-C编程API函数(掌握这些足够).pdf
2020-06-02
DiFi MQTT服务器测试教程(PC测试)
2018-07-18
Linux-C编程常用API接口-函数
2018-07-18
RT-Thread编程指导手册
2018-04-27
各种CRC16校验C语言程序源码
2014-10-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人