自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (1)
  • 收藏
  • 关注

原创 linux top

linux关于top源码的一些分析

2022-07-17 16:13:13 217 1

原创 mount.nfs: access denied by server while mounting

access denied by server while mounting在服务器端/etc/exports中加入insecure

2021-12-20 15:22:18 306

原创 学习笔记十:linux驱动之内核定时器

内核定时器 定时器是我们最常用到的功能,一般用来完成定时功能,本章我们就来学习一下Linux内核提供的定时器API函数,通过这些定时器API函数我们可以完成很多要求定时的应用。Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数,本章我们就来学习一下这些和时间有关的功能。配置系统频率 Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置,设置好以后就周期性的产生定时中断,系统使用定时中断来

2021-11-06 00:14:55 241

原创 学习笔记九:linux驱动之等待队列

等待队列  waitqueue(等待队列)是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用函数将当前进程添加到等待队列中,然后切换到其他进程继续执行。  当资源准备好,由资源提供方通过调用wake_up函数唤醒等待队列中的所有进程头文件#include <linux/wait.h>定义方法wait_queue_head_t wq;init_waitqueue_head(&wq);阻塞接口wait_event(wq,condition);

2021-11-05 23:47:02 359

原创 jiffies的初始值不为0

jiffiesjiffies记录了系统启动以来,经过了多少tick。一个tick代表多长时间,在内核的CONFIG_HZ中定义。比如CONFIG_HZ=200,则一个jiffies对应5ms时间。所以内核基于jiffies的定时器精度也是5ms。jiffies的初始值并不是0,而是300s后即将溢出的的值。这是为了存在溢出问题的情况下,尽早暴露问题。arch/arm/kernel/vmlinux.lds.S: jiffies = jiffies_64;include/linux/jiffi

2021-11-04 15:05:47 307

原创 modprobe和insmod的区别

modprobe和insmod首先modprobe和insmod都可以实现加载模块,但是更加推荐使用modprobe而不是insmod。因为modprobe可以解决模块间依赖的问题,比如A模块使用了符号导出,导出的符号需要在B模块中使用,这就要求在加载模块时需要先加载模块A再加载模块B,在insmod的情况下会给报错,而用modprobe则会在/lib/modules/$(shell uname -r)/目录下去寻找依赖模块。另一种情况,现在需要加载模块A,而模块A已经加载过了,已经存在了,使用insm

2021-11-02 15:59:52 1544

原创 学习笔记八:linux驱动之内核信号量

信号量信号量分为用户信号量和内核信号量,用户信号量又分为POSIX信号量和SYTEM V 信号量,POSIX信号量又细分为无名信号量与有名信号量。所以总共有四种信号量,即无名信号量、有名信号量、SYTEM V信号量、内核信号量。该文章中主要讲内核信号量的使用方法:初始化在linux/semaphore.h中#include <linux/semaphore.h>struct semaphore sem;sema_init(&sem,1);// 第一个参数是要操作的信号量

2021-10-26 13:48:00 169

原创 学习笔记七:linux驱动之ioctl用法

ioctl在用户空间, ioctl 系统调用有下面的原型:int ioctl(int fd, unsigned long cmd, ...);ioctl 驱动方法有和用户空间版本不同的原型:int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);inode 和 filp 指针是对应应用程序传递的文件描述符 fd 的值, 和传递给 open 方法的相同参数. cmd 参数

2021-10-18 20:30:29 3110

原创 学习笔记六:linux驱动之互斥锁mutex

互斥锁mutex互斥体概述信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mutex用于互斥操作。mutex的语义相对于信号量要简单轻便一些,在锁争用激烈的测试场景下,mutex比信号量执行速度更快,可扩展性更好,另外mutex数据结构的定义比信号量小。互斥锁使用注意事项:1.同一时刻只有一个线程可以持有mutex。2.只有锁持有者可以解锁,不能在一个进程中持有mutex,在另外一个进程中释放他。3.不允许递归地加锁和解锁。4.当进程持有mutex时,进程不可以退出。5

2021-10-14 18:21:01 1139

原创 学习笔记五 :linux驱动之原子变量

原子变量原子变量atomic_t,定义在linux/types.h中typedef struct { int counter;} atomic_t;在asm/atomic.h中// 读取原子变量的值#define atomic_read(v) READ_ONCE((v)->counter)// 设置原子变量的值// 参数 v:操作的量的地址 i:给原子变量的设置值#define atomic_set(v,i) WRITE_ONCE((v)->counter, (i))

2021-10-14 15:17:17 597

原创 数据结构:双向循环链表的c语言实现方法二

双向环链之0长度数组c实现方法在上篇文章中我们使用void *data指针来指向我们需要保存数据的地址,需要用户指定这个data数据的大小,然后通过malloc这个大一个内存来存放数据。本文章将使用另一种方法来保存数据。在c99中开始 支持了零长度的数组[0],我们都知道数组的名字代表的是首元素的地址,并且数组内的数据在内存中是连续的,所以我们可以用数组的形式来保存数据,单位为一个字节,可以用char类型的数组,但是数组的长度设置为多少好呢,设置的大了会浪费空间,设置小了担心不够用,所以最好的方法是你需

2021-09-29 11:03:25 103

原创 数据结构:双向循环链表的c语言实现方法一

等等

2021-09-28 18:18:21 242 1

原创 学习笔记四 :linux驱动之module_param的用法

从 main函数说起我们在用户太写程序时都喜欢用main函数的如果参数来向程序内传递数据#include <stlib.h>#include <stdio.h>int main(int argc,char **argv){ exit(0);}其中argc为传入程序内参数的个数,argv为传入的参数 ,其中的第一个参数argv[0]为当前文件的含路径的名字,所以实际传入程序内的参数个数为argc-1个。内核模块传入参数内核模块中没有main函数,所以向模块内部传入

2021-09-27 19:38:17 4434 1

原创 学习笔记三 :linux驱动之符号导出EXPORT_SYMBOL

符号导出EXPORT_SYMBOL在写linux驱动程序的过程中遇到一个模块中编写的函数,或者变量需要在另一个模块中使用的时候就可以用符号导出EXPORT_SYMBOL。在Linux内核源码目录下有一个文件Module.symvers,该文件内就存放的linux内核中导出的符号。下面的代码是使用方法,首先是模块A,模块A中有一个变量num,和一个函数print_hello需要在模块B中使用,所以需要将模块A中的这两个导出。// 模块A#include <linux/module.h>

2021-09-19 12:59:02 583

原创 学习笔记二:新Linux驱动之字符设备驱动

新字符驱动设备首先看看分配设备号的函数(动态分配和静态分配):int register_chrdev_region(dev_t, unsigned, const char *);// 静态分配:通过已知未使用的主设备号像内核注册设备号// 缺点:设备号可能重复导致注册失败// 参数1:申请的设备号// 参数2:申请设备号个数(主设备号不变,次设备号增加)// 参数3:设备名(体现在/proc/devices)// 返回值: 成功返回0,失败返回负数int alloc_chrdev_reg

2021-08-12 13:27:33 84

原创 学习笔记一:Linux驱动之字符设备驱动

学习笔记一:Linux驱动之字符设备驱动先把用到的函数写在前面:// 注册字符设备int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops);// 取消注册字符设备void unregister_chrdev(unsigned int major, const char *name);// file_operations中经常需要实现的成员如下struct file_

2021-08-04 14:40:01 108

原创 如何让Linux内核编译驱动模块时支持C99

如何让Linux内核编译驱动模块时支持C99嵌入式中使用的交叉编译器在编译时加上–std=c99选项可以支持c99arm-linux-gnueabihf-gcc test.c -o test --std=c99但在让内核编译驱动模块的时候并没有使用上述语句的机会,但是可以在内核模块的Makefile文件中加入下面这句话让其支持c99ccflags-y := -std=gnu99 -Wno-declaration-after-statement内核模块Makefile示例如下(源文件test.c

2021-08-03 16:29:08 3061 1

转载 obj-m与obj-y的区别

obj-m与obj-y的区别obj-y +=xxx.o该模块编译到zImageobj-m +=xxx.o该模块不会编译到zImage但会生成一个独立的xxx.ko 静态编译

2021-05-19 13:54:57 398

转载 Ubuntu安装tftp

Ubuntu安装tftp在 Ubuntu 上搭建 TFTP 服务器,需要安装 tftp-hpa 和 tftpd-hpa,命令如下:sudo apt-get install tftp-hpa tftpd-hpasudo apt-get install xinetd和 NFS 一样, TFTP 也需要一个文件夹来存放文件,在用户目录下新建一个目录,命令如下:mkdir /home/chen/linux/tftpbootchmod 777 /home/chen/linux/tftpboot这样我

2021-05-15 15:19:03 806

转载 Ubuntu开启SSH服务

Ubuntu开启SSH服务1.终端输入:sudo apt-get install openssh-server

2021-05-14 22:30:38 76

转载 Ubuntu安装nfs

Ubuntu安装nfs1.输入命令:sudo apt-get install nfs-kernel-server portmap2.创建一个用于nfs的文件夹mkdir nfscd nfs/pwd3.打开/etc/exportssudo vi /etc/exports4.向文件尾部写入#前面是nfs文件夹所在路径/home/chen/alientek/nfs *(rw,sync,no_root_squash) 5.重启NFS服务sudo /etc/init.d/nfs-ke

2021-05-14 22:21:54 303

原创 Uboot:Loading: *** ERROR: File lookup fail

Uboot:Loading: *** ERROR: File lookup fail出现以上这种问题主要是由于uboot中nfs版本与Ubuntu所用的nfs版本不同所导致的。解决方法让buntu中得NFS兼容V2。修改/etc/default/nfs-kernel-server 文件。(1)打开文件:sudo vim /etc/default/nfs-kernel-server (注意一定要sudo或者root权限)(2)修改如图:第2行,第12行,第19行(3)保存退出。(4)重启NF

2021-05-14 22:17:03 568 3

原创 ubuntu18.04LTS安装ros-melodic

ubuntu18.04 LTS安装ros-melodic第一步:$ sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'第二步:$ sudo apt-key adv --keyserver 'hkp://keyser

2020-09-30 13:19:11 172

原创 ubuntu18.04设置清华镜像源

ubuntu18.04设置清华镜像源1.打开清华镜像源官网2.找到3.点击问号4.选择ubuntu版本18.04LTS5.复制给定的内容6.拷贝一份**/etc/apt/sources.list**文件$ sudo cp -v /etc/apt/sources.list /etc/apt/sources.list.backup7.编辑sources.list文件$ sudo gedit /etc/apt/sources.list8.全选并删除里面的内容,添加清华镜像源9.更新源

2020-09-30 12:58:57 3469

原创 ROS学习记录——串口通信

ROS学习记录——串口通信#include <ros/ros.h>#include <std_msgs/Empty.h>#include <std_msgs/String.h>#include <serial/serial.h>serial::Serial ser; //声明串口对象 /* * read()函数 : * 1. size_t read

2020-09-29 18:59:25 295 1

procps-3.3.17源码

procps-3.3.17源码

2022-07-11

空空如也

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

TA关注的人

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