- 浏览: 251918 次
- 性别:
- 来自: 北京
最新评论
-
soho00147:
我的想法是在这个插件的基础上编写更加强大的插件,扫描目录时发现 ...
maven增量编译的思考 -
soho00147:
如果没有变动则 maven install
使用时,直接 ...
maven增量编译的思考 -
soho00147:
可以参考这个插件,这个插件是对maven项目以module级别 ...
maven增量编译的思考
文章列表
网络相关驱动点滴
- 博客分类:
- linux driver
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,未经本人许可,不得用于商业用途。任何个人、媒体、其他网站不得私自抄袭;网络媒体转载请注明出处,增加原文链接,否则属于侵权行为。如有任何问 ...
linux内核启动过程学习总结 (转载)
- 博客分类:
- linux
转载自: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的作用
- 博客分类:
- linux
转载: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获得寄存器的值
- 博客分类:
- gdb
//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线程私有数据
- 博客分类:
- C/C++
在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__和...
- 博客分类:
- C/C++
__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
...
Ubuntu11.04下编译kernel
- 博客分类:
- ubuntu
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中的lddbus修改
- 博客分类:
- linux driver
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 ...