2011.10.9 Evo杨
ARM嵌入式linux复习心得总结1:
一、Linux定制安装:
从新安装配置了一遍Linux,我使用的是Vmware7.0安装RHEL5.5,对于Linux的安装主要是要选择定制安装也就是Vmware7.0(下面简称Vm)中新建虚拟机开始部分选择”Custom(advanced)”,因为这里我所使用的FTP、sumba等服务器是需要定制加上的一开始没有注意结果悲剧了…(以后一定要仔细的选择!!),在next后面应该选择最后一个选项这样自定义的选项会更加多,同样可以选择定制安装的一些选项,在这里同样有个地方要注意:
1、最好使用默认的内存分配方式
2、*(重要)选择bridged networking 的网络连接方式(这里要注意,第一次安装的时候没有注意使用的是默认值也就是NET模式,最后在设置NFS和sumba服务器的时候(也可能是其他的操作错误)无法与PC机ping通讯这里花费了大量的时间研究! 后面就是Linux系统的安装了,这里我使用的是图形化界面的安装(以前大一的时候用命令行安过一次自己英语太垃圾了,安了整整一上午…)
3、在最后配置的时候防火墙要禁用,因为这里防火墙会阻止一切自发的与本机联网的事件,在后面使用NFS以及sumba服务器的时候是不能打开的,第一次安装的时候吃过这方面的亏以后要注意!
4、禁用SELinux,这个也是与安全有关的,现在暂时禁用就可以了。
二、再次回顾了一下Linux的命令,这里比较熟悉,跟走路一样这里必须专业起来!总的来
说有一下几个命令必须灵活运用:
1、useradd(添加用户名,后面使用sumba服务器的时候需要用到,使用率较低)
2、passwd(添加用户密码,一般配合useradd使用,使用率较低)
3、su(切换用户,经常用)
4、shutdown(关机命令,用法有多种,我一般不用,虚拟机直接断电就行了)
5、cp(拷贝,不解释)
6、mv(移动或更名,不解释)
7、rm(删除,不解释)
8、mkdir(创建目录)
9、cd(改变工作目录,经常用)
10、pwd(显示当前目录)
11、ls(查看目录)
12、tar(针对tar.gz打包和解压,这里主要记住 tar cvzf * 和tar xvzf * 一个是压缩,一个是解压)
13、tar(针对tar打包和解压,这里主要记住 tar cvf * 和tar xvf * 一个是压缩,一个是解压)
14、unzip(解压zip文件)
15、chmod (更改权限)
16、df(查看磁盘使用情况)
17、ifconfig(查看网络配置、查看ip等)
18、netstat(查看网络状态)
19、grep(查找字符串,这个其实很重要,但自己总是忘记可能是一般不用的原因)
20、rpm (用于软件安装)
21、mount(挂载,很重要用语挂载CDROM、硬盘以及共享文件等)
22、find(找到*文件存在路径)
三、vi编辑器的使用,使用比较熟练好像加“!”的都是强制执行的。
四、安装tftp服务器:
常用命令:*netstat –a | grep tftp 这里检测当前tftp的情况,在资料上是说检测安装情况,我觉得不是应该是检测启动情况,当然这个也是包括安装与否的,这里要注意!有的时候他是安装上的但是没有打开,查看配置文件是就会发现disable 默认是 = yes 意思是默认是关闭的我们有几种方法将他打开:
1、 使用setup命令启动tftp
2、 配置 #vi /etc/xinetd.d/tftp 中把disable中的yes改为no
3、 使用命令启动 #/etc/init.d/xinetd start
五、安装NFS服务器: 这个功能是共享Linux与Linux之间文件的,后面开发ARM的时候
联通内核与文件系统使用
六、安装samba服务器
首先是要配置samba服务器的配置文件位置在:#vi /etc/samba/smb.conf
在Share Definitions中添加
【root】
Comment = Root Ditectories
Browseable = yes
Writable = yes
Path = /
valid users = smb
valid users = MYDOMAIN\%s
其中可以在【home】前在命令模式下输入“6yy”(复制这六行!)然后再输入“p”(粘贴)然后再修改,这样修改起来比较方便,也是绝大多数教程都使用的方法,其中要注意几点:
1、 要是使用复制方法然后修改的话要注意看清楚Comment这行后面Root
Ditectories 这行的Root是不要忘了修改【homes】中式Home而【root】
中是Root切记!(这里自己在前一次安装的时候没有留意导致后面Samba
服务器不能使用!!!)
2、 smb 这是用户名这里引用一下教材的语言:添加用户,注意添加用户的
用户与修改配置文件部分valid users = smb相同,如果smb用户存在则不
需要添加!!
配置完毕要重新启动samba服务器 #/etc/init.d/smb restart
最后在windows中运行即可。
七、Samba、NFS等PC与虚拟机的网络配置(重点)
这里着重总结一下这次网络的配置,虚拟机的网络配置非常重要,即使Linux不需要上
网可是他们之间的数据传送也是十分必要的,例如Vmtools这个工具,smb、NFS、tftp等,我在这里的网络配置花费了大量的时间研究,主要是samba服务器总不能配置成功,网上也有许多的方法不过讲的都很细许多功能的实现都比较抽象,我之所以总是没有成功在上面的几个方面上已经详细的解释了,这里不再次做总结,其中有几点与老师或查资料得到的几点信息在这里要总结一下:
1、 在所有的服务器等联网活动之前一定要把网络通信配置好!在PC中首先要ipconfig
一下查询一下PC机网络配置情况(ip、网关等)然后再在虚拟机中使用命令setup打开网络配置去掉自动分配IP选用静态ip然后将ip等项目输入进去,这里要输入的一共三项,后两项是相同的只有ip是需要改变的,切记要分配在同一个网段!!这样才能实现局域网功能
2、 我问了问教授Linux的一位老师他曾经因为更改了本地连接的IP导致虚拟机上的网
络服务器不能用了,当更改回原来的ip才能使用,这里我并没有出现这种情况因为我在设置ip的时候使用的是动态分配地址的ip路由器,在设置完成后并没有出现服务器失效的情况所以我认为这里老师可能使用了某个ip绑定了吧。
八、Vmtools的安装使用
这个工具很好用在XP中安装比较方便,但在Linux中有点儿复杂,当然只是有点
儿而已,使用Vmware自动下载就可以完成后Linux自动加载了一个cdrom里面就有一个vmtools的tar 解压包(有时需要自己加载)他在文件中找到安装文件安装即可。这里引用一下网络同仁的资源我觉得他写的吧、简单明了(/viewarticle.php?id=66813)
安装linux时,一定要安装gcc和kernel-source,VMware要对内核头文件进行编译。注:linux区分大小写,例如,用户名root和Root就是两个用户了。你想进入tmp目录,而你输入的是Tmp,嘿嘿,肯定是进不去的!
按下alt+f2,输入konsole 新建一个终端。
注:如果你不是以root用户登录,你不能安装程序。用su命令可以切换到root用户,不会用命令的话,注销后用root登录。
输入 /sbin/telinit 3
用root登录,输入root的密码,如果你忘了,我只能同情你了。按下alt+ctrl把鼠标切出来,点击菜单上的“安装VMware-tools”。
回到虚拟机中,挂载cdrom。
mount /dev/cdrom /mnt/cdrom进入cdrom目录
cd /mnt/cdrom将光盘中的内容复制到tmp目录下
cp VM* /tmp/
注:*号是通配符。还有,输入单个命令时按Tab自动输入。
进入tmp目录
cd /tmp
解压缩.tar.gz文件
tar zvxf VMware*.tar.gz
屏幕哗哗的闪呀!进入解压后的vmware-tools-distrib目录
cd vmware-tools-distrib
执行安装文件
./vm*.pl
一路默认回答,皆按回车键。
以上都很顺利,很多人都卡在了这里,这个该死的目录怎么也找不到,why?是因为你没安装gcc或kernel-source,回本文开头去看吧!
配置你的x windows 设置。输入yes并按回车键。
选择你linux的显示屏幕大小。
Enioy!
最后显示的是VMware开发组的注记。要让他们知道中国有这么多用破解版的,他们就不这么写了。呵呵。
输入startx启动Xwindows
OK。
我就是参考这个文章安装完成的它使用的是红旗的Linux不过我在红帽的Linux5中同样使用顺利所以将此贴贴上便于以后参考!
九、Makefile
Makefile是个将多个文件链接编译的工具使用方法很简单假设有两个文件一个是main.c 一个是fun.c以及同文件 fun.h
建立Makefile文件输入:
main:main.o fun.o gcc main.o fun.o –o main main.o:main.c fun.h gcc –c main.c –o main.o fun.o:fun.c fun.h gcc –c fun.c –o fun.o clean: rm –f main *.o ( 这部分代码在make clean时执行!) 从中可以看出编译的规律
目标:汇编文件…..
gcc 汇编文件1、汇编文件2、….. –o 目标文件名(这里同编译一条代码时相同)
十、文件编程-文件创建
#include<stdio.h>
#include<stdlib.h>
#include<sys/tybes.h>
#include<sys/stat.h>
#include<fcntl.h>
void create_file(char *filename)
{
If(create(filename,0666)<0) //创建文件函数判断创建是否成功 后面的是文件的
权限:可读可写不可执行!
{ printf(“create file %s failure!\n”,filename); exit(EXIT_FAILURE);
}
Else
{
Printf(“create file %s success!”,filename);
}
}
Int main(int argc,char *argv[]) // 这里的argc是程序参数个数(如ls –a 这就是两个参数,也就是说是两个字符串,而argv【】表示的是参数名字 argv【0】=ls argv【1】= -a 后面应该还有一个参数char *env 代表的是环境变量的字符串(各种路径)) {
If(argc<2) //判断文件是否符合要求,这个一般小于0就行 { Perror(“you haven’t input the filename,please try again!\n”); Exit(EXIT_FAILURE); //这个最后等于1 其实就是个return 1;
}
Create_file(argv[1]);
Exit(EXIT_SUCCESS); //这个最后等于0 其实就是个return 0;
}
十一、今天心得体会:错误与进步同在!!正视错误,解决错误,取得进步!!
1. sudo apt-get install vim
2. 系统立即关机:sudo shutdown –h now(关机后关闭电源 halt)
3. 45分钟后计算机自动关机:sudo shutdown –h +45
4. 60分钟后自动重启:sudo shutdown –r +60
5. Linux基本命令:cd切换目录;grep查找字符串;head显示文件开头;tail显示文件结尾;sort按次序显示文件;diff比较两个文件;file测试文件内容;
6. ps列出进程;df检查文件系统空间占用情况;kill杀死进程;chmod更改文件或目录的访问权限[文件所有者,所在组,任何用户/组];info获取帮助;
7. pwd显示当前目录的绝对路径;rpm文件包管理;clear清屏;ln创建文件链接;who列出系统上的用户;write发送消息;talk与其他用户通信;man获取帮助
8.链接:ln [option] source_file des_file; gcc -s file.c
-f 建立 ~代表/home
-i 删除;
ln –s abc cde 建立软连接;
ln abc cde 建立硬链接
删除非空文件夹:rm -r
8. linux文件系统:Ext3是linux广泛使用的一种文件格式;最大的特点是日志文件系统:可将整个磁盘的写入动作完整的记录在磁盘的某个区域,以便在必要时回溯跟踪;windows的主要系统格式:FAT16,FAT32,NIFS,目前linux可以自动识别这些文件,以只读方式访问计算机磁盘上windows上的系统文件。
9. tar命令:用于将若干文件或目录合成一个文件(以便备份和压缩)
10. gcc编译四步曲:预处理,编译,汇编,链接
11. 37个寄存器:31个通用寄存器,6个状态寄存器;CPSR程序状态寄存器;
12. QT中信号和槽的五种连接关系:一个信号可以连接到多个槽;多个信号可以连接到同一个槽;一个信号可以与另一个信号相连;链接可以被删除;信号和槽函数必须有相同的参数类型,如此信号和槽函数才能成功连接;
13. 文件截短:truncate()和ftruncate()截取一些数据,以缩短文件;成功返回0,错误1
14. 进程包括:正文段,用户数据段,系统数据段。其中正文段和用户数据段为程序,系统数据段为内核段。
15. 进程状态:运行态,等待态(可中断和不可中断),停止态,死亡态。
16. 创建进程:fork();一次返回两个值:若成功,子进程返回0,父进程返回子进程id;否则,出错返回-1;
17.exec函数使用:exec函数族,顾名思义,就是一簇函数,他把当前进程映像替换成新的程序文件,而且该程序通常main函数开始执行!
18.Shell是命令行的解释器,用于用户和内核交互。
19.VI编辑器有命令模式和输入模式
20.查看linux命令的帮助文档命令有man和info
1 嵌入式系统概念:以应用为中心,以计算机控制系统为基础,并且软硬件可剪裁,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
4 gcc编译的4个步骤:*.c预处理*.i、编译*.s、汇编*.o、链接*.exe。
10 make工程管理器:是个自动编译管理器,能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。
5.什么是交叉编译?为什么进行交叉编译?
解:交叉编译是指在一个平台上生成可以在另一个平台上执行的代码。
原因是由于不同的体系结构有不同的指令系统。因此,不同的cpu需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同的cpu的对应的可执行的二进制文件。
7常用的进程间通信机制(掌握)
(1)管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信;有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
(2)信号(Signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生。
(3)消息队列(Messge Queue):消息队列是消息的链接表,包括Posix和SystemV消息队列。它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程可以按照一定的规则向消息队列中添加新消息;对消息队列有读权限的进程则可以从消息队列中读取消息。
(4)共享内存(Shared memory):可以说这是最有效的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种通信方式需要依靠某种同步机制,如互斥锁和信号量等。
(5)信号量(Semaphore):主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。
(6)套接字(Socket):这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。
4、ARM处理器有几种工作模式?并做说明每种工作模式的含义。
答:ARM处理器有7种工作模式:
用户模式(usr)- 正常程序执行的模式 0.5分
快速中断模式(fiq)- FIQ异常响应时进入此模式 0.5分
中断模式(irq)- IRQ异常响应时进入此模式 0.5分
管理员模式(svc)- 系统复位和软件中断响应时进入此模式 0.5分
中止模式(abt)- 用于虚拟存储及存储保护 0.5分
系统模式(sys)- 与用户类似,但有直接切换到其它模式等特权 0.5分
未定义模式(und)- 未定义指令异常响应时进入此模式 0.5分
除了用户模式外,其他模式均可视为特权模式 0.5分
ARM微处理器的工作状态一般有两种,并可在两种状态之间切换: - 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令; - 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
2 vim编辑器的4种模式:标准模式 ,插入模式,命令模式,可视模式
标准模式(Normal mode)通常进入vim后默认处于标准模式(或者称为命令模式)。在此模式下任何键盘的输入都是作为命令来对待。命令的输入通常是不回显的,只显示执行的结果。
插入模式(Insert Mode)用户只有在插入模式下才可以进行字符输入,用户按[Esc]键可回到命令行模式下。
命令行模式(Command-line mode) 在此模式下,用户可以将文件保存或退出vim,也可以设置编辑环境,如寻找字符串、列出行号等。
可视模式(Visual mode) 在此模式下,通过移动光标选择文本,选中的文本将反白显示,这样提供高效、直观的编辑功能。用户按下ESC键可回到命令行模式。
1 系统调用:指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口获得操作系统内核提供的服务。
6 文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。
3.mv dir1 new_dir 重命名/移动 一个目录
网络端口号:是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等 。
进程与程序的主要区别: (1)程序是永存的;进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,存在是暂时的;(2)程序是静态的观念,进程是动态的观念;(3)进程具有并发性,而程序没有;(4)进程是竞争计算机资源的基本单位,程序不是。(5)进程和程序不是一一对应的: 一个程序可对应多个进程即多个进程可执行同一程序; 一个进程可以执行一个或几个程序
24.Windows与linux在文件系统组织上的区别:
1.对异常的响应
当一个异常出现以后,ARM微处理器会执行以下几步操作。
(1)将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入的,则LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入的,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI产生时,指令MOV PC' R14_SVC总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状态执行。
(2)将CPSR复制到相应的SPSR中。
(3)根据异常类型,强制设置CPSR的运行模式位。
(4)强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
还可以设置中断禁止位,以禁止中断发生。如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。
ARM微处理器对异常的响应过程用伪码可以描述为:
2,从异常返回
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回。
(1)将连接寄存器LR的值减去相应的偏移量后送到PC中。
(2)将SPSR复制回CPSR中。
(3)若在进入异常处理时设置了中断禁止位,则要在此清除。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
26.linux系统的特征:支持多用户多任务,多平台,多处理器,多线程;标准兼容性;设备独立性;提供了丰富的网络功能;良好的移植性;可靠的系统安全;众多的硬件支持特性;
17. QT中信号和槽的五种连接关系:一个信号可以连接到多个槽;多个信号可以连接到同一个槽;一个信号可以与另一个信号相连;链接可以被删除;信号和槽函数必须有相同的参数类型,如此信号和槽函数才能成功连接;
18. 网络中常见的传输层协议:tcp/udp,各自特点:
1.系统调用和函数库的关系
系统调用通过软中断int 0x80从用户态进入内核态。函数库中的某些函数调用了系统调用。
函数库中的函数可以没有调用系统调用,也可以调用多个系统调用。编程人员可以通过函数库调用系统调用。高级编程也可以直接采用int 0x80进入系统调用,而不必通过函数库作为中介。如果是在核心编程,也可以通过int 0x80进入系统调用,此时不能使用函数库。因为函数库中的函数是内核访问不到的。
2. 从用户调用库函数到系统调用执行的流程。
1) 假设用户调用ssize_t write (int fields, cont void *buff, size_t nbytes);库函数。
2) 库函数会执行int 0x80中断。因为中断使得进程从用户态进入内核态,所以参数通过寄存器传送。
3) 0x80中断对应的中断例程被称为system call handler。其工作是:
i. 存储大多数寄存器到内核堆栈中。这是汇编代码写的。
ii. 执行真正的系统调用函数――system call service routine。这是C代码。
iii. 通过ret_from_sys_call ()返回,回到用户态的库函数。这是汇编代码。
27.异常处理要做的:
①将所有修改过的用户寄存器从处理程序的保护栈中恢复;
②将SPSR复制回CPSR,将连接寄存器LR值减去相应的偏移量后送到PC中;
③若在进入异常处理时设置了中断禁止位,要在此清除;
如何将一个非空文件清空3种方法
1、#echo "" > test.txt(文件大小被截为1字节)
2、# > test.txt(文件大小被截为0字节)
3、#cat/dev/null > test.txt(文件大小被截为0字节)
[精华]Oracle安装(linux)总结一下http://www.chinaunix.net作者:freet15发表于:20xx…
1.创建目录mkdirNO1.在当前路径创建一级目录[root@rehatroot]#mkdirtestNO2.在当前路径创建多级…
ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:(1)掌握主流嵌入式微处理器的结构与原理(初步定为ar…
1.安装Linux系统对硬盘分区时,必须有两种分区类型:Linux原始分区(根分区)和Linux交换分区。(引导分区)2.在Lin…
1,ping命令可以测试网络中本机系统是否能到达一台远程主机,所以常常用于测试网络的连通性。dns(域名系统)实际上是分布在int…
河海大学文天学院linux学习心得(论文)学号:110310120姓名:解小雨20xx-05-13八周的学习使我对Linux系统和…
八周的学习使我对Linux系统和网络管理有了进一步的认识。上大学之前只接触过Windows操作系统,小时候最早接触的是Window…
一知识总结我很荣幸选了“Linux操作系统”这门课程,因为在这门课程的学习过程中,我们通过老师的讲解以及在网上查阅资料,学到了许多…
本学期对于Linux系统的学习,让我对Linux有了一定的了解。我知道了Linux只是个内核。现在的Linux操作系统,都是用这么…
Linux操作系统学习心得这学期有幸学习了《嵌入式系统设计》这门课,在胡佳文老师的教导下深入了解了有关于嵌入式系统,ARM9,Li…
本学期为期一周的嵌入式课程设计在不知不觉中结束了,虽说这次课程设计时间不是很长,但是感觉自己收获颇丰,不仅学习到了一些新知识,回顾…