`
fanrey
  • 浏览: 251918 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
1. proto_register: rc = proto_register(&proto, 1); 把proto加到一个prot_list中,proto_list是一个全局的静态链表,inet域支持的所有协议全部在这个链表中,但这个链表在协议栈中并没有太大用途,它只是用于在/proc/net/protocols文件中输出当前系统所支持的所有协议。 这个函数是在 linux/net/core/sock.c 中定义的,除了可以将这个协议添加到活动协议列表中之外,如果需要,该函数还可以选择分配一到多个 slab 缓存. 2. sock_register函数将某项协议注册到协议族数组net ...
Sailor_forever  sailing_9806#163.com (本原创文章发表于Sailor_forever 的个人blog,未经本人许可,不得用于商业用途。任何个人、媒体、其他网站不得私自抄袭;网络媒体转载请注明出处,增加原文链接,否则属于侵权行为。如有任何问 ...
转载自:http://blog.chinaunix.net/uid-27052262-id-3404074.html 下面是学习linux内核启动过程的记录 平台是:powerpc mpc8548 + linux2.6.23 内核 通用寄存器的作用 r0 :在函数开始时使用 r1 :存放堆栈指针,相当于ia32架构中的esp寄存器 r2 :存放当前进程的描述符的地址 r3 :存放第一个参数和返回地址 r4-r10 :存放函数的参数 r11 :用在指针的调用和当前一些语言的环境指针 r12 :用于存放异常处理 r13 :保留做为系统线程ID r14-r31 :作为本地变量, ...
platform_driver_register(struct platform_driver *drv)注册后如何找到驱动匹配的设备: do_basic_setup()->driver_init()->platform_bus_init()->...初始化platform bus(虚拟总线) 设备向内核注册的时候platform_device_register()->platform_device_add()->...内核把设备挂在虚拟的platform bus下 驱动注册的时候platform_driver_register()->driver_regi ...
运行"insmod abc.ko"报错如下: abc: version magic '3.0.43 preempt mod_unload ' should be '3.0.43-913-ga691c40-dirty preempt mod_unload ' insmod: cannot insert abc.ko': invalid module format 别人编的正常的module如下: modinfo /tmp/abc.ko filename:       /tmp/abc.ko version:        0.3 license:        GPL de ...

ldconfig的作用

转载:ldconfig是一个动态链接库管理命令 为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig ldconfig  命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为  /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表. ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令. ldcon ...
源目录下三个文件: ubuntu@ubuntu-VirtualBox:~$ ls -lrt lnsrc total 0 -rw-r--r-- 1 ubuntu ubuntu 0 2012-11-02 17:50 ok1.txt -rw-r--r-- 1 ubuntu ubuntu 0 2012-11-02 17:50 ok2.txt -rw-r--r-- 1 ubuntu ubuntu 0 2012-11-02 17:50 ok3.txt 在目标目录lntest下创建三个对应的link: ubuntu@ubuntu-VirtualBox:~$ ln -s -t ./lntest ./lnsrc ...
//gdb_debug.c #include <stdio.h> f1() { register int i = 12345; printf("%d\n", i); double x = -5.5625; printf("%d\n",x); } main() { f1(); } gcc -g -o gdb_debug gdb_debug.c 用gdb调试: ubuntu@ubuntu-VirtualBox:~$ gdb gdb_debug GNU gdb (Ubuntu/Linaro 7.2-1ubunt ...

POSIX线程私有数据

在JAVA中是使用ThreadLocal来实现线程特定数据。POSIX中操作线程私有数据的主要通过以下4个函数来实现:pthread_key_create(创建一个键),pthread_setspecific(为一个键设置线程私有数据),pthread_getspecific(从一个键读取线程私有数据),pthread_key_delete(删除一个键)。这几个函数的声明如下: #include <pthread.h> int pthread_key_create(pthread_key_t *key,void (*destr_function)(void *)); int pth ...
#和##都是作用于其后面的宏参数。 1. #符号是一个预处理运算符,它可以把语言符号转化成字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing)。 2. ##符号把两个语言符号组合成单个语言符号。(变量化?)例如: #define XNAME(n) x##n 这样宏调用: XNAME(4) 展开后: x4 测试代码: // sharp.c #include <stdio.h> #define XNAME(n) x##n #define PXN(n) printf("x"#n" ...
__VA_ARGS__ 是一个可变参数的宏(gcc支持)。实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,替换省略号所代表的字符串。加##用来支持0个可变参数的情况。 测试代码: #include<stdio.h> #define PRINT_DBG(debug, ...)\ {\     if(debug) {\     fprintf(stderr, "%s %s [%d]: ", __FILE__, __FUNCTION__, __LINE__);\     fprintf ...
测试代码: //testout.c #include <stdio.h> void main() { printf("cur file : %s ; cur func : %s ; cur line : %d, gcc version: %s, base file: %s, date: %s, time: %s\n", __FILE__, __func__, __LINE__, __VERSION__, __BASE_FILE__, __DATE__, __TIME__); return; } 编译: gcc -o testout testout.c ...
1. 下载并解压Linux内核源代码, 内核源码下载地址为www.kernel.org,查看当前内核版本命令为uname -r。下载后解压至目录/usr/src. 2. 解压完成后在终端下进入/usr/src/linux-2.6.34.13目录(其中2.6.34.13为我使用的版本号) 3. 输入命令make mrproper,此命令用于清除以前编译产生的.o等其它文件,若为第一次编译此步骤可省略. 4. 运行make menuconfig报错,提示需要安装ncurses的库:    apt-get install libncurses5-dev 5. make menuconfig ...
Solution for eth0 missing issue: 1. rm /etc/udev/rules.d/70-persistent-net.rules, and shutdown. 2. In VirtualBox settings->Network, refresh the MAC. 3. start ubuntu and the eth0 appears. Solution for ip=10.0.2.15 issue(use "dhclient" to refetch ip from dhcp server): 1. Configure to fetc ...
ldd3的example是基于2.6.10内核写的,在新的2.6.3x上编译不过。下面是我做的修改: 1.Makefile: 把CFLAGS替换成EXTRA_CFLAGS. 2.新建一个空的config.h: 得到内核版本:uname -r 2.6.38-12-generic cd /lib/modules/2.6.38-12-generic/build/include/linux touch config.h 或者在config.h中增加以下内容: #ifndef _LINUX_CONFIG_H #define _LINUX_CONFIG_H /* This file is no l ...
Global site tag (gtag.js) - Google Analytics