自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (2)
  • 收藏
  • 关注

原创 jenkens安装

jenkins安装方法

2022-09-14 10:39:54 150 1

原创 jenkens安装

jenkins安装方法

2022-09-13 11:21:19 198

原创 The following signatures couldn‘t be verified because the public key is not available:

ubuntu执行apt update 报错

2022-09-13 11:18:43 198

原创 linux printk格式化打印

=========================================How to get printk format specifiers right:Author: Randy Dunlap rdunlap@infradead.org:Author: Andrew Murray amurray@mpc-data.co.ukInteger types::If variable is of Type, use printk format specifier:-----------

2021-08-27 11:07:15 1322

原创 icm20608 linux驱动 regmap spi的方式读写寄存器

开发版芯片 imx6ull驱动测量了系统调用read 10000次的时间验证了开启硬件浮点和不开启硬件浮点的运算浮点数时间基本相同驱动代码#include <linux/module.h>#include <linux/spi/spi.h>#include <linux/regmap.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/cdev.h&

2021-08-27 09:37:57 667

原创 WRITE_ONCE()

WRITE_ONCE(prev->next, new)的作用就是安全地将prev->next指向new!相当于new = prev->next

2021-06-18 15:54:43 302

原创 likely()和unlikely()

编程的时候根据if条件成立的概率,手动引导编译器设置cpu 的cache命中率,提高程序运行效率编译成二进制代码时likely使得if后面的执行语句紧跟着前面的程序,unlikely使得else后面的语句紧跟着前面的程序,这样就会被cache预读取,增加程序的执行速度。likely(x)代表x是逻辑真(1)的可能性比较大;unlikely(x)代表x是逻辑假(0)的可能性比较大。...

2021-06-18 15:44:08 179

转载 arm gic相关知识

很详细的gic介绍

2021-06-10 17:28:09 92

转载 usleep_range()函数

usleep_range 用于非原子环境的睡眠,目前内核建议用这个函数替换之前udelay。其源码分析如下:void __sched usleep_range(unsigned long min, unsigned long max){ #得到最早wakeup的时间 ktime_t exp = ktime_add_us(ktime_get(), min); #计算必须要在max-min这个时间段wakeup,然后将这个时间转成nsec u64 delta = (u64)(max - min)

2021-06-08 18:13:03 10360

原创 轻量级的菜单系统,可移植性强

menu.h#include "stdio.h"#include "stdlib.h"#include "string.h"#include "unistd.h"#include <curses.h>#define DISPLAY_C#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER)#define container_of(ptr, type, member) ({ \

2021-06-08 16:36:05 246

原创 socket C/S多线程编程

移植部分list.h#ifndef _LIST_H#define _LIST_H#include <stddef.h>//通过结构体成员指针获取结构体指针位置#define container_of(ptr, type, member) ( \ { \ const typeof(((type *)0)->member)

2021-06-08 16:03:03 108

原创 区分workqueue和waitqueue

首先要区分kernel中的waitqueue和workqueue概念,这是两个不同的内核机制workqueue是利用进程上下文来处理内核中的一些小型任务,将一些复杂耗时的任务可以放到workqueue的线程中执行,节省时间waitqueue是等待队列用于使进程等待某一特定的事件发生而无需频繁的轮询,不需要执行任务的时候,让进程睡眠,等待某个条件发生,一旦条件达成,任务被唤醒,开始执行,执行完毕接着让他睡眠workqueue的demo#include <linux/init.h>#inc

2021-04-06 19:22:36 366

原创 kernel api汇总

参考 https://www.kernel.org/doc/htmldocs/kernel-api/

2021-03-24 15:11:29 625

原创 shell变量的操作

[ -f "somefile" ] :判断是否是一个文件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限[ -n "$var" ] :判断$var变量是否有值[ "$a" = "$b" ] :判断$a和$b是否相等-r file     用户可读为真-w file     用户可写为真-x file     用户可执行为真-f file     文件为正规文件为真-d file     文件为目录为真-c file     文件为字符特殊文件为真-b file

2021-03-24 14:59:39 201 1

原创 linux notifier的理解和应用

notifier主要用于内核间的各个模块的通信(通知源)子系统A进行定义初始化和回调函数的调用(被通知)子系统B进行回调函数的注册和注销当A系统发生某种事件时,就调用通知链中的所有回调函数,B系统中注册的回调函数就会得到执行。一旦执行回调函数,他会从链表头依次执行每一个回调函数,那么依次执行是依次性执行完,执行过程中任意时刻都可睡眠?这些需求也就产生了4种类型的notifier_chain。struct notifier_block { /* chain的基本单位 */ int (*noti

2021-03-09 19:33:53 913

原创 get_device()和put_device()函数

在linux内核中,get_device()和put_device()是一对相反的操作函数。get_device()是对设备引用数量加一,put_device()是对设备引用减一以下就是源码/** * get_device - increment reference count for device. * @dev: device. * * This simply forwards the call to kobject_get(), though * we do take care to

2021-03-09 11:21:47 3583

原创 gPTP的理解和使用

1588v2(PTP)报文通用格式IEEE 1588v2协议附录D定义了1588V2 over IPv4的报文封装,附录E定义了1588V2 over IPv6的报文封装,附录F定义了1588v2 over IEEE 802.3 /Ethernet的报文封装。其他如1588v2 over MPLS封装,业界还没有成熟的标准。除此之外,在实际应用中还可能携带VLAN。PTP over EthernetPTP over UDP over IPv4PTP over UDP over IPv6PTP o

2021-01-13 16:11:52 14956 3

原创 从原始数据中获取gps信号强度(NMEA协议)

GSV信号中带有gps信号强度的信息

2021-01-13 16:06:59 1598

转载 Linux下getopt()函数的简单使用

最近在弄Linux C编程,本科的时候没好好学啊,希望学弟学妹们引以为鉴。好了,虽然啰嗦了点,但确实是忠告。步入正题:我们的主角----getopt()函数。英雄不问出处,getopt()函数的出处就是unistd.h头文件(哈哈),写代码的时候千万不要忘记把他老人家include上。再来看一下这家伙的原型(不是六耳猕猴):int getopt(int argc,char * const argv[ ],const char * optstring);前两个参数大家不会陌生,没错,就是老大mai

2021-01-06 10:40:44 119

原创 rtl8723bu linux wifi驱动移植教程

rtl8723bu linux 驱动移植教程将文件rtl8723BU_WiFi_linux_v4.3.9.3_13200.20150106_BTCOEX20140929-5443.tar.gz拷贝到linux源码目录drivers/net/wireless/net/下解压tar xzvf rtl8723BU_WiFi_linux_v4.3.9.3_13200.20150106_BTCOEX20140929-5443.tar.gz更改文件名mv rtl8723BU_WiFi_linu

2020-12-06 13:05:24 3560

原创 linux 内核中的链表学习总结以及应用

学习过数据结构的同学们都知道链表的结构种类:单链表,双链表,循环单/双链表,这种数据结构结构简单应用很广泛,相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或者删除数据。链表的开销主要是访问的顺序性和组织链的空间损失,不适合随机存取在Linux内核中链表的应用也非常多,对链表的操作为非就是初始化,添加节点,删除节点,遍历节点...

2020-03-20 21:37:47 277

原创 Modbus通信总结

原文链接:https://blog.csdn.net/byxdaz/article/details/77892778介绍:Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。Modbus协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来...

2020-03-19 22:30:50 408

原创 linux 驱动开发之平台设备驱动设备树 input子系统的使用:按键中断驱动

这一章我们linux input 子系统在linux中,input子系统有三部分组成:驱动层,输入子系统核心,事件处理层.一个输入时间,比如按键按下通过:驱动->input core->event handler->user space的顺序到达用户空间的应用程序,...

2020-03-19 21:46:45 859 1

原创 linux 驱动开发之平台设备驱动设备树 led字符驱动的开发(详细注释)

我们来开始我们Linux下第一个platform设备的开发,通过linux 应用程序来控制开发板上的一个gpio led灯的亮灭.首先介绍一下平台总线设备的开发过程,linux中采用了设备和驱动分离的思想,通过总线将设备和驱动匹配,所以这里涉及三个概念:总线(bus),设备(device)和驱动(driver),总线就像是红娘月老,做设备和驱动匹配的工作,比起其他内核中的总线比如i2c,spi,...

2020-03-16 23:53:43 771

原创 esp32 idf开发之linux环境搭建以及第一个程序:helloworld

下载esp32的idf源代码 ,可以去GitHub网站git也可以去乐鑫官网资源里下载git方法:在home/usr下创建一个esp的文件夹,然后 cd ~/esp git clone -b v4.0 --recursive https://github.com/espressif/esp-idf.git这个方法比较慢乐鑫官网下载比较快,网址https://www.espress...

2020-03-16 18:45:30 833

原创 linux内核的中断机制

**linux的中断分为上半部和下半部两部分**上半部中断不能嵌套,中断被禁止,代码要尽量短,处理一些重要的事情,通常是改变一些标志状态下半部的中断可以嵌套,有三种处理的方式:SOFTIRQTASKLETworkqueue工作队列中断顶半部函数,禁止中断,不可嵌套(通过request_irq()申请)中断处理函数是被硬件请求执行的内核代码,所以它属于中断上下文。在中断上下文中...

2020-03-16 15:27:48 240

原创 关于ubuntu18.04版本系统中无法挂载开发板nfs文件系统的解决办法

问题描述:我本来用的是Ubuntu16升级Ubuntu18.04之后发现之前布置在电脑中的开发板nfs文件系统挂载不了了,尝试了很多方法,修改uboot的bootargs,修改exports,都没用,文件系统的其他配置都正确,就是奶粉是用不了,用了大半天时间,还是没办法,之后上网搜索Ubuntu18.04 nfs终于在网上找到解决办法:**原因:原来是这样的:ubuntu18.04只支...

2020-03-16 15:26:40 1829 1

原创 linux 驱动开发之linux vscode环境搭建以及第一个驱动 helloWorld

下载linux版的vscode ,并且安装我用的板子是nxp的imx6ull,下载nxp的的arm交叉编译工具链和他们的内核(也可以下载官方版本的内核和编译工具链),解压并设置路径,我的路径如下:内核路径/home/mayunzhi/linux/Linux-4.9.88工具链路径/home/mayunzhi/linux/ToolChain/gcc-linaro-6.2.1-2016....

2020-03-15 20:27:22 1979 6

lit_menu_c.tar.gz

c语言写的轻量的菜单系统,可移植性很强,可运行在任何有屏幕的地方,菜单api丰富,包括创建item,显示格式,添加item的回调函数function等等

2021-06-08

rtl8723bu wifi驱动

rtl8723bu wifi驱动

2020-12-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除