Linux内核编程
SG匚hang
这个作者很懒,什么都没留下…
展开
-
linux内核中区分系统位数的宏
#ifdef CONFIG_X86_32 printk("---------x86_32---------\n"); #else /* CONFIG_X86_64 */ printk("---------x86_64---------\n");#endif//CONFIG_X86_32原创 2019-06-15 14:18:49 · 605 阅读 · 0 评论 -
linux kernel asmlinkage的作用
在64位系统中,asmlinkage就是个空宏,并没有实际意义//"include/linux/linkage.h"7 #ifdef __cplusplus8 #define CPP_ASMLINKAGE extern "C"9 #else10 #define CPP_ASMLINKAGE11 #endif1213 #ifndef asmlinkage14 #d...原创 2019-06-10 14:15:51 · 458 阅读 · 0 评论 -
系统调用函数源码,#define SYSCALL_DEFINEx(x, name, ...)宏详细
文章目录内核中的源码以read系统调用为例进行分析:内核中的源码//"fs/read_write.c"372 SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)373 {374 struct file *file;375 ssize_t ret = -EBADF;376 ...原创 2019-06-10 14:18:45 · 814 阅读 · 0 评论 -
Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内核空间中如何申请内存呢?一般我们会用到 kmalloc()、kzalloc()、vmalloc() 等,下面我们介绍一下这些函数...原创 2019-06-10 14:23:11 · 168 阅读 · 0 评论 -
linux内核链表源码list.h
#ifndef _LINUX_LIST_H#define _LINUX_LIST_Hstruct list_head { struct list_head *next; struct list_head *prev;};//算出结构体成员对结构体对象首地址的偏移#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)-...原创 2019-06-10 14:54:34 · 332 阅读 · 0 评论 -
Linux内核中双向链表的经典实现
概要前面一章"介绍双向链表并给出了C/C++/Java三种实现",本章继续对双向链表进行探讨,介绍的内容是Linux内核中双向链表的经典实现和用法。其中,也会涉及到Linux内核中非常常用的两个经典宏定义offsetof和container_of。内容包括:Linux中的两个经典宏定义Linux中双向链表的经典实现Linux中的两个经典宏定义倘若你查看过Linux Kernel的源码...原创 2019-06-10 14:56:39 · 708 阅读 · 2 评论