今天写一个简单的socket网络通讯的程序的时候,用ctrl+c结束服务器端程序之后,再次启动服务器出现了bind failed:the address already in use的错误。在网上查了一下以后找到了原因,在此记录一下。这个IBM的官网上说到了这一点:http://www.ibm.com/developerworks/cn/linux/l-sockpit/。详细介绍如下:
...
毫不夸张的说每个程序员都是一个完美主义者
添加一个c/c++代码,满脸的都是条纹各种标注
无法容忍
像下图所示
好,我们来个暴力的,关闭它
点击Window->Preferences
打开如下选项
关闭所有的代码分析
是不是舒服多了...
早先看linux驱动相关书籍的时候,隐约记得物理地址有动态映射和静态映射,当时写驱动都是想着自己动手写,所以一上手看着动态映射好用,就在自己的驱动上使用动态映射,将寄存器地址映射到内存上,即调用ioremap函数。在单线作战的时候ioremap确实好用,不需要改动内核的其他部分,直接将自己想用的物理地址映射到内存再操作。但很多时候当我们的设备需要在全局范围内被使用的时候,ioremap就会比较尴尬...
如果for循环命令中带有一些符号,需要用()括起来。
for i in {1..4}; do (python /data/UGCRobot/manage/Scheduler.py 1.log > /dev/null 2>&1 &); done...
linux生成动态库时遇到了relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC错误。
由于我的系统是AMD64位的,所以需要在编译的时候添加 -fPIC选项
解决方法:
例如:
g++ -c -fPIC head.cpp ...
Linux驱动注册有多种方式,通常是以内核提供的表征数据结构封装后按照内核子系统提供的接口函数进行注册,还有一些是比较复杂的以链表方式进行维护。以下对几种驱动注册方式进行介绍:
一、子系统有专门的驱动注册函数:
例如RTC子系统,提供rtc_device_register注册接口函数。
例如:
rtc_device_register(client->name,&client->dev, &...
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。
大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。
方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);
方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);
方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比较完整);
示例四:在proc文件中使用内核链表的一个示例(用的方法三)。
...
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。
大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。
方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);
方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);
方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比较完整);
示例四:在proc文件中使用内核链表的一个示例(用的方法三)。
...
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。
大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。
方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);
方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);
方法三:使用proc_create_dat...
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。
大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。
方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);
方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);
方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比较完整);
示例四:在proc文件中使用内核链表的一个示例(用的方法三)。
...