![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动与硬件
文章平均质量分 66
dengjingen
这个作者很懒,什么都没留下…
展开
-
__read_mostly的使用
在linux中好多内容被定义为__read_mostly,那么这有什么作用呢?首先看一个使用:structr cpuinfo_mips cpu_data[NR_CPUS] __read_mostly再看一下其定义:#define __read_mostly __attribute__((__section__(".data..read_mostly")))也就是说被__read_mostly形容的数据别放入到了段.data.read_mostly中那这个段的作用是什么...转载 2021-05-26 09:25:59 · 165 阅读 · 0 评论 -
linux内核list链表操作
参考文章:https://blog.csdn.net/qqliyunpeng/article/details/537890821.简介(1)通常它都组织成双向循环链表.(2)不同于数据结构书上的链表,这里的节点只有链表指针,没有链表的数据。链表元素为数据结构中的一个成员,和要存放的数据并列存放。2. 声明和初始化:有两种方法①声明的时候初始化一个链表 LIST_HEAD 宏:#define LIST_HEAD_INIT(name) { &(name), &...转载 2021-05-24 10:22:51 · 993 阅读 · 0 评论 -
skb操作
套接字缓存之skb_put、skb_push、skb_pull、skb_reserve skb操作中的预留和对齐操作主要由skb_put、skb_push、skb_pull、skb_reserve完成;这几个函数的区别通过下面图(图片来自:深入理解linux网络技术内幕)可以清晰的区分;另外,需要注意的是skb_reserve只能操作空skb,即在分配了空间,尚未填充数据时调用;以下为四个函数的源码分析; 1 /** 2 * skb_put - add data to a bu.转载 2020-12-14 15:42:29 · 1557 阅读 · 0 评论 -
skb_copy和skb_clone对比
skb_copy是一个深拷贝,skb_clone只是一个浅拷贝1、skb_clone()Skb_clone()函数只是复制sk_buff结构,并不复制skb的数据缓冲区。Clone后的sk_buff结构与原始的sk_buff指向同一数据缓冲区。原始的和clone后的skb描述符的cloned值都会被置1,clone的skb描述符的users值置1,同时数据缓冲区的引用计数dataref增加1。特别说明,skb_clone()函数复制的只是skb描述符,而复制后的skb与原始skb指向的是同一数据缓转载 2020-12-11 14:35:31 · 1320 阅读 · 0 评论 -
list_for_each_entry解析
list_for_each_entry解析 双向链表及链表头:建立一个双向链表通常有一个独立的用于管理链表的链表头,链表头一般是不含有实体数据的,必须用INIT_LIST_HEAD()进行初始化,表头建立以后,就可以将带有数据结构的实体链表成员加入到链。INIT_LIST_HEAD (&nphy_dev_list);定义:#define list_for_each_entry(pos, head, member) \ for (po.转载 2020-07-27 10:25:44 · 2423 阅读 · 0 评论 -
netdev->name eth0, eth1, ..., eth%d 的生成
两个基本的数据结构之一:net_devicenet_device注册int register_netdev(struct net_device *dev) rtnl_lock(); if (strchr(dev->name, '%')) dev_alloc_name(dev, dev->name); register_netdevice(dev); =>int register_netdevice(struct net_device *dev)...转载 2020-07-18 17:10:43 · 530 阅读 · 0 评论 -
netlink_kernel_create
Netlink在2.6版本的内核中变化也是很大的,在最新的2.6.37内核中,其定义已经改成下面这种形式,传递的参数已经达到6个。其中第一个参数和mutex参数都是最新添加的。Mutex也可以为空。这里主要是关于内核空间中的netlink函数的使用。extern struct sock *netlink_kernel_create(struct net *net, int unit,unsigned int groups, ...转载 2020-06-30 10:50:29 · 4134 阅读 · 0 评论 -
vfs_fsync
在Linux系统中,对文件系统上文件的读写一般是通过页缓存(page cache)进行的(DirectIO除外),这样设计的可以延时磁盘IO的操作,从而可以减少磁盘读写的次数,提升IO性能。但是性能和可靠性在一定程度上往往是矛盾的,虽然内核中设计有一个工作队列执行赃页回写同磁盘文件进行同步,但是在一些极端的情况下还是免不了掉电数据丢失。因此内核提供了sync、fsync、fdatasync和msync系统调用用于同步,其中sync会同步整个系统下的所有文件系统以及块设备,而fsync和fdatasync只针转载 2020-06-20 12:26:59 · 1020 阅读 · 0 评论 -
Cannot assign requested address
ipv4和ipv6配置网络设备失败,会报错SIOCSIFFLAGS: Cannot assign requested address比较特殊的情况,使用的内核和内核模块编译用的内核不是同一个,导致ipv4和ipv6 entry结构体没有定义,网络设备配置失败。[root@localhost ~]# ifconfig eth0:1 upSIOCSIFFLAGS: Cannot assign requested address出现以上错误的原因是把eth0:1的信息写在了ifcfg-eth0.转载 2020-06-05 11:04:21 · 1428 阅读 · 0 评论 -
__read_mostly
在linux中好多内容被定义为__read_mostly,那么这有什么作用呢?首先看一个使用:structr cpuinfo_mips cpu_data[NR_CPUS] __read_mostly再看一下其定义:#define __read_mostly __attribute__((__section__(".data..read_mostly")))也就是说被__read_most...转载 2020-05-08 11:43:05 · 245 阅读 · 0 评论 -
NLMSG_ALIGN
宏NLMSG_ALIGN(len)用于得到不小于len且字节对齐的最小数值。#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(sizeof(struct nlmsghdr)) 宏NLMSG_LENGTH(len)用于计算数据部分长度为len时实际的消息长度。它一般用于分配消息缓存。#define NLMSG_SPACE(len)...转载 2020-03-24 16:54:55 · 850 阅读 · 0 评论 -
kfree_skb
kfree_skb()只在skb->users为1的情况下才释放内存,否则只简单地递减skb->users,因此假设SKB有三个引用者,那么只有第三次调用dev_kfree_skb()或kfree_skb()时才释放内存。dev_kfree_skb()只是一个简单调用kfree_skb()的宏。__kfree_skb绕过了对skb引用计数的判断,一般来说,在内核中函数名前面加“_...转载 2020-03-18 09:09:57 · 1032 阅读 · 0 评论 -
skb_clone
skb_copy是一个深拷贝,skb_clone只是一个浅拷贝1、skb_clone()Skb_clone()函数只是复制sk_buff结构,并不复制skb的数据缓冲区。Clone后的sk_buff结构与原始的sk_buff指向同一数据缓冲区。原始的和clone后的skb描述符的cloned值都会被置1,clone的skb描述符的users值置1,同时数据缓冲区的引用计数dataref增加1...转载 2020-03-18 09:05:28 · 1011 阅读 · 0 评论 -
__read_mostly
在linux中好多内容被定义为__read_mostly,那么这有什么作用呢?首先看一个使用:structr cpuinfo_mips cpu_data[NR_CPUS] __read_mostly再看一下其定义:#define __read_mostly __attribute__((__section__(".data..read_mostly")))也就是说被__read...转载 2020-02-03 23:18:55 · 141 阅读 · 0 评论 -
__attribute__
关键字__attribute__允许你在定义struct、union、变量等类型时指定特殊属性。此关键字后面是跟着双括号括起来的属性说明。__attribute__不属于标准C语言,它是GCC对C语言的一个扩展用法。你可以在其关键字之前和之后使用"__"指定这些属性中的一个,这样允许你在头文件中使用这些属性,而不必担心可能的同名宏。例如你可以使用__aligned__代替aligned。...转载 2020-01-27 17:01:08 · 152 阅读 · 0 评论 -
__attribute__((packed))详解
__attribute__((packed))详解标签:it 分类:linux程序 1.__attribute__ ((packed))作用__attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在window...转载 2019-10-14 20:24:09 · 689 阅读 · 0 评论 -
cpld和fpga区别
1、cpld执行一次下载编程后,逻辑阵列就被保存下来;fpga断电后逻辑功能不能保存,需要一块配置芯片在上电后对其重新配置。2、cpld擦写次数非常有限(100-1000),而fpga读写次数可以理解为无限次。3、cpld容量较小,fpga容量很大。4、一般调试阶段用fpga,实际产品用cpld。5、cpld保密性好,速度快。https://wenku.baidu.com/...转载 2018-09-21 17:57:42 · 3505 阅读 · 0 评论 -
DDR的物理BANK和逻辑BANK
严 格的说DDR应该叫DDR SDRAM,是Double Data Rate SDRAM(synchronous dynamic random access memory,同步动态随机存储器)的缩写,同步是指其时钟频率与CPU前端总线的系统时钟频率相同,动态是指存储阵列需要不断刷新来保证数据不丢失,随 机是指数据可随机存储和访问。 SDRAM在一个时钟周期内只传输一次数据,它是在时钟的上升期...转载 2018-09-21 17:35:05 · 682 阅读 · 0 评论 -
UART和RS232/RS485的关系是什么(转)?
转自http://wpp9977777.blog.163.com/blog/static/4625100720138411281980/ 串口通讯是电子工程师和嵌入式开发工程师面对的最基本问题,RS232则是其中最简单最常用的通讯方式。但是初学者往往搞不清有关的名词如UART和RS232或RS485之间是什么关系,因为它们经常被放到语句中同等的位置使用。在百度搜索二者的区别,可以看到排在转载 2013-12-31 11:30:15 · 646 阅读 · 0 评论