- 博客(21)
- 资源 (3)
- 收藏
- 关注
原创 iproute2 ipv6地址设置源码分析
iproute 作为网络接口的设置工具具备我们大部分需要的功能。以设置ipv6 地址为例来分析一下它的源码它的实质其实是与内核建立一个socket通信,通过建立的fd进行网络接口的设置和信息读取。简单来说,就四步:建立与内核的连接-> 发送数据到内核 -> 从内核读取数据 -> 关闭连接建立与内核的连接int rtnl_open(struct rtnl_handle *rth, unsigned int subscriptions){ return rtnl_open
2021-11-29 14:43:50
1949
原创 记录遇到的内存泄漏
记录一下内存泄漏线程使用pthread_create()创建线程时,设置属性为NULL,线程退出时该线程占用的资源不会释放。比如遇到过反复创建某个线程后返回,会导致其占用的虚拟内存不断增加,最终导致系统资源不可用。设置线程属性 pthread_t recv_pthread; pthread_attr_t attr; pthread_attr_init(&attr); /*free pthread sources*/ pthread_attr_setdetachstate(&
2021-06-02 15:16:46
192
原创 i2c 16位寄存器的读写
/* Ensure address is not busy */int set_slave_addr(int file, int address, int force){ /* With force, let the user read from/write to the registers even when a driver is also running */ if (ioctl(file, force ? I2C_SLAVE_FORCE : I2C_SLAVE, address)..
2021-04-30 15:30:04
4464
1
原创 主线程传实参给子线程的时效性问题
主线程传实参给子线程后,主线程退出,这时候如果参数实在主线程启动时才定义的,那么主线程退出,传给子线程的参数也失效了。解决方法参数定义为全局变量,传到子线程时,再开一个变量接收保存这个参数static int a;void *pthread(int *a){ int b; b=*(*a);}还一种方法就是在主线程开辟一片内存空间,存储变量,在子线程用完了在释放struct test{ int c; int d;};vo.
2021-03-19 17:29:10
254
原创 linux 在shell脚本截取log文件内容
应用在后台跑,log需要保存下来,但是很多时候只需要最后出现的log,所以清除log,释放空间就变得很重要清除log很简单,但是要保证log文件还可以继续保存log就有问题了。如果用sed去保存的话,会改变文件id,导致应用不能继续写这个文件,你可以在应用里面判断文件描述符是否失效,要重新fclose,fopen如果只想在脚本执行,不想改应用代码,那样就要保证文件id不变,可以把截取好的log保存到一个临时文件截取log,可以根据文件大小来判断log_szie=$(du -b $log_
2021-01-08 17:16:03
1187
1
原创 yocto编译do_rootfs: Could not invoke dnf. Command
ERROR: fsl-image-validation-imx-1.0-r0 do_rootfs: Could not invoke dnf. Command '/home/imx8_release/imx8_yocto_bsp/imx8mmevk_wayland/tmp/work/imx8mmevk-poky-linux/fsl-image-validation-imx/1.0-r0/recipe-sysroot-native/usr/bin/dnf -y -c /home/imx8_release/i.
2021-01-06 17:28:03
4810
原创 利用strstr来定位并且读取文件中的数据,strncpy和memcpy内容不对
while (fgets(buf, sizeof(buf), fp) != NULL) { JRD_OEM_LOG_INFO(JRD_OEM_LOG_ERROR,"%s",buf); point=strstr(buf," "); if(point==NULL){ JRD_OEM_LOG_INFO(JRD_OEM_LOG_ERROR,"can not find space\n"); fclose(fp);...
2020-11-06 09:56:45
386
1
原创 yocto编译,文件系统同一个命令,执行结果不一样
yocto编译,同一个命令,执行结果不一样这个是因为这个命令来自的命令集合不一样busybox是linux其中一个命令合集,如果把packagegroup-core-full-cmdline这个包去掉,很多命令就来之busybox里面在没有去掉这个包的文件系统查看lrwxrwxrwx 1 x root 12 9月 16 09:47 tar -> /bin/tar.tar-rwxr-xr-x 1 x root 416280 9月 20 2019 tar.tarlrwxr...
2020-09-17 09:39:31
500
原创 C语言malloc和free中的bug
malloc和free都是搭配着使用,防止内存泄漏的,而且释放内存空间,能够让系统有更大空间处理更多事件但是最近在使用时遇到这么个问题 unsigned char *head_info_buf; head_info_buf = (unsigned char*)malloc( sizeof(unsigned char) * (head_size) ); fseek(fp,head_pos,SEEK_SET); fread(head_info_buf,head_size,1,fp); head
2020-06-04 11:10:38
490
原创 linux下 gpio 模拟 串口uart 驱动
linux下 利用gpio口模拟 串口uart接收数据设计思路串口数据类型在没有校验位的情况下,串口第一位数据(起始位)是一个低电平,接着是8位的数据位,然后接着一个结束位(一个高电平)。所以我们设计是:1.利用起始位作为一个触发中断的条件,就是将接收数据的gpio口作为中断口,下降沿触发;2.定时器开启,这里需要开启两个定时器,第一个计时器是时钟周期的一半(1/(波特率*2))第...
2020-05-06 09:53:23
3245
7
原创 mcp2518驱动调试
只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效The SPI in the microcontroller must be configured in mode (0,0) or (1,1) in 8-bit operating modeSpi-imx.cspi_imx 30830000.ecspi: mode_bits = 71(0x47)...
2020-04-13 11:15:20
8759
10
原创 解决:内核没办法正常挂载文件系统,错误log:devtmpfs: error mounting -2
s32v234sbc的升级后第一次总是出现文件系统没办法挂载的情况错误log:devtmpfs: error mounting -2跟踪代码,他在内核 drivers/base/devtmpfs.c中/* * If configured, or requested by the commandline, devtmpfs will be * auto-mounted after ...
2020-02-27 10:53:49
7087
原创 imx6q:在应用层对视频输入源做裁剪(crop)不生效
在应用层中,经常需要用到裁剪视频的输入源,网上给的接口都是VIDIOC_S_CROP,多数人在使用这个接口都是没生效的在内核驱动层mxc_v4l2_capture.c可以找到这个 /*! * V4l2 VIDIOC_S_CROP ioctl */ case VIDIOC_S_CROP: { struct v4l2_crop *crop = arg; struct v4l...
2019-11-26 09:54:58
349
原创 利用C语言寻找类型相同的文件
利用C语言寻找后缀相同的文件#include <string.h>void main(){ char str1 = "aa.exe"; char str2 = ".exe"; int a; a=strncmp(str1+strlen(str1)-strlen(str2),str2,strlen(str2));}若str1==str2,则返...
2019-10-24 16:02:40
445
原创 devm_gpio_request_one申请gpio失败,返回-16
在驱动中调用devm_gpio_request_one()函数失败,返回错误值是-16如下是错误码对应的描述 EBUSY 16 Device or resource busy 说明这个接口处于繁忙状态,大致推测是在被使用了。通过搜索设备树,发现这个gpio号确实被另一个驱动调用了,先把他注销掉,释放出来给我试用下面...
2019-09-11 10:09:34
13150
3
原创 imx6 驱动中mipi csi 与 parallel选择
在imx6q这款芯片中使用mipi csi或者parllel来传输数据给imx6q是需要对寄存器做一定的修改的否则数据会没办法传输在36.4.2中的寄存器GPR (IOMUXC_GPR1)的20和19位就是描述选择mipi csi或者parallel具体代码在arch/arm/mach-imx/mach-imx6q.c移植到驱动中需要添加如下头文件#include ...
2019-09-08 14:46:00
3461
原创 读写i2c寄存器(8位)
在linux系统中经常会用到i2c的操作,但是i2c寄存器的写在不同系统层面代码有所不同,直接使用应用层的代码到内核中就会常常报找不到函数的错误。分享一下自己的不同层面i2c写寄存器的代码。针对8位的,16位在研究。在内核驱动中写操作static int i2c_write(unsigned char reg_addr,unsigned char value){ ...
2019-06-21 15:48:33
7099
1
原创 imx6q基于ov5642调试du913/914摄像头,摄像头偏绿调试
imx6q,基于ov5642调试du913/914摄像头硬件设备树(dts)的配置ov5642.c代码修改硬件camera senor -> 913 -> 914(parallel并行接口) -> imx6913的din[x]对应914dout[x]数据脚pclk像素时钟vsync场同步时钟hsync行同步时钟这里的csi0_data8-19对应的就是914的d...
2019-06-17 15:10:09
2728
2
原创 socket传输文件过程中recv函数接收数据包不完全
socket传输文件过程中recv函数接收数据包不完全recv函数接受包不完全,即当recv()返回的大小如果等于请求的大小,那么很有可能是缓冲区还有数据未读完,也意味着该次事件还没有处理完,所以还需要再次读取。比如通过消息知道下一个包大小为3584,却发现recv函数返回值(recv返回值就是实际接收到的数据大小)却小于3584。int recv( In SOCKET s, Out cha...
2019-04-24 10:23:27
7854
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人