原文:http://article.phpfans.net/?do=Show&id=Mjc3NTkx
作者: crazytyt 时间: 2009-08-27 13:29:00
所有的内核代码,基本都包含了linux\compile.h这个文件,所以它是基础,打算先分析这个文件里的代码看看,有空再分析分析其它的代码。
首先印入眼帘的是对__ASSEMBLY__这个宏的判断,这个变量实际是在编译汇编代码的时候,由编译器使用-D这样的参数加进去 的,AFLAGS这个变量也定义了这个变量,gcc会把这个宏定义为1。用在这里,是因为汇编代码里,不会用到类似于__user这样的属性(关于 __user这样的属性是怎么回子事,本文后面会提到),因为这样的属性是在定义函数的时候加的,这样避免不必要的在编译汇编代码时候的引用。
接下来是一个对__CHECKER__这个宏的判断,这里需要讲的东西比较多。
当 编译内核代码的时候,使用make C=1或C=2的时候,会调用一个叫Sparse的工具,这个工具对内核代码进行检查,怎么检查呢,就是靠对那些声明过Sparse这个工具所能识别的特 性的内核函数或是变量进行检查。在调用Sparse这个工具的同时,在Sparse代码里,会加上#define __CHECKER__ 1的字样。换句话说,就是,如果使用Sparse对代码进行检查,那么内核代码 ......
Cannot set serial info: Invalid argument
上面的报错,经过分析setserial源码与kernel 8250 driver,发现setserial通过ioctl(TIOCSSERIAL)将new_serial结构体(承载了
serial info)传入内核,内核8250驱动程序接到serial info后先get旧的serial info,再set新传入的serial info。
因此联想到使用setserial -a /dev/ttyS4时,get得到的串口信息中,baud_base为‘0’,而设置时也未指定此参数,因此驱动程序在设置新的serial info时会犯错,因为波特率不能为'0'。
因此重新执行配置命令: setserial /dev/ttyS4 port 0x300 irq 5 uart 16550 baud_base 115200,此结果设置成功。
原因就是少了一个参数:baud_base 115200
......
在linux下面开发c++的应用程序,使用stl的库,发现还是不是很方便,尤其是其调试器。
使用的是kdevelop集成环境,编编代码还算方便,编译也行,但是调试的话感觉特别不方便。它调用了gdb,但是为了调试方便自己又加了很
多额外的命令导致很多信息会看不到。自己一直用gdb,有人用ddd,后者也是调用gdb,但是发现如果我的被调试程序也包含命令行参数可能会导致ddd
或者我的程序不能正常运行,不知道什么原因。
linux下面的sgi的stl实现由两个问题,一个就是vector即使bitset也是如此,在gdb中无法看到指定位的值,只告诉你该位
的偏移量。第二个就是非vector的容器,调试时除了当前iterator指向的值和begin指向的值,无法察看其他元素的值,要看就只有改代码写打
印语句。目前还无法解决。
最近装了vs2005,发现付费的大公司的东西就是不一样,这两点做得很好。于是只有在linux面编辑/编译/运行,而在windows下调试了
查看原日志地址
原发布日期: 2006/4/17 10:55:56 ......
Linux实用代码--文件系统操作
from cu
[size=13px]这篇文档实用性很强,它不是讲某个命令的参数具体含义,而是从实际工作的角度来考虑,完成什么工作需要什么指令。
文件系统操作是最基本的操作,没有文件系统,操作系统根本就运行不了。
下面是我们经常要做的一些事情。在下面具体参数意义不解释,要了解这些
可以查询该命令帮助文档
1. 创建目录
mkdir
NO1. 在当前路径创建一级目录
[root@rehat root]# mkdir test
NO2. 在当前路径创建多级目录
[root@rehat root]# mkdir -p mytest/test1/test1_1
NO3. 在创建目录的同时给新建的目录赋权限
[root@rehat root]# mkdir -m 777 testmod
这样任何人对此目录都有任何权限
2. 复制文件与文件夹
cp
NO1. 复制指定 ......
linux下实用iptables封ip段的一些常见命令:
封单个IP的命令是:
iptables -I INPUT -s 211.1.0.0 -j DROP
封IP段的命令是:
iptables -I INPUT -s 211.1.0.0/16 -j DROP
iptables -I INPUT -s 211.2.0.0/16 -j DROP
iptables -I INPUT -s 211.3.0.0/16 -j DROP
封整个段的命令是:
iptables -I INPUT -s 211.0.0.0/8 -j DROP
封几个段的命令是:
iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP
想在服务器启动自运行的话有三个方法:
1、把它加到/etc/rc.local中
2、iptables-save >;/etc/sysconfig/iptables可以把你当前的iptables规则放到/etc/sysconfig/iptables中,系统启动iptables时自动执行。
3、service iptables save 也可以把你当前的iptables规则放/etc/sysconfig/iptables中,系统启动iptables时自动执行。
后两种更好此,一般iptables服务会在network服务之前启来,更安全。
解封的话:
iptables -D INPUT -s IP地址 -j REJECT
iptables -F 全清掉了 ......
1.下载成功后上传至服务器任意目录
2. 在当前目录输入
sh jdk-6u2-linux-i586-rpm.bin
3.看到 安装程序在询问您是否尊守许可协议页面 ,回车,空格都可以,看完协议.
出现一行字:Do you aggree to the above license terms? [yes or no]
安装程序在问您是否愿意遵守刚才看过的许可协议。当然要同意了,输入"y" 或 "yes" 回车。
4.在命令行输入:
vi /etc/profile
在里面添加如下内容
export JAVA_HOME=/usr/java/jdk1.6.0_02
export JAVA_BIN=/usr/java/jdk1.6.0_02/bin
export PATH=$PATH:$JAVA_HOME/bin
  ......