- 博客(202)
- 资源 (2)
- 收藏
- 关注
原创 STM32 HAL库函数HAL_SPI_Receive_IT和HAL_SPI_Receive的区别
带IT后缀的版本只开启中断,实际的接收在中断回调里完成。
2023-11-18 17:23:58
605
原创 从Linux的tty_struct指针获取驱动上下文
ctx = container_of(tty->port, struct gpib_tty_ctx, port);
2023-10-21 12:05:02
430
原创 将ISP DMA写到DDR的数据unpack成可被7yuv预览的RAW图
ISP DMA的特点是一端字节对齐访问,一端流式访问,且净荷数据不一定是8bit的整数倍
2023-04-21 10:19:07
442
原创 对匿名联合体的一些理解
概念匿名联合体是一种语法糖,用于定义结构体内一类互斥的字段,但这些字段从语义层面上来说又是跟结构体内其他字段平级的。它跟匿名结构体的语法类似,但用处感觉比后者更大些。注意事项1. 可以定义多个匿名联合体,只要字段不重复即可,匿名结构体同理。2. 包含匿名联合体的`命名类型`不一定非得是struct,也可以是另一个union,代表`互斥`场景内的`子互斥`场景。
2022-04-16 10:54:23
750
原创 移植QT程序到petalinux平台
petalinux不带GCC,无法在里面编译QT应用,本文选择在arm版ubuntu里编译,再部署到petalinux
2021-12-25 19:11:39
1734
2
原创 将USB转串口驱动pl2303从5.10内核向后移植(back port)到4.15内核
背景公司的USB转串口设备是绿联的,在windows上识别为[Prolific 旺玖科技](Prolific 旺玖科技股份有限公司)的pl2303系列,但是在ubuntu 1604.4(内核版本4.15)上无法驱动。运行lsusb能看到它的product id是0x23c3,浏览公司ftp上几个linux内核源码包,发现4.19也不支持该设备,支持的起码是5.x内核。失败的尝试:升级内核到5.10在1604上编译5.10内核,安装后启动失败。搜索资料得知ubuntu LTS版本包含2种内核,一种是
2021-11-20 08:24:15
560
原创 让运行ubuntu20.04的笔记本电脑实现关闭盖子自动休眠
背景每次关盖都不休眠,而是睡眠解决办法默认安装的ubuntu不添加swap分区,需要先resize2fs加fdisk缩小主分区,然后用fdisk将腾出来的空间划成swap分区再解决grub的问题:Oct 7 11:10:08 whp-Inspiron-5537 steam.desktop[4837]: LuaDbg - Debugging stoppedOct 7 11:10:08 whp-Inspiron-5537 steam.desktop[4837]: CSteam3Client::S
2021-10-10 10:34:49
1802
3
原创 ubuntu自动登录tty终端的最简方法
背景在嵌入式系统经常需要自动登录tty,以实现业务程序开机启动的效果。网上有篇文章ubuntu自动登录tty1(shell,text)配置转发挺多,但我弄明白原理后,觉得可以进一步简化,经测试,简化成功。自动登录原理修改/etc/init/tty1.confUbuntu默认的tty1.conf内容如下# tty1 - getty## This service maintains a getty on tty1 from the point the system is# started un
2021-09-28 17:34:59
3761
原创 获取Linux内核卡死前的日志
背景在Linux驱动调试工作中,如果遇到内核卡死,只能断电复位,复位后打开/var/log/syslog文件,会发现卡死时的日志都丢了。原因我猜是内核卡死后文件系统的缓存无法同步到磁盘,于是掉电时卡死前的日志就丢了。而这些日志对我们定位问题意义重大,有了这些日志,我们才知道卡死的原因是空指针?还是死锁?还是死循环?解决方案1 串口转发连接设备串口到上位机,然后配置好串口调试工具的波特率等参数,同时下位机在uboot或grub里配好console参数值(一般是console=/dev/ttyS0,1
2021-09-10 18:16:30
4445
原创 将sudo命令自动化执行
背景在嵌入式开发环境,我们经常需要执行一些特权指令,但是每次执行执行都要手工输入密码(无法在命令行参数里直接传递密码),如果能将这些操作自动化就好了。解决办法,使用expect程序expect命令是一个能自动化执行sudo等交互式命令的程序。安装嵌入式设备一般不能连外网,所以需要离线安装,expect包依赖tcl-expect包,所以需要一起下载一起安装apt-get download tcl-expectapt-get download expectscp tcl-expect_5.45-
2021-09-07 11:33:31
493
原创 用bash分割字符串
背景最近负责移植固件升级功能,发现原来的升级脚本将固件的路径名和文件名不做区分,导致脚本必须跟固件在同一路径下才能正确调用,殊为不便。上代码:sudo mkdir -p /lib/firmware/F260/sudo cp $1 /lib/firmware/F260/echo Updating $2 ...echo F260/$1 > /sys/class/misc/PCIE_SubFpga1/d_${2}_update脚本命令行第一个参数$1就是固件的路径名,$2是器件名(表明FPG
2021-09-02 14:44:12
1449
原创 查看浮点数的内部存储格式
浮点数所有浮点数的内部存储格式都遵照IEEE 754标准。如果想验证一下自己的电脑是否真的如此,就需要查看浮点数在内存中的表示,而这里存在一个强制类型转换的注意事项:不要直接强转浮点数,而是强转浮点数的内存地址因为强转浮点数对应的编译器操作是向下取整!验证代码#include<stdio.h>int main(){ float a; printf("enter a float:"); scanf("%f", &a); printf("%x
2021-08-31 11:52:57
266
原创 USBTMC设备端驱动的一些开发心得
背景最近2个多月主要在忙USBTMC设备端驱动的重构,原来的驱动是参考gtzhai的github工程linux-driver-usbtmc-gadget,然后根据公司需求做了一堆单片机风格的魔改,可读性惨不忍睹,BUG不多但都很棘手,于是决定重构。重构后所有BUG都解决了,没解决的也知道为啥不能解决。为了对自己这段时间死掉的脑细胞聊表纪念(压力也有点大),决定将心得分享一下。重构思路首先让驱动能实现建链版本的驱动充斥着关中断操作,这使得设备不出错则已,一出错就是整机卡死的严重故障。于是我首先将所有
2021-08-23 14:52:12
2423
5
原创 让Linux下位机跟Windows上位机自动时间同步
需求来源嵌入式系统通常分上位机和下位机,如果二者的日志时间戳能一致,则对定位问题价值巨大。另外有些原型系统的RTC时钟没装电池,更需要从外部获取真实时间,否则每次开机都是1970年1月1号。如果能够让下位机每次开机都跟上位机对一次时,即同步一下时间,则可满足上述需求,那么怎么对时呢?解决方案:NTPNTP又叫网络时间协议,是一种用于时间同步的网络协议。配置Windows为NTP服务器Linux和Windows都有NTP客户端,但是Windows作为上位机,必须还得具备NTP服务器的能力,幸好,
2021-07-19 16:31:06
1174
1
原创 Linux内核函数wait_event_interruptible的condition参数踩坑
wait_event简介wait_event_interruptible(以及wait_event打头的其他变体)是Linux的wait queue机制提供的线程同步接口,它的定义如下#define wait_event_interruptible(wq, condition) \({ \ int __ret = 0; \ might_sleep(
2021-07-06 11:55:28
1103
原创 一种让Linux窗口应用运行在全屏模式的简单粗暴方法
导航思路操作步骤禁用默认DM(Display Manger)创建自己的startx脚本让自己的startx脚本开机启动重启总结思路在嵌入式Linux系统里,整机一般只运行一个应用,并且是开机自启动,所以用不上Display Manager,可以直接替换成应用。替换后,就没有窗口系统了,应用也就不会带上窗口系统的标题栏、关闭按钮等,实现被动全屏。操作步骤在Ubuntu 1604上验证通过,其他环境大同小异禁用默认DM(Display Manger)修改/etc/X11/default-displ
2021-06-18 11:52:57
2791
2
原创 实现一个简单的日志收集程序
背景之前定位过一个fclose导致的性能问题,最终结论是日志收集程序的主线程调用fclose函数,触发操作系统sync磁盘操作,导致上游业务程序被阻塞在某条随机的打印日志语句里,最终扰乱业务。当时为了规避问题,将日志收集程序在系统启动脚本里注释掉了,并提醒业务同事尽快重构日志收集程序,没想到业务的同事一直不改,直到最近因为另一个业务问题,牵扯到驱动,于是我决定替他们重构。解决方案思路触发sync磁盘操作的fclose必须挪到子线程。主线程的写日志操作不能被子线程的fclose卡住,否则拆分线程
2021-05-06 16:40:27
357
原创 定制hexdump的打印输出格式
背景hexdump是Linux系统下一个以十六进制或ASCII形式输出文件内容的工具,通常-b -c -C -d等选项提供的打印格式就够用了,但有时板卡输出的数据格式比较特殊,想用文本比较工具(例如kidff3)比对的话,就需要将hexdump的输出指定成匹配的格式自定义格式串通常使用-e选项传递自定义格式串。简介hexdump的自定义格式串由任意多个格式单元组成每个格式单元由3个基本元素组成:迭代数字节数模式串模式串这个是最好理解的,跟printf的模式串非常像,%d表示打印十进
2021-04-26 16:07:22
1683
原创 解决Linux下svn命令总是提示输入密码问题
可能的原因这个一般是因为密码没被保存,或保存的方式跟读取的方式不匹配查看SVN认证配置dh@dh-desktop:~/7569_32/fpga_mainboard$ svn auth------------------------------------------------------------------------Credential kind: svn.simple认证领域: <http://192.168.20.187:80> My Subversion Reposit
2021-04-01 11:12:41
4665
2
原创 使用putty和vcxsrv实现win10运行Linux GUI程序
背景有些时候要远程运行开发板上的Linux GUI程序,但VNC经常抽风用不了,特别在Ubuntu 1604下面更是如此,所以需要用ssh客户端的X11转发功能,来将Linux GUI程序通过unix domain socket发给本地X server的视频流数据,转换成inet socket并转发到运行在Windows的X server操作步骤PuTTY配置PuTTY是一款支持X11端口转发的ssh客户端,要使能该特性,在创建session时按下图配置VcXsrv配置VcXsrv是一款运行在
2021-03-31 10:55:06
1334
1
原创 【俗话编程】什么是类
类就是基因,生命个体就是对象实例,计算机上我们只跟对象打交道,就像自然界我们只跟生命个体打交道一样类在实例化对象时需要消耗内存等资源,就像生命孕育新生命时需要消耗营养。类能实例化多少对象取决于资源容量,本身是贪婪的,基因也是如此,它希望殖民整个宇宙对象有生命周期,类没有,就像动物有生老病死,基因没有。当然如果拉长时间尺度,基因也会产生和灭绝,就像java的类也会加载、卸载一样类之间存在继承树,就像物种树、基因树一样类包含了属性和行为,就像基因也编码了性状跟本能类也会演化,但突变不像生命个体那样自.
2021-03-24 08:57:23
509
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人