安装软件 apt-get install softname1 softname2 softname3……
卸载软件 apt-get remove softname1 softname2 softname3……
卸载并清除配置 apt-get remove --purge softname1
更新软件信息数据库 apt-get update
进行系统升级 apt-get upgrade
搜索软件包 apt-cache search softname1 softname2 softname3……
安装deb软件包 dpkg -i xxx.deb
删除软件包 dpkg -r xxx.deb
连同配置文件一起删除 dpkg -r --purge xxx.deb
查看软件包信息 dpkg -info xxx.deb
查看文件拷贝详情 dpkg -L xxx.deb
查看系统中已安装软件包信息 dpkg -l|grep
重新配置软件包 dpkg-reconfigure xxx
笔记分类
2009年4月21日星期二
Linux查询命令
1.grep、fgrep和egrep命令
这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令。
这组命令在搜索与定位文件中特定的主题方面非常有用。要搜索的模式可以被认为是一些关键词,您可以用它们来搜索文件中包含的这些关键词。编写程序时,可以用它来寻找某一个函数,或是相关的词组。grep命令的搜索功能比fgrep强大,因为grep命令的搜索模式可以是正则表达式,而fgrep却不能。有关正则表达式请参见shell一章。
该组命令中的每一个命令都有一组选项,利用这些选项可以改变其输出方式。例如,可以在搜索到的文本行上加入行号,或者只输出文本行的行号,或者输出所有与搜索模式不匹配的文本行,或只简单地输出已搜索到指定模式的文件名,并且可以指定在查找模式时忽略大小写。
这组命令在指定的输入文件中查找与模式匹配的行。如果没有指定文件,则从标准输入中读取。正常情况下,每个匹配的行被显示到标准输出。如果要查找的文件是多个,则在每一行输出之前加上文件名。
语法:
grep [选项] [查找模式] [文件名1,文件名2,……]
egrep [选项] [查找模式] [文件名1,文件名2,……]
fgrep [选项] [查找模式] [文件名1,文件名2,……]
参数:
- E 每个模式作为一个扩展的正则表达式对待。
- F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。
- b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。
- c 只显示匹配行的数量。
- i 比较时不区分大小写。
- h 在查找多个文件时,指示grep不要将文件名加入到输出之前。
- l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。
- n 在输出前加上匹配串所在行的行号(文件首行行号为1)。
- v 只显示不包含匹配串的行。
- x 只显示整行严格匹配的行。
- e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。
- f expfile 从expfile文件中获取要搜索的模式,一个模式占一行。
对该组命令的使用还需注意以下方面:
在命令后键入搜索的模式,再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如“*”等,用来生成文件名列表。如果想在搜索的模式中包含有空格的字符串,可以用单引号把要搜索的模式括起来,用来表明搜索的模式是由包含空格的字符串组成。否则,Shell将把空格认为是命令行参数的定界符,而grep命令将把搜索模式中的单词解释为文件名列表中的一部分。在下面的例子中,grep命令在文件example中搜索模式“text file”。
$ grep ’text file’ example
用户可以在命令行上用Shell特殊字符来生成将要搜索的文件名列表。在下面的例子中,特殊字符“*”用来生成一个文件名列表,该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式匹配的行。
$ grep data *
特殊字符在搜索一组指定的文件时非常有用。例如,如果想搜索所有的C程序源文件中特定的模式,您可以用“*.c”来指定文件名列表。假设用户的 C程序中包含一些不必要的转向语句(goto语句),想要找到这些语句,可以用如下的命令来搜索并显示所有包含goto语句的代码行:
$ grep goto *.c
用户可以在命令行上键入搜索模式,也可以使用-f选项从指定文件中读取要搜索的模式。在文件中,每个搜索模式占一行。如果经常要搜索一组常见字符串时,这个功能非常有用。在下面的例子中,用户要在文件exam中搜索字符串“editor”和“create”,就把要搜索的模式放置在文件mypats中,然后,grep命令从文件mypats中读取要搜索的模式。
$ cat mypats
editor
create
$ grep -f mypats exam
2.文件查找命令
find命令
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。
语法:find 起始目录 寻找条件 操作
说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。
该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为:
(1)and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找条件才算满足。例如:
$ find –name ’tmp’ –xtype c -user ’inin’
该命令寻找三个给定条件都满足的所有文件。
(2)or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足。
例如:
$ find –name ’tmp’ –o –name ’mina*’
该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。
(3)not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。
例如:
$ find ! –name ’tmp’
该命令查询文件名不是’tmp’的所有文件。
需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“\”来去除括号的意义。
例:$ find \(–name ’tmp’ –xtype c -user ’inin’ \) 寻找条件有以下选项:
首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则:
+20 表示20以后(21,22,23等)
-20 表示20以前(19,18,17等)
20 表示正好是20
1. 以名称和文件属性查找。
- name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。
- lname ’字串’查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、[ ]。
-gid n 查找属于ID号为n的用户组的所有文件。
-uid n 查找属于ID号为n的用户的所有文件。
-group ’字串’ 查找属于用户组名为所给字串的所有的文件。
-user ’字串’ 查找属于用户名为所给字串的所有的文件。
-empty 查找大小为0的目录或文件。
-path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。
-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。
-size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。
-type x 查找类型为x的文件,x为下列字符之一:
b 块设备文件
c 字符设备文件
d 目录文件
p 命名管道(FIFO)
f 普通文件
l 符号链接文件(symbolic links)
s socket文件
-xtype x 与-type基本相同,但只查找符号链接文件。
2. 以时间为条件查找
- amin n 查找n分钟以前被访问过的所有文件。
- atime n 查找n天以前被访问过的所有文件。
- cmin n 查找n分钟以前文件状态被修改过的所有文件。
- ctime n 查找n天以前文件状态被修改过的所有文件。
- mmin n 查找n分钟以前文件内容被修改过的所有文件。
- mtime n 查找n天以前文件内容被修改过的所有文件。
3. 可执行的操作
- exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ \;”结束。
- ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。
- ls 详细列出所找到的所有文件。
- fprintf 文件名 将找到的文件名写入指定文件。
- print 在标准输出设备上显示查找出的文件名。
- printf 格式 格式的写法请参考有关C语言的书。
例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。
$ find . - name ‘main*’ - exec more {} \;
例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。
$ find . \(- name a.out - o - name ‘*.o’\)\
> - atime +7 - exec rm {} \;
说明如下: 命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。\(和\)表示括号(),其中的“\”称为转义符。之所以这样写是由于对Shell而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。“- name a.out”是指要查找名为a.out的文件;“- name ‘*.o’”是指要查找所有名字以 .o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件,find在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前(条件-atime +7),若是,则对该文件执行命令rm(- exec rm{ }\;)。其中{ }代表当前查到的符合条件的文件名,\;则是语法所要求的。上述命令中第一行的最后一个\是续行符。当命令太长而在一行写不下时,可输入一个\,之后系统将显示一个>,指示用户继续输入命令。
locate命令
功能:locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。
语法: locate 相关字
例如:查找相关字issue
$ locate issue
/etc/issue
/etc/issue.net
/usr/man/man5/issue.5
/usr/man/man5/issue.net.5 。
这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令。
这组命令在搜索与定位文件中特定的主题方面非常有用。要搜索的模式可以被认为是一些关键词,您可以用它们来搜索文件中包含的这些关键词。编写程序时,可以用它来寻找某一个函数,或是相关的词组。grep命令的搜索功能比fgrep强大,因为grep命令的搜索模式可以是正则表达式,而fgrep却不能。有关正则表达式请参见shell一章。
该组命令中的每一个命令都有一组选项,利用这些选项可以改变其输出方式。例如,可以在搜索到的文本行上加入行号,或者只输出文本行的行号,或者输出所有与搜索模式不匹配的文本行,或只简单地输出已搜索到指定模式的文件名,并且可以指定在查找模式时忽略大小写。
这组命令在指定的输入文件中查找与模式匹配的行。如果没有指定文件,则从标准输入中读取。正常情况下,每个匹配的行被显示到标准输出。如果要查找的文件是多个,则在每一行输出之前加上文件名。
语法:
grep [选项] [查找模式] [文件名1,文件名2,……]
egrep [选项] [查找模式] [文件名1,文件名2,……]
fgrep [选项] [查找模式] [文件名1,文件名2,……]
参数:
- E 每个模式作为一个扩展的正则表达式对待。
- F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。
- b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。
- c 只显示匹配行的数量。
- i 比较时不区分大小写。
- h 在查找多个文件时,指示grep不要将文件名加入到输出之前。
- l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。
- n 在输出前加上匹配串所在行的行号(文件首行行号为1)。
- v 只显示不包含匹配串的行。
- x 只显示整行严格匹配的行。
- e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。
- f expfile 从expfile文件中获取要搜索的模式,一个模式占一行。
对该组命令的使用还需注意以下方面:
在命令后键入搜索的模式,再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如“*”等,用来生成文件名列表。如果想在搜索的模式中包含有空格的字符串,可以用单引号把要搜索的模式括起来,用来表明搜索的模式是由包含空格的字符串组成。否则,Shell将把空格认为是命令行参数的定界符,而grep命令将把搜索模式中的单词解释为文件名列表中的一部分。在下面的例子中,grep命令在文件example中搜索模式“text file”。
$ grep ’text file’ example
用户可以在命令行上用Shell特殊字符来生成将要搜索的文件名列表。在下面的例子中,特殊字符“*”用来生成一个文件名列表,该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式匹配的行。
$ grep data *
特殊字符在搜索一组指定的文件时非常有用。例如,如果想搜索所有的C程序源文件中特定的模式,您可以用“*.c”来指定文件名列表。假设用户的 C程序中包含一些不必要的转向语句(goto语句),想要找到这些语句,可以用如下的命令来搜索并显示所有包含goto语句的代码行:
$ grep goto *.c
用户可以在命令行上键入搜索模式,也可以使用-f选项从指定文件中读取要搜索的模式。在文件中,每个搜索模式占一行。如果经常要搜索一组常见字符串时,这个功能非常有用。在下面的例子中,用户要在文件exam中搜索字符串“editor”和“create”,就把要搜索的模式放置在文件mypats中,然后,grep命令从文件mypats中读取要搜索的模式。
$ cat mypats
editor
create
$ grep -f mypats exam
2.文件查找命令
find命令
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。
语法:find 起始目录 寻找条件 操作
说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。
该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为:
(1)and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找条件才算满足。例如:
$ find –name ’tmp’ –xtype c -user ’inin’
该命令寻找三个给定条件都满足的所有文件。
(2)or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足。
例如:
$ find –name ’tmp’ –o –name ’mina*’
该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。
(3)not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。
例如:
$ find ! –name ’tmp’
该命令查询文件名不是’tmp’的所有文件。
需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“\”来去除括号的意义。
例:$ find \(–name ’tmp’ –xtype c -user ’inin’ \) 寻找条件有以下选项:
首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则:
+20 表示20以后(21,22,23等)
-20 表示20以前(19,18,17等)
20 表示正好是20
1. 以名称和文件属性查找。
- name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。
- lname ’字串’查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、[ ]。
-gid n 查找属于ID号为n的用户组的所有文件。
-uid n 查找属于ID号为n的用户的所有文件。
-group ’字串’ 查找属于用户组名为所给字串的所有的文件。
-user ’字串’ 查找属于用户名为所给字串的所有的文件。
-empty 查找大小为0的目录或文件。
-path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。
-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。
-size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。
-type x 查找类型为x的文件,x为下列字符之一:
b 块设备文件
c 字符设备文件
d 目录文件
p 命名管道(FIFO)
f 普通文件
l 符号链接文件(symbolic links)
s socket文件
-xtype x 与-type基本相同,但只查找符号链接文件。
2. 以时间为条件查找
- amin n 查找n分钟以前被访问过的所有文件。
- atime n 查找n天以前被访问过的所有文件。
- cmin n 查找n分钟以前文件状态被修改过的所有文件。
- ctime n 查找n天以前文件状态被修改过的所有文件。
- mmin n 查找n分钟以前文件内容被修改过的所有文件。
- mtime n 查找n天以前文件内容被修改过的所有文件。
3. 可执行的操作
- exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ \;”结束。
- ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。
- ls 详细列出所找到的所有文件。
- fprintf 文件名 将找到的文件名写入指定文件。
- print 在标准输出设备上显示查找出的文件名。
- printf 格式 格式的写法请参考有关C语言的书。
例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。
$ find . - name ‘main*’ - exec more {} \;
例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。
$ find . \(- name a.out - o - name ‘*.o’\)\
> - atime +7 - exec rm {} \;
说明如下: 命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。\(和\)表示括号(),其中的“\”称为转义符。之所以这样写是由于对Shell而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。“- name a.out”是指要查找名为a.out的文件;“- name ‘*.o’”是指要查找所有名字以 .o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件,find在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前(条件-atime +7),若是,则对该文件执行命令rm(- exec rm{ }\;)。其中{ }代表当前查到的符合条件的文件名,\;则是语法所要求的。上述命令中第一行的最后一个\是续行符。当命令太长而在一行写不下时,可输入一个\,之后系统将显示一个>,指示用户继续输入命令。
locate命令
功能:locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。
语法: locate 相关字
例如:查找相关字issue
$ locate issue
/etc/issue
/etc/issue.net
/usr/man/man5/issue.5
/usr/man/man5/issue.net.5 。
2009年4月19日星期日
准备安装qte/Qtopia所需要的软件
准备安装Qtopia所需要的软件
◆ Qtopia 1.7.0;
◆ Tmake 1.11 (编译Qtopia时要用到) ;
◆ Qt/Embedded 2.3.7(Qtopia 1.7.0是基于该开发平台上开发的);
◆ Qt 2.3.2 for X11(在X11环境下使用其虚拟帧缓冲);
这里要注意几个软件版本的对应关系,上面是我使用的版本,虽然很旧,但是可以安装。
◆ Qtopia 1.7.0;
◆ Tmake 1.11 (编译Qtopia时要用到) ;
◆ Qt/Embedded 2.3.7(Qtopia 1.7.0是基于该开发平台上开发的);
◆ Qt 2.3.2 for X11(在X11环境下使用其虚拟帧缓冲);
这里要注意几个软件版本的对应关系,上面是我使用的版本,虽然很旧,但是可以安装。
X,X11,XFREE,WM,KDE,GNOME等之间的关系
很多LINUX初学者分不清楚linux和X之间,X和
Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易
于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.
一,linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的.
图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统,linux和Xfree的关系就相当于当年的DOS和
WINDOWS3.0一样,windows3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样
XFree只是linux下的一个应用程序而已.不是系统的一部分,但是X的存在可以方便用户使用电脑.WINDOWS95及以后的版本就不一样了,他们
的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形
界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器.这也WINDOWS和linux的重要区别之一.
二,X是协议,不是具体的某个软件:
X是协议,就像HTTP协议,IP协议一样.这个概念很多初学者甚至学习LINUX有一定时间的人都混淆,一个基于X的应用程序需要运行并显示内容
时他就联接到X服务器,开始用X协议和服务器交谈.比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.
X应用程序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的"画"的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完
成等等工作是由X服务器来完成的.X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先
生,我发现鼠标被按下了,您有什么指示吗?如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正
方形,当然他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画--那是服务器的事情.
那么协议是需要具体的软件来实现的,这就是下面我要讲的:
三,X和XFree86的关系.
有了协议就需要具体的软件来实现这个协议.就好比我们有了交通法规就需要交警去根据法规维护交通秩序一样.Xfree86就是这样一个去根据法规实
现协议的"交警".他按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务.当然不仅仅是某个特定的交警才可以去维护和实现这个法规,比如还可以由
交通协管员来实现交通法规,必要的时候警察也可以介入,当然前提是他们都要懂得交通法规,也就是要懂得协议.所以实现X协议的软件也并不只有
XFree86,XFree86只是实现X协议的一个免费X服务器软件.商业上常用MOTIF,现在还有XORG,还有很多很小的由爱好者写的小的X服务
器软件.甚至可以在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示.多么神奇.
你可以用google找到这样的X服务器软件.只不过在LINUX上最常用的是XFree86.(现在的linux发行版都用Xorg了)顺便说一句,苹
果电脑的图形界面用的也是X协议,而且被认为是做的最好的X协议图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很
多大型三维图形设计软件都是在苹果平台上的原因.
为了便于理解拿HTTP协议来比较:
协议是HTTP (hyper text transmission protocol)
实现这个协议的常用服务器有:apache IIS 等
请求这些服务器传输文件的客户有:IE ,MOZILLA ,NETSCAPE等.
协议是X
实现这个协议的常用服务器有Xfree86 ,Xorg ,Xnest等
请求这些服务器来完成显示任务的客户:所有的X应用程序.
只不过HTTP协议的服务器和客户端通常都在两台不同的电脑(服务器和客户机)之间来实现,所以一般人对这个比较容易理解.而X协议的服务器和客户
端程序通常在同一台电脑上,因此很多用户都感到对此很难理解.既然是协议,那么肯定和平台无关的,因此可以让X应用程序显示在任何装有X服务器的远程计算
机上.甚至显示在装有Xnest服务器的windows系统上.只不过在大多数情况下,X应用程序都用本机的X服务器,然后X服务器将显示结果输出到本机
的显示器.这也是很多人不理解X是一种协议的原因.
四,X和X11R6又是什么关系?
不知道初学者有没有注意到/usr/X11R6这个目录,这是XFree的默认安装目录
X11R6 实际上是 X Protocol version 11 Release 6
(X协议第11版第六次发行)的意思,就是说目前用的X协议是第11版的,然后经过了6次小的修正.不同版本的X协议是不能通信的.就象我们现在IPV4和IPV6不能通信一样,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6.
另外XFree86 3.3.6 XFree86 4.3.6 等这些版本是实现X协议的软件XFree86的版本号.这是初学者经常高混淆的概念.
协议版本和实现协议的软件的版本--这两个概念的区别你分清楚了吗?
五,X服务器和WM(window manager 窗口管理器)之间是什么关系.
平时大家起动图形界面是怎么启动的呢?
如果你是一开己就进入图形界面那就太遗憾了.应为你错过了了解X服务器起动过程的好时机.不过没关系.你打开一个XTERM输入:
init 3
就可以安全的回到字符界面.
好了,等做完以下实验你就完全明白X和WM(window manager 窗口管理器)之间是什么关系了.
先输入以下命令:
#startx
起动图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境.
你可以最大化,最小化,移动,关闭窗口等.
按ctrl+alt+backspace反回字符界面.
输入:
#xinit
再次启动图形界面,你看到了什么,你看到一个XTERM.而且不能移动.但是你可以在这个XTERM中输入命令打开X应用程序,如果我输入:
#mozilla
打开浏览器,你看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框.
为什么同样一个X应用程序会有这样的不同呢?因为我们用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),如果你用KDE就起动了KDE,如果你用GNOME就起动了GNOME.但是你用xinit起动图形界面的时候却没有起动WM.
现在你明白窗口管理器的作用了吗?他的作用就是最大化,最小化,移动,关闭窗口等.而这些不是X服务器来负责完成的.
如果你用xinit起动图形界面并在xterm中输入twm,看看会有什么?
xterm被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个xterm,twm就是XFree86中自带的窗口管理器,是一个比较简陋的最简单的窗口管理器,但是他具有窗口管理器的全部特征.
如果你不输入twm而输入gnome-session就可以起动GNOME
或者输入startkde起动KDE.
通过以上的实验你就可以清楚的明白他们之间的关系.
六,关于KDE和GNOME
KDE和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单, KDE是K Desktop
Environment 的缩写.他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等.
GNOME是GNU Network Object Model Environment 的缩写.和KDE一样,也是一个功能强大的综合环境.
另外在其它UNIX系统中,常常使用CDE作为这样一个环境.
其它的小型窗口管理器有:
window maker,after step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器.REDHAT9中有
window maker 但是默认不安装,大家可以装来试试.只要xinit再wmaker&就可以用windowmaker了.
七,linux图形界面层次关系总结
linux本身-->X服务器窗口管理器(综合桌面环境)-->X应用程序.
转自:http://bbs2.chinaunix.net/thread-1234931-1-1.html
Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易
于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.
一,linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的.
图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统,linux和Xfree的关系就相当于当年的DOS和
WINDOWS3.0一样,windows3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样
XFree只是linux下的一个应用程序而已.不是系统的一部分,但是X的存在可以方便用户使用电脑.WINDOWS95及以后的版本就不一样了,他们
的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形
界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器.这也WINDOWS和linux的重要区别之一.
二,X是协议,不是具体的某个软件:
X是协议,就像HTTP协议,IP协议一样.这个概念很多初学者甚至学习LINUX有一定时间的人都混淆,一个基于X的应用程序需要运行并显示内容
时他就联接到X服务器,开始用X协议和服务器交谈.比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.
X应用程序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的"画"的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完
成等等工作是由X服务器来完成的.X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先
生,我发现鼠标被按下了,您有什么指示吗?如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正
方形,当然他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画--那是服务器的事情.
那么协议是需要具体的软件来实现的,这就是下面我要讲的:
三,X和XFree86的关系.
有了协议就需要具体的软件来实现这个协议.就好比我们有了交通法规就需要交警去根据法规维护交通秩序一样.Xfree86就是这样一个去根据法规实
现协议的"交警".他按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务.当然不仅仅是某个特定的交警才可以去维护和实现这个法规,比如还可以由
交通协管员来实现交通法规,必要的时候警察也可以介入,当然前提是他们都要懂得交通法规,也就是要懂得协议.所以实现X协议的软件也并不只有
XFree86,XFree86只是实现X协议的一个免费X服务器软件.商业上常用MOTIF,现在还有XORG,还有很多很小的由爱好者写的小的X服务
器软件.甚至可以在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示.多么神奇.
你可以用google找到这样的X服务器软件.只不过在LINUX上最常用的是XFree86.(现在的linux发行版都用Xorg了)顺便说一句,苹
果电脑的图形界面用的也是X协议,而且被认为是做的最好的X协议图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很
多大型三维图形设计软件都是在苹果平台上的原因.
为了便于理解拿HTTP协议来比较:
协议是HTTP (hyper text transmission protocol)
实现这个协议的常用服务器有:apache IIS 等
请求这些服务器传输文件的客户有:IE ,MOZILLA ,NETSCAPE等.
协议是X
实现这个协议的常用服务器有Xfree86 ,Xorg ,Xnest等
请求这些服务器来完成显示任务的客户:所有的X应用程序.
只不过HTTP协议的服务器和客户端通常都在两台不同的电脑(服务器和客户机)之间来实现,所以一般人对这个比较容易理解.而X协议的服务器和客户
端程序通常在同一台电脑上,因此很多用户都感到对此很难理解.既然是协议,那么肯定和平台无关的,因此可以让X应用程序显示在任何装有X服务器的远程计算
机上.甚至显示在装有Xnest服务器的windows系统上.只不过在大多数情况下,X应用程序都用本机的X服务器,然后X服务器将显示结果输出到本机
的显示器.这也是很多人不理解X是一种协议的原因.
四,X和X11R6又是什么关系?
不知道初学者有没有注意到/usr/X11R6这个目录,这是XFree的默认安装目录
X11R6 实际上是 X Protocol version 11 Release 6
(X协议第11版第六次发行)的意思,就是说目前用的X协议是第11版的,然后经过了6次小的修正.不同版本的X协议是不能通信的.就象我们现在IPV4和IPV6不能通信一样,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6.
另外XFree86 3.3.6 XFree86 4.3.6 等这些版本是实现X协议的软件XFree86的版本号.这是初学者经常高混淆的概念.
协议版本和实现协议的软件的版本--这两个概念的区别你分清楚了吗?
五,X服务器和WM(window manager 窗口管理器)之间是什么关系.
平时大家起动图形界面是怎么启动的呢?
如果你是一开己就进入图形界面那就太遗憾了.应为你错过了了解X服务器起动过程的好时机.不过没关系.你打开一个XTERM输入:
init 3
就可以安全的回到字符界面.
好了,等做完以下实验你就完全明白X和WM(window manager 窗口管理器)之间是什么关系了.
先输入以下命令:
#startx
起动图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境.
你可以最大化,最小化,移动,关闭窗口等.
按ctrl+alt+backspace反回字符界面.
输入:
#xinit
再次启动图形界面,你看到了什么,你看到一个XTERM.而且不能移动.但是你可以在这个XTERM中输入命令打开X应用程序,如果我输入:
#mozilla
打开浏览器,你看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框.
为什么同样一个X应用程序会有这样的不同呢?因为我们用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),如果你用KDE就起动了KDE,如果你用GNOME就起动了GNOME.但是你用xinit起动图形界面的时候却没有起动WM.
现在你明白窗口管理器的作用了吗?他的作用就是最大化,最小化,移动,关闭窗口等.而这些不是X服务器来负责完成的.
如果你用xinit起动图形界面并在xterm中输入twm,看看会有什么?
xterm被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个xterm,twm就是XFree86中自带的窗口管理器,是一个比较简陋的最简单的窗口管理器,但是他具有窗口管理器的全部特征.
如果你不输入twm而输入gnome-session就可以起动GNOME
或者输入startkde起动KDE.
通过以上的实验你就可以清楚的明白他们之间的关系.
六,关于KDE和GNOME
KDE和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单, KDE是K Desktop
Environment 的缩写.他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等.
GNOME是GNU Network Object Model Environment 的缩写.和KDE一样,也是一个功能强大的综合环境.
另外在其它UNIX系统中,常常使用CDE作为这样一个环境.
其它的小型窗口管理器有:
window maker,after step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器.REDHAT9中有
window maker 但是默认不安装,大家可以装来试试.只要xinit再wmaker&就可以用windowmaker了.
七,linux图形界面层次关系总结
linux本身-->X服务器窗口管理器(综合桌面环境)-->X应用程序.
转自:http://bbs2.chinaunix.net/thread-1234931-1-1.html
2009年4月13日星期一
Flex特效
Flex特效
AnimateProperty>可实现拉伸效果
Blur>模糊效果
Dissolve>实现淡出淡入效果,与Fade>相似
Glow>外发光效果
Iris>以矩形方式出现或消失
Move>移动效果
Pause>停止 mx.effects.easing.Bounce.easeOut可产生弹动效果
Resize>改变大小
Rotate>旋转角度
SoundEffect>声音效果
WipeDown>从上往下消失或出现
WipeLeft>从右往左消失或出现
WipeRight>从左往右消失或出现
WipeUp>从下往上消失或出现
Zoom>放大或缩小
Transition>不同state切换时的过渡效果
Parallel>多种效果叠加
Sequence>序列执行效果
AnimateProperty>可实现拉伸效果
Blur>模糊效果
Dissolve>实现淡出淡入效果,与Fade>相似
Glow>外发光效果
Iris>以矩形方式出现或消失
Move>移动效果
Pause>停止 mx.effects.easing.Bounce.easeOut可产生弹动效果
Resize>改变大小
Rotate>旋转角度
SoundEffect>声音效果
WipeDown>从上往下消失或出现
WipeLeft>从右往左消失或出现
WipeRight>从左往右消失或出现
WipeUp>从下往上消失或出现
Zoom>放大或缩小
Transition>不同state切换时的过渡效果
Parallel>多种效果叠加
Sequence>序列执行效果
2009年3月5日星期四
字符串截取函数substr ( )详解
原型:string substr ( string $string , int $start [, int $length ] ),它可以用于在一个较长的(9php.com)字符串中查找匹配的(9php.com)字符串或字符。$string为所要处理的(9php.com)字符串,$start为开始选取的(9php.com)位置,$length为要选取的(9php.com)长度
例:
//此教程来源于97xxoo教程网(www.97xxoo.org)
查看完整的(9php.com)教程请点:http://www.97xxoo.org/article/1/2008/20081115345.shtml
$rest1 = substr("abcdef", 0, 0); // returns ""
$rest2 = substr("abcdef", 0, 2); // returns "ab"
$rest3 = substr("abcdef", 0, -1); // returns "abcde"
$rest4 = substr("abcdef", 2,0); // returns ""
$rest5 = substr("abcdef", 2,2); // returns "cd"
$rest6 = substr("abcdef", 2, -1); // returns "cde"
$rest7 = substr("abcdef", -2,0); // returns ""
$rest8 = substr("abcdef", -2,2); // returns "ef"
$rest9 = substr("abcdef", -2,-1); // returns "e"
?>
$start如果为非负数,在字符串中以0为开头从左向右开始记数,草榴社区即0代表字符"a",1则代表字符"b",以此类推。如果是负数,在字符串中以1为开头从右向左开始记数,即-1代表字符"f",-2代表字符"e",同理也可以此类推。
该函数在使用中有时也省略 $length,这个时候如果只用一个正数作为子字符串起点,将得到从起点到字符串结束的(9php.com)整个字符串。如果只用一个负数作为子字符串起点,将得到一个原字符串尾部的(9php.com)一个子字符串,字符个数等于负数的(9php.com)绝对值,其实原理和上述不省略$length时一样。只是不用再去判断所取字符的(9php.com)个数,单去判断起始位置就OK。
例:
$rest1 = substr("abcdef", 2); // returns "cdef"
$rest2 = substr("abcdef", -2); // returns "ef"
?>
例:
//此教程来源于97xxoo教程网(www.97xxoo.org)
查看完整的(9php.com)教程请点:http://www.97xxoo.org/article/1/2008/20081115345.shtml
$rest1 = substr("abcdef", 0, 0); // returns ""
$rest2 = substr("abcdef", 0, 2); // returns "ab"
$rest3 = substr("abcdef", 0, -1); // returns "abcde"
$rest4 = substr("abcdef", 2,0); // returns ""
$rest5 = substr("abcdef", 2,2); // returns "cd"
$rest6 = substr("abcdef", 2, -1); // returns "cde"
$rest7 = substr("abcdef", -2,0); // returns ""
$rest8 = substr("abcdef", -2,2); // returns "ef"
$rest9 = substr("abcdef", -2,-1); // returns "e"
?>
$start如果为非负数,在字符串中以0为开头从左向右开始记数,草榴社区即0代表字符"a",1则代表字符"b",以此类推。如果是负数,在字符串中以1为开头从右向左开始记数,即-1代表字符"f",-2代表字符"e",同理也可以此类推。
该函数在使用中有时也省略 $length,这个时候如果只用一个正数作为子字符串起点,将得到从起点到字符串结束的(9php.com)整个字符串。如果只用一个负数作为子字符串起点,将得到一个原字符串尾部的(9php.com)一个子字符串,字符个数等于负数的(9php.com)绝对值,其实原理和上述不省略$length时一样。只是不用再去判断所取字符的(9php.com)个数,单去判断起始位置就OK。
例:
$rest1 = substr("abcdef", 2); // returns "cdef"
$rest2 = substr("abcdef", -2); // returns "ef"
?>
2009年2月20日星期五
2009年1月17日星期六
梦幻钓鱼大全
一、傲来的钓鱼技巧:
1 好象有鱼出现了,鱼漂微微动了一下,水面微波荡漾,鱼钩好象碰到了什么,鱼竿开始下弯 【小力 直竿 快速】沙丁鱼
2 好象有鱼出现了,鱼漂微微动了一下,水面微波荡漾,鱼钩好象碰到了什么,鱼漂上起下浮 【中力 直竿 快速】对虾
3 好象有鱼出现了,鱼漂微微动了一下,水面微波荡漾,鱼竿开始下弯了,水面溅起浪花 【小力 斜竿 快速】大黄鱼
4 好象有鱼出现了,鱼漂微微动了一下,水面微波荡漾,鱼竿开始下弯了,鱼漂上起下浮 【中力 斜竿 快速】小黄鱼
5鱼竿开始晃动,好象有鱼出现了,鱼钩好象被什么咬住了,水面溅起浪花,鱼竿开始下弯【中力 直竿 迂回】毛蟹
6鱼竿开始晃动,好象有鱼出现了,鱼钩好象被什么咬住了,水面溅起浪花,鱼漂上起下浮【大力 直竿 迂回】金枪鱼
7鱼竿开始晃动,好象有鱼出现了,鱼钩好象被什么咬住了,鱼漂突然沉了一下,鱼竿弯得厉害【中力 直竿 快速】甲鱼
8鱼钩好象被什么咬住了,水面溅起浪花,鱼竿开始晃动,鱼漂上下起浮,鱼竿开始下弯【大力 斜竿 迂回】海星
9鱼钩好象被什么咬住了,水面溅起浪花,鱼竿开始晃动,鱼漂上下起浮,鱼漂突然沉了下去【中力 斜竿 迂回】 海马
10水面上好像有动静,鱼漂上下起浮,水面微波荡漾,鱼钩好象碰到了什么,鱼漂突然沉了下去【小力 斜竿 迂回】破箱子
11水面上好像有动静,鱼漂上下起浮,水面微波荡漾,鱼钩好象碰到了什么,鱼竿开始晃动【小力 直竿 快速】贝壳
二、长寿的钓鱼技巧:
1鱼漂微微动了一下,水面微波荡漾,好象有鱼出现了,鱼竿开始下弯了,鱼竿开始晃动【小力 直竿 快速】泥鳅
2鱼漂微微动了一下,水面微波荡漾,好象有鱼出现了,鱼竿开始下弯了,鱼漂上起下浮【中力 直竿 快速】河虾
3鱼漂微微动了一下,水面微波荡漾,好象有鱼出现了,鱼漂突然沉了一下,鱼漂上起下浮【小力 斜竿 快速】草鱼
4鱼漂微微动了一下,水面微波荡漾,好象有鱼出现了,鱼漂突然沉了一下,鱼竿开始下弯【中力 斜竿 快速】河蟹
5水面上好像有动静,鱼漂上下起浮,好象有鱼出现了,鱼竿开始下弯了,鱼漂沉下去了【中力 直竿 迂回】鲫鱼
6水面上好像有动静,鱼漂上下起浮,好象有鱼出现了,鱼竿开始下弯了,鱼钩被什么咬住【大力 直竿 迂回】鲤鱼
7水面上好像有动静,鱼漂上下起浮,好象有鱼出现了,鱼竿开始下弯了,水面溅起浪花【中力 直竿 快速】大闸蟹
8水面溅起浪花,鱼漂上下起浮, 鱼竿开始下弯了,鱼漂突然沉了一下,鱼竿开始晃动【中力 斜竿 迂回】娃娃鱼
9水面溅起浪花,鱼漂上下起浮, 鱼竿开始下弯了,鱼漂突然沉了一下,鱼竿弯得厉害【中力 斜竿 迂回】海豚
10水面上好像有动静,鱼漂上下起浮,水面微波荡漾,鱼钩好象碰到了什么,鱼漂突然沉了下去【小力 斜竿 迂回】破箱子
11水面上好像有动静,鱼漂上下起浮,水面微波荡漾,鱼钩好象碰到了什么,鱼竿开始晃动【小力 直竿 快速】贝壳
三、鱼竿突然发出了奇异的亮光的钓鱼技巧
在钓鱼会出现一种奇异的光,这个是需要鱼友帮忙的,至少要1个人帮忙才好成功。帮忙人多用小力,人少用大力,都是有可能的。钓上的鱼种类很多,一级鱼基本没有,多数是3级鱼,帮忙的鱼友可以随机获得1-6条2级鱼。参考钓鱼技巧如下:(第一种钓过毛蟹,第二种用直竿钓到120品河豚).
1.鱼竿突然发出了奇异的亮光,鱼钩被什么咬住了,水面微波荡漾,鱼漂突然沉了一下,鱼漂沉下去了【大力 直竿 迂回】 随机傲来长寿的2-3级鱼
2.鱼竿突然发出了奇异的亮光,鱼漂突然沉了下去, 鱼钩被什么咬住了, 水面溅起浪花,鱼竿弯得厉害【大力 直/斜竿 迂回】 随机傲来长寿的2-3级鱼
1 好象有鱼出现了,鱼漂微微动了一下,水面微波荡漾,鱼钩好象碰到了什么,鱼竿开始下弯 【小力 直竿 快速】沙丁鱼
2 好象有鱼出现了,鱼漂微微动了一下,水面微波荡漾,鱼钩好象碰到了什么,鱼漂上起下浮 【中力 直竿 快速】对虾
3 好象有鱼出现了,鱼漂微微动了一下,水面微波荡漾,鱼竿开始下弯了,水面溅起浪花 【小力 斜竿 快速】大黄鱼
4 好象有鱼出现了,鱼漂微微动了一下,水面微波荡漾,鱼竿开始下弯了,鱼漂上起下浮 【中力 斜竿 快速】小黄鱼
5鱼竿开始晃动,好象有鱼出现了,鱼钩好象被什么咬住了,水面溅起浪花,鱼竿开始下弯【中力 直竿 迂回】毛蟹
6鱼竿开始晃动,好象有鱼出现了,鱼钩好象被什么咬住了,水面溅起浪花,鱼漂上起下浮【大力 直竿 迂回】金枪鱼
7鱼竿开始晃动,好象有鱼出现了,鱼钩好象被什么咬住了,鱼漂突然沉了一下,鱼竿弯得厉害【中力 直竿 快速】甲鱼
8鱼钩好象被什么咬住了,水面溅起浪花,鱼竿开始晃动,鱼漂上下起浮,鱼竿开始下弯【大力 斜竿 迂回】海星
9鱼钩好象被什么咬住了,水面溅起浪花,鱼竿开始晃动,鱼漂上下起浮,鱼漂突然沉了下去【中力 斜竿 迂回】 海马
10水面上好像有动静,鱼漂上下起浮,水面微波荡漾,鱼钩好象碰到了什么,鱼漂突然沉了下去【小力 斜竿 迂回】破箱子
11水面上好像有动静,鱼漂上下起浮,水面微波荡漾,鱼钩好象碰到了什么,鱼竿开始晃动【小力 直竿 快速】贝壳
二、长寿的钓鱼技巧:
1鱼漂微微动了一下,水面微波荡漾,好象有鱼出现了,鱼竿开始下弯了,鱼竿开始晃动【小力 直竿 快速】泥鳅
2鱼漂微微动了一下,水面微波荡漾,好象有鱼出现了,鱼竿开始下弯了,鱼漂上起下浮【中力 直竿 快速】河虾
3鱼漂微微动了一下,水面微波荡漾,好象有鱼出现了,鱼漂突然沉了一下,鱼漂上起下浮【小力 斜竿 快速】草鱼
4鱼漂微微动了一下,水面微波荡漾,好象有鱼出现了,鱼漂突然沉了一下,鱼竿开始下弯【中力 斜竿 快速】河蟹
5水面上好像有动静,鱼漂上下起浮,好象有鱼出现了,鱼竿开始下弯了,鱼漂沉下去了【中力 直竿 迂回】鲫鱼
6水面上好像有动静,鱼漂上下起浮,好象有鱼出现了,鱼竿开始下弯了,鱼钩被什么咬住【大力 直竿 迂回】鲤鱼
7水面上好像有动静,鱼漂上下起浮,好象有鱼出现了,鱼竿开始下弯了,水面溅起浪花【中力 直竿 快速】大闸蟹
8水面溅起浪花,鱼漂上下起浮, 鱼竿开始下弯了,鱼漂突然沉了一下,鱼竿开始晃动【中力 斜竿 迂回】娃娃鱼
9水面溅起浪花,鱼漂上下起浮, 鱼竿开始下弯了,鱼漂突然沉了一下,鱼竿弯得厉害【中力 斜竿 迂回】海豚
10水面上好像有动静,鱼漂上下起浮,水面微波荡漾,鱼钩好象碰到了什么,鱼漂突然沉了下去【小力 斜竿 迂回】破箱子
11水面上好像有动静,鱼漂上下起浮,水面微波荡漾,鱼钩好象碰到了什么,鱼竿开始晃动【小力 直竿 快速】贝壳
三、鱼竿突然发出了奇异的亮光的钓鱼技巧
在钓鱼会出现一种奇异的光,这个是需要鱼友帮忙的,至少要1个人帮忙才好成功。帮忙人多用小力,人少用大力,都是有可能的。钓上的鱼种类很多,一级鱼基本没有,多数是3级鱼,帮忙的鱼友可以随机获得1-6条2级鱼。参考钓鱼技巧如下:(第一种钓过毛蟹,第二种用直竿钓到120品河豚).
1.鱼竿突然发出了奇异的亮光,鱼钩被什么咬住了,水面微波荡漾,鱼漂突然沉了一下,鱼漂沉下去了【大力 直竿 迂回】 随机傲来长寿的2-3级鱼
2.鱼竿突然发出了奇异的亮光,鱼漂突然沉了下去, 鱼钩被什么咬住了, 水面溅起浪花,鱼竿弯得厉害【大力 直/斜竿 迂回】 随机傲来长寿的2-3级鱼
2009年1月5日星期一
javascript的几种对话框
alert("message") 显示含有给定消息的"JavaScript Alert"对话框.
confirm("message") 显示含有给定消息的"Confirm"对话框(有一个OK按钮和一个Cancel按钮).如果用户单击OK返回true,否则返回false.
prompt("message") 显示一个"prompt"对话框,要求用户根据显示消息给予相应输入.
open("URL","name") 打开一个新窗口,给予一个指定的名字.
close() 关闭当前窗口.
实例:
var con = confirm("确定要离开本页吗?");
if(con == false){
删除内容。
}else{
什么也不做。
}
confirm("message") 显示含有给定消息的"Confirm"对话框(有一个OK按钮和一个Cancel按钮).如果用户单击OK返回true,否则返回false.
prompt("message") 显示一个"prompt"对话框,要求用户根据显示消息给予相应输入.
open("URL","name") 打开一个新窗口,给予一个指定的名字.
close() 关闭当前窗口.
实例:
var con = confirm("确定要离开本页吗?");
if(con == false){
删除内容。
}else{
什么也不做。
}
2009年1月4日星期日
MySQL联合查询实例
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
实验如下:
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
实验如下:
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
2008年12月8日星期一
嵌入式就业尖端公司
北京博创兴业科技有限公司
北京亿旗创新科技发展有限公司
北京赛德菱信息技术有限公司
北京微芯力科技
研华科技
北京精仪达盛科技有限公司
北京革新科技有限公司
北京启东微芯科技发展有限公司
北京金一倍科技发展有限公司
清华大学科教仪器厂
亿道电子技术有限公司
深圳市英蓓特信息技术有限公司
深圳市远峰计算机技术有限公司
华恒科技
上海复旦金海博科技有限公司
上海思创培训
成都傅立叶电子科技有限公司
长沙科瑞特电子有限公司
武汉创维特信息技术有限公司
凌阳大学计划
湖南湘潭胜西电子科技有限公司
祥佑数码科技有限公司
风标科技
杭州星晨单片机电子有限公司
北京亿旗创新科技发展有限公司
北京赛德菱信息技术有限公司
北京微芯力科技
研华科技
北京精仪达盛科技有限公司
北京革新科技有限公司
北京启东微芯科技发展有限公司
北京金一倍科技发展有限公司
清华大学科教仪器厂
亿道电子技术有限公司
深圳市英蓓特信息技术有限公司
深圳市远峰计算机技术有限公司
华恒科技
上海复旦金海博科技有限公司
上海思创培训
成都傅立叶电子科技有限公司
长沙科瑞特电子有限公司
武汉创维特信息技术有限公司
凌阳大学计划
湖南湘潭胜西电子科技有限公司
祥佑数码科技有限公司
风标科技
杭州星晨单片机电子有限公司
2008年12月1日星期一
Linux下文件类型及表示颜色
n 白色:普通文件 (用-表示)
n 红色:压缩文件
n 蓝色:目录文件 (用d表示)
n 青蓝色:链接文件 (用l表示)
n 黄色:设备文件(/dev目录下)(用b或c表示)
b表示的是物理设备;c表示的是字符终端设备.
n 青绿色:可执行文件(/bin、/sbin目录下)
n 粉红色:图片文件或是socket文件(用s表示)
n 青黄色:管道文件 (用p表示)
# file /dev/hda //查看指定文件的类型
# # find /dev -type b //在/dev目录中查找类型是设备的文件,可以将“b"换成上面的任意类型表示字母,如l,c等。
n 红色:压缩文件
n 蓝色:目录文件 (用d表示)
n 青蓝色:链接文件 (用l表示)
n 黄色:设备文件(/dev目录下)(用b或c表示)
b表示的是物理设备;c表示的是字符终端设备.
n 青绿色:可执行文件(/bin、/sbin目录下)
n 粉红色:图片文件或是socket文件(用s表示)
n 青黄色:管道文件 (用p表示)
# file /dev/hda //查看指定文件的类型
# # find /dev -type b //在/dev目录中查找类型是设备的文件,可以将“b"换成上面的任意类型表示字母,如l,c等。
2008年11月20日星期四
安装arm-elf-gcc交叉编译环境
1.3、安装arm-elf-gcc交叉编译环境。
1.3.1
以ROOT身份进入ubuntu8.04, 将arm-elf-tools-20040427.sh拷贝到 /usr/src 目录下
1.3.2
给arm-elf-tools-20040427.sh增加可执行权限:chmod 755 arm-elf-tools-20040427.sh
1.3.3
执行 ./arm-elf-tools-20040427.sh
提示错误:
tail: 无法打开“+43” 读取数据: 没有那个文件或目录。
gunzip: stdin: not in gzip format
解决办法
tail -n+43 arm-elf-tools-20040427.sh >> 1.tar.gz
tar zxvf 1.tar.gz
这样子你会得到一个usr的文件夹。。
然后: cp -R usr /
如出现提示无法覆盖/local/man,
如下操作:
cp -r usr/local/man /usr/share/
查看 /usr/local/bin 目录下应该有 arm-elf-gcc等文件。
这样我们在宿主机里的交叉编译环境安装完成了。
1.3.4添加交叉编译器的路径:export PATH=$PATH:/usr/local/arm-elf/bin
1.3.1
以ROOT身份进入ubuntu8.04, 将arm-elf-tools-20040427.sh拷贝到 /usr/src 目录下
1.3.2
给arm-elf-tools-20040427.sh增加可执行权限:chmod 755 arm-elf-tools-20040427.sh
1.3.3
执行 ./arm-elf-tools-20040427.sh
提示错误:
tail: 无法打开“+43” 读取数据: 没有那个文件或目录。
gunzip: stdin: not in gzip format
解决办法
tail -n+43 arm-elf-tools-20040427.sh >> 1.tar.gz
tar zxvf 1.tar.gz
这样子你会得到一个usr的文件夹。。
然后: cp -R usr /
如出现提示无法覆盖/local/man,
如下操作:
cp -r usr/local/man /usr/share/
查看 /usr/local/bin 目录下应该有 arm-elf-gcc等文件。
这样我们在宿主机里的交叉编译环境安装完成了。
1.3.4添加交叉编译器的路径:export PATH=$PATH:/usr/local/arm-elf/bin
2008年11月19日星期三
运行shell脚本时 sh,export,source的区别
1. 当进程创建一个字进程时候,父进程并不会将普通变量的值传递给它的子进程。
而export就是解决这个问题用的。在父进程中export A 后,在子进程中就可以使用变量A了。
2. sh+脚本:重新建立一个子shell执行脚本里面的语句,该子shell继承父shell的变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
可以这么理解:打开一个终端程序 = sh = 执行bash命令
3. source+脚本:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
而export就是解决这个问题用的。在父进程中export A 后,在子进程中就可以使用变量A了。
2. sh+脚本:重新建立一个子shell执行脚本里面的语句,该子shell继承父shell的变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
可以这么理解:打开一个终端程序 = sh = 执行bash命令
3. source+脚本:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
arm-linux-gcc和arm-elf-gcc的区别
arm-linux-gcc是针对arm + linux的开发环境的,kernel使用的是linux,不是uclinux,arm是有硬件MMU的。
而arm-elf-gcc是针对no MMU arm + uclinux的开发环境,kernel使用的是uclinux,硬件是廉价的无MMU的arm芯片。
下载地址:http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/
http://opensrc.sec.samsung.com/download.html
而arm-elf-gcc是针对no MMU arm + uclinux的开发环境,kernel使用的是uclinux,硬件是廉价的无MMU的arm芯片。
下载地址:http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/
http://opensrc.sec.samsung.com/download.html
2008年11月18日星期二
数据结构之c语言链表操作(学生信息管理)源代码--xxh
数据结构之c语言链表操作(学生信息管理)源代码----xxh
#include "iostream.h"
#include "malloc.h"
#include "windows.h"
#define LEN sizeof( struct student )
//#define NULL 0
struct student
{
int no;
int score;
struct student *next;
};
struct student *head;
int size=0;
void init();
void print_list();
void creat_list()
{
struct student *p1,*p2;
p1 = p2 = ( struct student * ) malloc (LEN);
cout << "\n开始创建成绩表 (学号和分数输入为0时结束添加)\n ";
cout << "\n学号:";
cin >> p1->no;
cout << "\n分数:";
cin >> p1->score;
head = p1;
while( p1->no != 0 )
{
size=size+1;
p2->next = p1;
p2 = p1;
p1 = ( struct student * ) malloc (LEN);
cout << "\n学号:";
cin >> p1->no;
cout << "\n分数:";
cin >> p1->score;
}
p2->next = NULL;
print_list();
}
void print_list()
{
system("cls");
struct student *p;
cout << "\n\n----------------------------共" << size << "条成绩记录-----------------------------------\n\n";
cout << "\t学号\t|\t分数\n";
p = head ;
while( p!= NULL )
{
cout << "\t" << p->no << "\t\t" << p->score << "\n" ;
p = p->next;
}
cout << "\n\n----------电气10602班谢小辉 数据结构作业之链表操作(学生成绩表)--------------\n\n";
init();
}
void del()
{
int del_no;
struct student *p1,*p2;
p1 = head ;
cout << "\n\n请输入需要删除记录的学号:";
cin >> del_no;
while( del_no != p1->no )
{
p2 = p1;
p1 = p1->next;
}
if( p1 == head )
{
head = p1->next;
size--;
}
else
{
p2->next = p1->next;
size--;
}
print_list();
}
void insert()
{
int insert_no;
struct student *p1,*p2,*p;
p = ( struct student * ) malloc (LEN);
p1 = head;
cout << "\n\n添加新学号:" ;
cin >> p->no ;
cout << "\n分数:" ;
cin >> p->score ;
cout << "\n新记录插入到哪条记录之后?学号:";
cin >> insert_no;
while( insert_no != p1->no )
{
p2 = p1;
p1 = p1->next;
}
p2 = p1->next;
p1->next = p;
p->next = p2;
size++;
print_list();
}
void edit()
{
int edit_no;
struct student *p1,*p2;
cout << "\n\n请输入要编辑记录的学号:";
cin >> edit_no ;
p1 = head ;
while( edit_no != p1->no )
{
p2 = p1;
p1 = p1->next;
}
cout << "\n新学号:";
cin >> p1->no;
cout << "\n新分数:";
cin >> p1->score;
print_list();
}
void close()
{
system("cls");
cout << "\n\n\n\n\n\n\t\t谢谢\t电气10602班谢小辉\t2008-10-1 23:00\n\n\n\n\n\n";
}
void init()
{
int t;
cout << "\n\n\n操作列表:\n\t 1.输出成绩表;\n\t 2.增加记录;\n\t 3.删除记录;\n\t 4.修改记录;\n\t 5.退出;\n操作:";
cin >> t;
switch(t)
{
case 1 : print_list();break;
case 2 : insert(); break;
case 3 : del(); break;
case 4 : edit(); break;
case 5 : close(); break;
}
}
void main()
{
creat_list();
}
#include "iostream.h"
#include "malloc.h"
#include "windows.h"
#define LEN sizeof( struct student )
//#define NULL 0
struct student
{
int no;
int score;
struct student *next;
};
struct student *head;
int size=0;
void init();
void print_list();
void creat_list()
{
struct student *p1,*p2;
p1 = p2 = ( struct student * ) malloc (LEN);
cout << "\n开始创建成绩表 (学号和分数输入为0时结束添加)\n ";
cout << "\n学号:";
cin >> p1->no;
cout << "\n分数:";
cin >> p1->score;
head = p1;
while( p1->no != 0 )
{
size=size+1;
p2->next = p1;
p2 = p1;
p1 = ( struct student * ) malloc (LEN);
cout << "\n学号:";
cin >> p1->no;
cout << "\n分数:";
cin >> p1->score;
}
p2->next = NULL;
print_list();
}
void print_list()
{
system("cls");
struct student *p;
cout << "\n\n----------------------------共" << size << "条成绩记录-----------------------------------\n\n";
cout << "\t学号\t|\t分数\n";
p = head ;
while( p!= NULL )
{
cout << "\t" << p->no << "\t\t" << p->score << "\n" ;
p = p->next;
}
cout << "\n\n----------电气10602班谢小辉 数据结构作业之链表操作(学生成绩表)--------------\n\n";
init();
}
void del()
{
int del_no;
struct student *p1,*p2;
p1 = head ;
cout << "\n\n请输入需要删除记录的学号:";
cin >> del_no;
while( del_no != p1->no )
{
p2 = p1;
p1 = p1->next;
}
if( p1 == head )
{
head = p1->next;
size--;
}
else
{
p2->next = p1->next;
size--;
}
print_list();
}
void insert()
{
int insert_no;
struct student *p1,*p2,*p;
p = ( struct student * ) malloc (LEN);
p1 = head;
cout << "\n\n添加新学号:" ;
cin >> p->no ;
cout << "\n分数:" ;
cin >> p->score ;
cout << "\n新记录插入到哪条记录之后?学号:";
cin >> insert_no;
while( insert_no != p1->no )
{
p2 = p1;
p1 = p1->next;
}
p2 = p1->next;
p1->next = p;
p->next = p2;
size++;
print_list();
}
void edit()
{
int edit_no;
struct student *p1,*p2;
cout << "\n\n请输入要编辑记录的学号:";
cin >> edit_no ;
p1 = head ;
while( edit_no != p1->no )
{
p2 = p1;
p1 = p1->next;
}
cout << "\n新学号:";
cin >> p1->no;
cout << "\n新分数:";
cin >> p1->score;
print_list();
}
void close()
{
system("cls");
cout << "\n\n\n\n\n\n\t\t谢谢\t电气10602班谢小辉\t2008-10-1 23:00\n\n\n\n\n\n";
}
void init()
{
int t;
cout << "\n\n\n操作列表:\n\t 1.输出成绩表;\n\t 2.增加记录;\n\t 3.删除记录;\n\t 4.修改记录;\n\t 5.退出;\n操作:";
cin >> t;
switch(t)
{
case 1 : print_list();break;
case 2 : insert(); break;
case 3 : del(); break;
case 4 : edit(); break;
case 5 : close(); break;
}
}
void main()
{
creat_list();
}
minicom的使用方法
(1) 使用 minicom 之前先设置一下,如下图所示
输入以下命令进行设置,如图。
#minicom -s
(2)选择串口
选择菜单中的“ Serial port setup ”,按回车,进入如下图所示界面。此时按“ A ”以设置“ Serial Device ”(如果您使用串口 1 ,则输入 /dev/ttyS0 ,如果您使用串口2,则输入/dev/ttyS1)。
(3)设置波特率
按“ E ”键进入设置“ bps/par/Bits ”(波特率)界面,如下图所示。再按“ I ”以设置波特率为 115200,
(4)设置无流控制
然后按回车退回到上一级菜单,按“F”键设置“ Hardware Flow Control ”为“ NO ”,其他选项使用缺省值
(5)保存设置
再选择“Exit”退出设置模式。刚才的设置被保存到“ /etc/minirc.dfl ”。
设置完毕,如果此时打开目标板电源的电源开关,就会看到 vivi 的启动信息,当 Linux 启动以后, minicom 就等于相当于虚拟终端,你就能通过它来操作目标板了。
要退出 minicom ,同时按下“ Ctrl+A ”键,送开后紧接着再按下“ Q ”键,在跳出的窗口中,选择“ Yes ”
输入以下命令进行设置,如图。
#minicom -s
(2)选择串口
选择菜单中的“ Serial port setup ”,按回车,进入如下图所示界面。此时按“ A ”以设置“ Serial Device ”(如果您使用串口 1 ,则输入 /dev/ttyS0 ,如果您使用串口2,则输入/dev/ttyS1)。
(3)设置波特率
按“ E ”键进入设置“ bps/par/Bits ”(波特率)界面,如下图所示。再按“ I ”以设置波特率为 115200,
(4)设置无流控制
然后按回车退回到上一级菜单,按“F”键设置“ Hardware Flow Control ”为“ NO ”,其他选项使用缺省值
(5)保存设置
再选择“Exit”退出设置模式。刚才的设置被保存到“ /etc/minirc.dfl ”。
设置完毕,如果此时打开目标板电源的电源开关,就会看到 vivi 的启动信息,当 Linux 启动以后, minicom 就等于相当于虚拟终端,你就能通过它来操作目标板了。
要退出 minicom ,同时按下“ Ctrl+A ”键,送开后紧接着再按下“ Q ”键,在跳出的窗口中,选择“ Yes ”
2008年11月6日星期四
ubuntu开启桌面效果后白屏的解决方法
ubuntu开启桌面效果后白屏的解决方法
1) ctrl+alt+backspace注销切换到登录界面
2)左下角option里选择change section, 选择failsafe terminal
3)输入帐号密码进入后,在命令行输入gconf-editor
4)依次选择Desktop->Gnome->Applications->window_manager , 把两处/usr/bin/compiz改成/usr/bin/metacity
5)ctrl+alt+backspace注销切换到登录界面,change section 选择gnome
1) ctrl+alt+backspace注销切换到登录界面
2)左下角option里选择change section, 选择failsafe terminal
3)输入帐号密码进入后,在命令行输入gconf-editor
4)依次选择Desktop->Gnome->Applications->window_manager , 把两处/usr/bin/compiz改成/usr/bin/metacity
5)ctrl+alt+backspace注销切换到登录界面,change section 选择gnome
2008年11月5日星期三
U-boot移植
uboot官方下载地址: http://www.icdev.com.cn/batch.viewlink.php?itemid=1694
1 )在网上下载一个 u-boot 源代码,我用的是 1.1.2 版本的,最新的应该是 1.1.4 的吧,其实差不多,那就像我那样下载一个 1.1.2 版本的吧。 把源文件解压,这个应该不用说了吧,学过 linux 的人应该会,不会的话我想你继续做下去也困难,那就先装个 linux 用下吧(我用的是 RedHat 的, 哦对了,编译程序是需要 gcc 编译器的,所以安装方式一定要选择工作站哦 ^_^ )。好了,解压后你发现在 u-boot.1.1.2 目录下有 Makefile 这个文件吧?让我们看看它里面的内容,最简单的方法就是 vi Makefile 了。我们要看的是它选择的是哪一个交叉编译器。可以看到这一项:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
看到吧,也就是说这里所用的交叉编译器是 arm-linux-gcc 了,( u-boot 默认是用这个的,也有用 arm-elf-gcc 的,网上有个工具包 arm-elf-tools-20030314.sh, 我试过用它来编译,没有问题,顺便提一下, arm-elf-gcc 是用来编译 uClinux 内核的 工具来的)那你就下载一个 arm-linux- 的交叉编译器吧,我是在网上下载 cross-2.95.3.tar.bz2 这个文件,然后解压得到 2.95.3 版本的交叉编译工具的,具体设置如下(参考网上资料):
2 )在宿主机上建立 arm-linux-gcc 交叉编译环境
在 RedHat Linux 系统下以 root 用户登录,
将 cross-2.95.3.tar.bz2 文件复制到 / 目录下,
安装:
# tar jxvf cross-2.95.3.tar.bz2
这个命令会在你的 /usr/local/arm/2.95.3 目录下安装 arm-linux-gcc 交叉编译程序,
然后在 PATH 变量中添加一项: /usr/local/arm/2.95.3/bin.
[root@localhost root]# export ATH=/usr/local/arm/2.95.3/bin:$PATH
或
把 PATH=/usr/local/arm/2.95.3/bin:$PATH 添加到 /ETC/bash_profile 文件中
或者
在 /etc/bashrc 文件中添加一项 :
export PATH=/usr/local/arm/2.95.3/bin:$PATH
测试:
把终端关闭,重新打开后执行如下命令:
# arm-linux-gcc –v
好了,建立好交叉编译环境后可以试着编译 u-boot 了
这里提几个注意点:
1. 不可用 winRAR 解压 u-boot-1.1.2.tar.bz2 或 u-boot-1.1.2.tar.gz 这种文件(就个可能新手会犯,一般熟悉 linux 命令的人应该都不会这样做吧,在此还是要提一下)
2. 可能下载的文件有一些中间文件会阻碍编译的运行,所以在编译前最好来个彻底清除,在 u-boot.1.1.2 目录下运行命令: make distclean (其实这个命令在 Makefile 文件下就有)我当时为这个问题郁闷了很久,希望你们不会像我这样 ^_^ ) ;
3 ,有些人为了方便想在 cygwin 下编译,但是经常在网上看到在这个虚拟平台下编译有很多的问题,要配置的东西也多,而且好像我用过那个 vi 没有 linux 环境下的好用,所以最好还是不要用这个软件了吧,如果你真的离不开 windows 的话可以像我这样装个虚拟机,在虚拟机下再装 linux 的系 统,具体参考这个网站): http://fedora.linuxsir.org/doc/vmware/
3 )好了,现在开始测试你的交叉编译器搞好没有。在 u-boot. 1.1.2 目录下执行如下命令:
1)Make distclean ( 再次强调 )
2)Make B2_config( 随便再个现成的试试 ^_^)
3)Make ( 没错的话应该会生成 u-boot.bin 文件,发生错误的话也不怕,只要细心看一下哪里错就行了, gcc 碰到错误后会退出编译,所以可以一个个错误来 改,一般的问题都是没找到编译器(可能你没装或者装的不对,例如人家用的是 arm-linux- 而你装的是 arm-elf- ,如果你装了的话看看你的环境 变量设好了没有,前面有讲,如果不关编译器的事的话那就再看看,一般是文件的后缀不对,有些文件后缀是大写的,例如 start.S 但是如果你的是 start.s 小写的话那当然找不到(解决方法很,把它改成大写就行了)。细心看吧,不用怕,它都有注明路径,很容易可以找到的) )
如果以上步骤都无误的话那么恭喜你,你的交叉编译环境可以用来编译你的 u-boot 源代码了,可以开始以下阶段。
3. 移植:
说时迟那时快,现在开始移植工作 ( 以下是我一步步重新做一遍,力求说得详细点,感谢我吧 ^_^)
我以 B2 板子的程序做为模板来做 .
#cd u-boot- 1.1.2
#cd board
#cp -R dave myboard ( 这是我取的板子名字,可以换上你的,但是后面的也要跟着来换哦 ^_^)
#cd myboard
#mv B2 myboards 3c 44b0 ( 自己取个板子名 )
#cd myboards 3c 44b0
# mv B2.c myboards 3c 44b0.c
修改 myboards 3c 44b0 里面的 Makefile, 把 B2 改成 myboards 3c 44b0 ,编译时如果报的其它类似找不到 B2 的错误也是把相应的 B2 改成 myboards 3c 44b0 来处理。
1 )在网上下载一个 u-boot 源代码,我用的是 1.1.2 版本的,最新的应该是 1.1.4 的吧,其实差不多,那就像我那样下载一个 1.1.2 版本的吧。 把源文件解压,这个应该不用说了吧,学过 linux 的人应该会,不会的话我想你继续做下去也困难,那就先装个 linux 用下吧(我用的是 RedHat 的, 哦对了,编译程序是需要 gcc 编译器的,所以安装方式一定要选择工作站哦 ^_^ )。好了,解压后你发现在 u-boot.1.1.2 目录下有 Makefile 这个文件吧?让我们看看它里面的内容,最简单的方法就是 vi Makefile 了。我们要看的是它选择的是哪一个交叉编译器。可以看到这一项:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
看到吧,也就是说这里所用的交叉编译器是 arm-linux-gcc 了,( u-boot 默认是用这个的,也有用 arm-elf-gcc 的,网上有个工具包 arm-elf-tools-20030314.sh, 我试过用它来编译,没有问题,顺便提一下, arm-elf-gcc 是用来编译 uClinux 内核的 工具来的)那你就下载一个 arm-linux- 的交叉编译器吧,我是在网上下载 cross-2.95.3.tar.bz2 这个文件,然后解压得到 2.95.3 版本的交叉编译工具的,具体设置如下(参考网上资料):
2 )在宿主机上建立 arm-linux-gcc 交叉编译环境
在 RedHat Linux 系统下以 root 用户登录,
将 cross-2.95.3.tar.bz2 文件复制到 / 目录下,
安装:
# tar jxvf cross-2.95.3.tar.bz2
这个命令会在你的 /usr/local/arm/2.95.3 目录下安装 arm-linux-gcc 交叉编译程序,
然后在 PATH 变量中添加一项: /usr/local/arm/2.95.3/bin.
[root@localhost root]# export ATH=/usr/local/arm/2.95.3/bin:$PATH
或
把 PATH=/usr/local/arm/2.95.3/bin:$PATH 添加到 /ETC/bash_profile 文件中
或者
在 /etc/bashrc 文件中添加一项 :
export PATH=/usr/local/arm/2.95.3/bin:$PATH
测试:
把终端关闭,重新打开后执行如下命令:
# arm-linux-gcc –v
好了,建立好交叉编译环境后可以试着编译 u-boot 了
这里提几个注意点:
1. 不可用 winRAR 解压 u-boot-1.1.2.tar.bz2 或 u-boot-1.1.2.tar.gz 这种文件(就个可能新手会犯,一般熟悉 linux 命令的人应该都不会这样做吧,在此还是要提一下)
2. 可能下载的文件有一些中间文件会阻碍编译的运行,所以在编译前最好来个彻底清除,在 u-boot.1.1.2 目录下运行命令: make distclean (其实这个命令在 Makefile 文件下就有)我当时为这个问题郁闷了很久,希望你们不会像我这样 ^_^ ) ;
3 ,有些人为了方便想在 cygwin 下编译,但是经常在网上看到在这个虚拟平台下编译有很多的问题,要配置的东西也多,而且好像我用过那个 vi 没有 linux 环境下的好用,所以最好还是不要用这个软件了吧,如果你真的离不开 windows 的话可以像我这样装个虚拟机,在虚拟机下再装 linux 的系 统,具体参考这个网站): http://fedora.linuxsir.org/doc/vmware/
3 )好了,现在开始测试你的交叉编译器搞好没有。在 u-boot. 1.1.2 目录下执行如下命令:
1)Make distclean ( 再次强调 )
2)Make B2_config( 随便再个现成的试试 ^_^)
3)Make ( 没错的话应该会生成 u-boot.bin 文件,发生错误的话也不怕,只要细心看一下哪里错就行了, gcc 碰到错误后会退出编译,所以可以一个个错误来 改,一般的问题都是没找到编译器(可能你没装或者装的不对,例如人家用的是 arm-linux- 而你装的是 arm-elf- ,如果你装了的话看看你的环境 变量设好了没有,前面有讲,如果不关编译器的事的话那就再看看,一般是文件的后缀不对,有些文件后缀是大写的,例如 start.S 但是如果你的是 start.s 小写的话那当然找不到(解决方法很,把它改成大写就行了)。细心看吧,不用怕,它都有注明路径,很容易可以找到的) )
如果以上步骤都无误的话那么恭喜你,你的交叉编译环境可以用来编译你的 u-boot 源代码了,可以开始以下阶段。
3. 移植:
说时迟那时快,现在开始移植工作 ( 以下是我一步步重新做一遍,力求说得详细点,感谢我吧 ^_^)
我以 B2 板子的程序做为模板来做 .
#cd u-boot- 1.1.2
#cd board
#cp -R dave myboard ( 这是我取的板子名字,可以换上你的,但是后面的也要跟着来换哦 ^_^)
#cd myboard
#mv B2 myboards 3c 44b0 ( 自己取个板子名 )
#cd myboards 3c 44b0
# mv B2.c myboards 3c 44b0.c
修改 myboards 3c 44b0 里面的 Makefile, 把 B2 改成 myboards 3c 44b0 ,编译时如果报的其它类似找不到 B2 的错误也是把相应的 B2 改成 myboards 3c 44b0 来处理。
订阅:
博文 (Atom)