
linux kernel内核
主要写内核修改和内核驱动编写和修改
锅锅是锅锅
这个作者很懒,什么都没留下…
展开
-
linux网络数据包流程
一、介绍对于调试linux网卡驱动或者wifi驱动性能,或者排查网络数据丢包的时候,需要对内核处理包要与基本的了解,从而排查出丢包出现在哪个环节,这里给出大致流程和常用排查方法二、基本框架1、硬件连接1)以太网口网线通过变压器接PHY芯片、PHY芯片通过MII接MAC芯片、MAC芯片接PCI总线PHY芯片主要负责:CSMA/CD、模数转换、编解码、串并转换MAC芯片主要负责:比特流和帧的转换:7字节的前导码Preamble和1字节的帧首定界符SFDCRC校验2)wifi3)LTE/5原创 2022-04-18 14:37:32 · 3278 阅读 · 0 评论 -
linux内核中串口的收发流程
一、介绍在linux开发应用的时候,经常会碰到串口收发数据丢包,如果要排除bug就需要知道内核中串口的流程二、串口收发流程硬件一般会有串口fifo,存储数据,一般16byte或者32byte以减少cpu的中断次数1)外部数据经过硬件串并转换到硬件fifo2)硬件fifo满了以后触发中断启动dma3)dma将fifo里面的数据搬运到软fifo(一般是一个大数组)4)应用层平时的read,write就是直接读取的软fifo里面的数据这个软fifo是可以配置的,配置方法参考我另外改串口fifo大小原创 2022-04-08 09:46:04 · 2665 阅读 · 0 评论 -
linux内核添加iptables拓展模块支持
当出现iptables拓展模块不支持时,如下iptables -t mangle -A PREROUTING -m iprange --src-range 192.12.12.12-192.12.12.22 -m iprange --dst-range 192.12.112.10-192.12.112.20 -m multiport --dports 1:100 -m time --timestart 10:00 --timestop 20:00 --weekdays 1,2,3,4 -j MARK -原创 2021-12-10 17:14:43 · 2215 阅读 · 0 评论 -
linux单独编译内核的驱动
1、找到对应驱动的宏grep r8188eu.o drivers/staging/rtl8188eu -r | grep MakefileCONFIG_R8188EU2、编译make ARCH=arm64 CONFIG_R8188EU=m drivers/staging/rtl8188eu/r8188eu.ko3、测试将驱动放到板子加载驱动insmod r8188eu.ko原创 2021-12-04 16:06:54 · 1995 阅读 · 1 评论 -
linux wifi驱动rtl8188移植
linux驱动都是在内核里面,所以首先搜索内核里面是否有现成的驱动进入内核目录make menuconfig搜索/内核里面有,直接打开配置保存编译make ARCH=arm64找到生成的驱动find ./ -name “rt8188,ko”...原创 2021-12-04 15:53:57 · 2930 阅读 · 0 评论 -
linux内核驱动互斥体
一、介绍互斥体用于临界资源的访问保护互斥实现二、函数//include/linux/mutex.h//定义并初始化mutex对象struct mutex my_mutex;mutex_init(&my_mutex); //获取mutexvoid mutex_lock(struct mutex *lock);int mutex_trylock(struct mutex *lock);int mutex_lock_interruptible(struct mutex *lock);原创 2021-09-02 17:38:02 · 188 阅读 · 0 评论 -
linux内核驱动信号量
一、介绍信号量用于内核驱动长时间占用的只用于保护大块临界区如果试图获取信号量的进程获取失败,内核就会将其调度为睡眠状态,执行其他进程,避免了CPU的忙等项目 信号量 自旋锁临界区时间 进程切换时间更短 临界区执行时间更短进程上下文 临界区可以睡眠或调度 临界区不可以睡眠或调度中断上下文 只有down_trylock()可以 可以二、函数传统信号量用于对临界资源的互斥/顺序访问//include/linux/semaphore.h//定义并初始化semaphore原创 2021-09-02 17:28:20 · 344 阅读 · 0 评论 -
linux内核驱动rcu机制
一、介绍RCU即Read-Copy Update,即读者直接读,写者先拷贝再择时更新,写者在写之前先将临界资源进行备份,去修改这个副本,等所有的CPU都退出对这块临界区的引用后,再通过回调机制,将引用这块资源的原指针指向已经修改的备份读者 + 读者 不互斥读者 + 写者 不互斥 , 读者自己注意更新写者 + 写者 不互斥 ,写者之间自己去同步二、函数读读操作其实就是禁止内核的抢占调度,并没有使用一个锁对象//读锁定//include/linux/rcupdate.hrcu_read_lo原创 2021-09-02 17:17:22 · 349 阅读 · 0 评论 -
linux内核驱动自旋锁
一、介绍自旋锁,当加锁不成功时,自旋,自旋锁会不断的占用CPU进行变量的测试,由于属于原子操作,所以该CPU的占用会升为100%,所以,使用自旋锁时,临界区的代码需要很短,否则会影响系统性能,此外,作为锁机制的一种,使用自旋锁同样需要注意死锁的出现,自旋锁锁定期间不能调用可能引起进程调度的函数,如果进程获得自旋锁之后再阻塞,eg,copy_from_user(),copy_to_user(),kmalloc(),msleep()等,一旦阻塞发生就可能导致内核 崩溃二、函数介绍比较\类型 传统自旋锁原创 2021-09-02 16:44:34 · 682 阅读 · 0 评论 -
linux内核驱动原子操作
原子操作即不能被打断的操作,应用层的概念一样,整形原子操作//asm/atomic.h//创建并初始化原子变量atomic_t tv = ATOMIC_INIT(初值);//读原子变量int atomic_read(atomic_t *v);//写原子变量void atomic_set(atomic_t *v, int i); /** *atomic_dec_and_test - 尝试将原子变量-1 *v:如果-1之后原子变量变为0,返回非0, 否则返回0 */int atom原创 2021-09-02 16:27:08 · 281 阅读 · 0 评论 -
linux中断屏蔽
方式一:critical section /* 临界区*/方式二<asm/system.h>)禁止所有中断void local_irq_save(unsigned long flags);void local_irq_disable(void);/* 屏蔽本地中断 /打开所有中断void local_irq_restore(unsigned long flags);void local_irq_enable(void); / 使能本地中断*原创 2021-09-02 16:05:58 · 1030 阅读 · 0 评论 -
linux 从内核源码导出内核api手册全部过程
一、下载内核源码www.kernel.org找到自己要下载的版本下载解压xz -d linux-5.13.12.tar.xztar xvf linux-5.13.12.tar二、生成文档1、安装依赖sudo apt-get install xmltosudo apt-get install docbook-xsl2、生成文档进入源码目录cd linux-5.13.12/make mandocs生成文档在本机sudo make installmandocs自定义安装位置mk原创 2021-08-19 12:24:52 · 473 阅读 · 0 评论 -
嵌入式linux常用驱动源代码文件存放目录
linux自带驱动存放于内核源码目录具体目录如下1. 按键驱动kernal\drivers\input\keyboard\kernal\drivers\char2. LED驱动kernal\drivers\char\led.ckernal\drivers\leds3. 网卡驱动kernal\drivers\net\4. 串口驱动kernal\drivers\serial\5.实时时钟RTC驱动kernal\drivers\rtc\6. 触摸屏驱动kernal\drive原创 2021-07-15 10:40:18 · 2395 阅读 · 0 评论 -
linux内核源码目录结构
一、内核目录二、介绍1、arch平台目录,所有硬件平台的代码,处理器原厂提供一套Linux内核的源码,每个CPU的子目录,为boot,mm,kernel等子目录,分别控制系统引导,内存管理,系统调用,动态调频,主频率设置部分等2、binary无源码的驱动,一些测试版本或者不愿意公布源码3、drivers驱动源码,驱动编程经常用4、include通用的Linux头文件5、block部分块设备驱动6、cypto加密压缩的crc校验7、documenation内核说明文档8、fi原创 2021-06-06 10:58:56 · 747 阅读 · 1 评论 -
linux查看系统位数
一、uname -a二、uname -m三、getconf LONG_BIT直接会打印是多少位的,但是一般嵌入式linux不支持这个命令,需要自己安装原创 2021-06-06 09:54:37 · 142 阅读 · 0 评论 -
嵌入式linux 5G驱动移植-移远RM500Q 5G模块USB驱动移植
一、介绍目前5G网络比较火,这里介绍一款5g模组的驱动的移植,实现5G上网,目前有很多5G模组,比如移远、simcom、华为等等接口类型有usb和PCIE,这里先介绍USB接口的,PCIE接口驱动的移植留到以后的文章介绍二、准备1、GobiNet驱动文件2、quectel-CM拨号工具3、usb-serial-option内核要修改的文件4、linux开发板5、linux内核源码这几个为移远官方提供三、移植1、修改内核源码2、修改内核配置3、编译内核4、编译驱动5、编译拨号工原创 2021-06-06 09:26:19 · 6959 阅读 · 3 评论 -
linux内核源码版本查看
在内核源码的顶层makefile有写如图为4.9.41原创 2021-06-06 09:07:36 · 1002 阅读 · 0 评论 -
嵌入式linux内核编程 简单的hello模块
#include <linux/init.h>#include <linux/module.h>static int __init hello_init(void){ printk("Hello Module insmod\n"); return 0;}static void __exit hello_exit(void){ printk("Hello Module rmmod\n");}module_init(hello_init);module_e原创 2020-10-28 14:05:58 · 200 阅读 · 0 评论 -
嵌入式Linux字符设备驱动--按键驱动
芯片野火imx,内核4.15直接上代码key.c#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/init.h>#include <linux/module.h>#include <linux/errno.h>#include <原创 2020-10-23 17:41:00 · 184 阅读 · 0 评论 -
嵌入式linux字符设备驱动--步进电机驱动
步进电机驱动主要要用到内核定时器,内核定时器就是在内核驱动程序里面定时stepmotor.c#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/init.h>#include <linux/module.h>#include <linux/errn原创 2020-10-23 16:05:38 · 2137 阅读 · 1 评论 -
嵌入式linux字符设备驱动--LED驱动编写
linux内核编程主要就是驱动驱动分为字符设备、块设备、网络设备驱动的编写就是将原来嵌入式操作寄存器的函数按照linux的驱动框架填进去芯片:野火imx6ulllinux版本4.15led.c#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/init.h>#原创 2020-10-22 17:26:47 · 252 阅读 · 0 评论 -
linux内核修改编译
一般一个芯片出厂会有一个厂家的demo板,对应有相应的linux内核,里面有相应的配置文件,最简单的方式就是根据原厂的配置修改,这里以野火 的imx6ull板子为例1、下载官方内核git clone http://git.freescale.com/git/cgit.cgi/imx/linux-imx.git或者野火自己修改过的git clone https://git.dev.tencent.com/flyleaf91/imx-linux.git2、编译1)配置 make ARCH=arm原创 2020-10-16 09:29:39 · 752 阅读 · 0 评论 -
linux内核中断
#include<linux/init.h>#include<linux/module.h>#include<linux/kernel.h>#include<linux/interrupt.h>static int irq;char *interface;static irqreturn_t myirq_handler(int irq,v...原创 2020-04-23 09:41:44 · 177 阅读 · 0 评论 -
linux内核定时器
linux内核定时器函数源程序struct timer_list tm定时器数据结构init_timer(*tm)初始化定时器结构;tm定时器数据结构指针add_timer(*tm)添加定时器;tm定时器结构指针mod_timer(*tm,expire)修改定时器;tm定时器数据结构;expire超时时间,一般jiffies+xsdel_timer(*tm)删除定时器;tm定...原创 2020-04-22 17:09:05 · 174 阅读 · 0 评论 -
linux字符设备驱动通用框架
linux字符设备驱动框架myxx_driver.c#include <linux/init.h>#include <linux/cdev.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/device.h> #include <linux/...原创 2020-04-21 17:34:36 · 203 阅读 · 0 评论