- 博客(8)
- 资源 (5)
- 论坛 (1)
- 收藏
- 关注
原创 container_of注意事项
已知一个变量的地址时,使用container_of获取此变量所在的结构体的首指针。其定义如下:#define container_of(ptr, type, member) ({ \ void *__mptr = (void *)(ptr); \ BUILD_BUG_ON_MSG(!__same_type(*(ptr...
2018-08-29 23:29:23
1001
原创 GCC版本不同导致程序执行结果迥异
之前运行正常的一段代码,在升级了编译工具链后出现异常,最后发现是gcc的版本不同,导致编译出来的代码执行结果迥异。如下的代码为根据这个问题写的一段简单的测试程序。src指向一段数据,此段数据为长度+内容的组合(第一个字节为长度,其后为此长度的内容)。unsigned char get_length(unsigned char **src_p){ unsigned char ret =...
2018-08-17 16:02:15
3671
3
原创 PROC文件中stat统计信息
翻译文件Documentation/filesystems/proc.txt的1.8节,关于/proc/stat文件内容的描述: 1.8 位于/proc/stat文件中的内核杂项统计-------------------------------------------------内核在文件/proc/stat中保存了有关自身活动的各种信息。所有的统计数字都是自系统启动后累加起来的。使...
2018-08-11 00:29:12
1362
原创 设备模块中数据包接收的两个队列
驱动层程序通过netif_rx或者netif_rx_ni将接收的数据包传入到设备层,设备模块分成两个阶段处理数据包。第一阶段将数据包添加到接收队列(input_pkt_queue)末尾,接收处理完成;第二阶段将接收队列的数据包移动到处理队列(process_queue)中。两个阶段的操作都是链表操作,不涉及到skb数据包的拷贝。在第一阶段中,仅是添加到接收队列即返回,以便驱动程序可以接收下一个...
2018-08-09 17:58:54
923
1
原创 内核网络设备的删除
内核中与网络设备的删除相关的函数有两个:unregister_netdev和free_netdev。前者用在从内核中删除一个已经注册的网络设备;而后者用于释放一个已经分配的网络设备(struct net_device),其在alloc_netdev函数执行成功之后,注册函数register_netdev出错时调用;或者在unregister_netdev中调用,或者在其后调用。不同与内核中的其...
2018-08-08 16:54:12
885
原创 网络设备模块与驱动的初始化顺序控制
网络设备模块的初始化,使用subsys_initcall调用。subsys初始化例程的优先级为4,排在pure_initcall(优先级0)、core_initcall(1)、postcore_initcall(2)和arch_initcall(优先级3)之后。排在device_initcall(优先级6)之前。系统在启动过程中,函数do_initcalls按照优先级顺序依次调用注册的initca...
2018-08-08 14:10:33
235
原创 SYSLINUX 6.03不支持64bit的ext4
最近遇到启动盘格式化为ext4文件系统,syslinux无法启动的问题。查看其官网(https://www.syslinux.org/wiki/index.php?title=Filesystem),指出6.03版本不支持64bit的ext4文件系统,解决版本是在制作ext4文件系统时,关闭64bit选项开关。mke2fs -O ^64bit /dev/sdb1官网上提示在6.04版本会修...
2018-08-07 23:10:36
2463
原创 网络设备名称的自动选择
网卡驱动在向内核注册网络设备时,可传入带有格式参数的网卡名,如eth%d,交由内核自动选择网卡名称。struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs, unsigned int rxqs){ return alloc_netdev_mqs(sizeof_priv, "eth%d", eth...
2018-08-02 16:23:56
664
redwingz的留言板
发表于 2020-01-02 最后回复 2020-01-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝