摘要: 从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。提醒一点,udev是应用层的,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用法如下:struct class *myclass ;class_create(THIS_MODULE, “my_device_driver”);device_create(myclass, NULL, MKDEV(major_num, mino 阅读全文
posted @ 2012-04-25 19:58 Think--@ 阅读(241) 评论(0) 推荐(0) 编辑
摘要: assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression );复制代码 assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#include <stdio.h>#include <assert.h>#include <stdlib.h>int mai 阅读全文
posted @ 2012-03-08 19:56 Think--@ 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。条件的检测是在互斥锁的保护下进行的。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。pthread_ 阅读全文
posted @ 2012-03-08 19:54 Think--@ 阅读(300) 评论(0) 推荐(0) 编辑
摘要: kill(传送信号给指定的进程,使用 kill -l 命令可查看linux系统中信号。) 表头文件 #include<sys/types.h> #include<signal.h> 定义函数int kill(pid_t pid,int sig); 函数说明 kill()可以用来送参数sig指定的信号给参数pid指定的进程。参数pid有几种情况: pid>0 将信号传给进程识别码为pid 的进程。 pid=0 将信号传给和目前进程相同进程组的所有进程 pid=-1 将信号广播传送给系统内所有的进程 pid<0 将信号传给进程组识别码为pid绝对值的所有进程 参 阅读全文
posted @ 2012-03-07 16:09 Think--@ 阅读(646) 评论(0) 推荐(0) 编辑
摘要: 转载http://hi.baidu.com/%B1%D5%C4%BF%B3%C9%B7%F0/blog/item/e7284ef16bcec3c70a46e05e.htmlselect函数使我们可以执行I/O多路转接。原型: #include sys/time.h> #include unistd.h> int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout); 参数maxfd是需要监视的最大的文件描述符值+1;rdset,wrset,exset分别对应于需要检测的 阅读全文
posted @ 2012-03-07 15:58 Think--@ 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 名称描述__devinit用于标记初始化设备的函数,例如,对于PCI驱动程序,用于初始化的函数pci_driver->probe就是用此宏标识的。被其它由_devinit标记的函数调用的函数通常也由_devinit标记。__devexit用于标记设备卸载时被调用的函数。__devexit_p用于初始化由__devexit 标记的函数的指针。如果内核既支持模块也支持热拔插,则__devexit_p(fn)返回fn,否则返回NULL。可以参考“其它优化”一节__devinitdata用于标记函数使用的已初始化的数据,而这些函数兼顾设备初始化(如被_devinit标记),因此共享其属性。__d 阅读全文
posted @ 2011-10-23 22:55 Think--@ 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 挣扎了两三天,一个是弄Uboot,一个是制作内核映像,然后用NFS挂载。以开始弄uboot就觉得奇怪,用光盘里的uboot发现网络连不上,连上网线网卡还是没反应,主机的本地连接也是断开的。原来uboot默认是没有网络访问的,所以它是断开的,如果用ping命令,就会发现网络是通的。具体的网络代码我还没有分析,后面再瞧瞧。修改uboot代码时,注意在/include/asm-arm/mach-types.h文件中,#define MACH_TYPE_S3C2440 的值,应该是1999,因为在Linux系统中,查看linux-2.6.29/include/asm/mach-types.h会发现ma 阅读全文
posted @ 2011-10-13 23:30 Think--@ 阅读(770) 评论(0) 推荐(0) 编辑
摘要: 今天折腾了大半天,才发现网上有别人写的关于虚拟机怎么与开发板连通。本以为挺简单的,可还是弄了这么久,真是浪费时间。在不通过外部网络,一台主机,一台虚拟机和一块开发板之间能相互Ping通,下面总结一下。1.vmware连网要改为桥接方式即Bridged2.vmware中Edit->Virtual Network Editor->Host Virtual Network Mapping中的 VMnet0选为你的计算机网卡。 这个网卡为本地连接的网卡,不是无线网卡,我就是在这里弄错了!3.网卡设置,计算机上网网卡IP:192.168.1.100,子网掩码: 255.255.255.0,网 阅读全文
posted @ 2011-10-08 00:10 Think--@ 阅读(1807) 评论(0) 推荐(0) 编辑
摘要: 编译内核出错:invalid option `abi=aapcs-linux'使用旧编译器,编译出错:gouwa@gouwa:~/project/kernel/linux-2.6.29$arm-linux-gcc -vReading specs from /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/specsConfigured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --targ 阅读全文
posted @ 2011-10-06 17:07 Think--@ 阅读(947) 评论(0) 推荐(0) 编辑