Linux学习笔记二.docx
- 文档编号:17954576
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:32
- 大小:261.47KB
Linux学习笔记二.docx
《Linux学习笔记二.docx》由会员分享,可在线阅读,更多相关《Linux学习笔记二.docx(32页珍藏版)》请在冰点文库上搜索。
Linux学习笔记二
Linux笔记
Linux!
那一剑的风情
2011-3-16
5:
ARM-Linux
1:
命令
(1)rm–f–r–v目录名
(2)netstat–a查看网络状态命令
(3)uname–a
(4)cat/pro/
(5)rpm–ivh安装RPM包
(6)source更新配置文件
(7)rpm--fource--nodeps强制安装
(8)mknode:
建立一个目录项和一个特殊文件的对应索引节点建立的文件有三种b:
块设备c:
字符设备p:
管道文件
(9)tail显示文件的最后一部分
(10)fdisk磁盘分区工具
(11)主机用户名:
hostname
文件在:
/etc/sysconfig/network
主机名与DNS的映射在/etc/hosts文件
(12)语言:
/etc/sysconfig/i18n
(13)dd
dd是Linux/UNIX下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
(14)su回车进入root用户
(15)
2:
配置IP
1:
IP配置
(1)Setup----
网络重启servicenetworkrestart
/etc/init.d/networkingrestatr
(2)ifconfigeth0XXX.XXX.XXX.XXX
ifconfigeth0XXX.XXX.XXX.XXXnetmask255.255.255.0broadcastXXX.XXX.XXX.XXX
(3)图形界面配置:
(4)ifconfigeth0up|down //激活,关闭设备eth0
(5)静态修改IP:
1:
Vi/etc/sysconfig/network-scripts/ifcfg-eth0
2:
添加ficonfig命令到启动代码
Vi/etc/rc.d/rc.local
(6)
(7)
3:
DNS
暂时配置dns解析
echo"nameserver211.98.1.28">>/etc/resolv.conf
修改DNS
vi/etc/resolv.conf
nameserver202.96.128.68
nameserver219.136.241.206
主机用户名:
hostname
文件在:
/etc/sysconfig/network
主机名与DNS的映射在/etc/hosts文件
6:
arm-linux-gcc说明
在/usr/local目录下新建一个目录arm,将2.95.3目录及其内容拷贝到此目录下;
arm-linux-as:
汇编工具,把汇编代码翻译成目标代码(ELF文件,OBJ文件);
arm-linux-ar:
经多个.o文件合并成一个.o文件或静态库(.a文件);
arm-linux-ld:
连接工具,把OBJ文件等生成可执行文件;
arm-linux-gcc:
-c:
预处理、编译和汇编,生成的是OBJ文件;
-S:
编译后停止,即不进行汇编处理;
-E:
预处理后停止;
-Wall:
告警选项;
arm-linux-objcopy:
用来复制一个目标文件的内容到另一个文件;可以使用不同于源文件的格式来输出目的文件,即进行格式转换;
arm-linux-objdump:
用来显示二进制文件的信息;
arm-linux-objdump–D–S
arm-linux-nm:
列出目标文件的符号清单;
7:
Makefile
Makefile中每个command前都有一个“TAB”符;
变量:
变量名是不包括“:
”、“#”、“=”结尾空格的任何字符串。
同时,变量名中包含字母、数字以及下划线以外的情况应尽量避免,因为它们可能在将来被赋予特别的含义。
变量名是大小写敏感的,例如变量名“foo”、“FOO”、和“Foo”代表不同的变量。
推荐在makefile内部使用小写字母作为变量名,预留大写字母作为控制隐含规则参数或用户重载命令选项参数的变量名。
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
引用变量:
$(objects)
“.PHONY”表示:
clean是个伪目标文件
特定的Makefile文件:
如果要指定特定的Makefile,你可以使用make的“-f”和“--file”参数,如:
make -f Make.Linux或make --file Make.AIX;
Makefile中常见自动变量:
命令格式
含 义
$*
不包含扩展名的目标文件名称
$+
所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$<
第一个依赖文件的名称
$?
所有时间戳比目标文件晚的依赖文件,并以空格分开
$@
目标文件的完整名称
$^
所有不重复的依赖文件,以空格分开
$%
如果目标是归档成员,则该变量表示目标的归档成员名称
8:
服务
1:
NFS服务搭建:
查询是否安装NFS:
rpm–qnfs-utilsportmap
rpm-qa|grepnfs-utils(系统默认已经安装nfs-utils)
rpm-qa|grepportmap
运行NFS服务
#servicenfsstart
#servicenfsrestart
#servicenfsstop
NFS服务器配置:
NFS服务的配置文件是etc/exports
vi/etc/exports
加入允许被访问的的目录和权限:
/home192.168.1.*(rw,sync,no_root_squash)
:
----
home:
允许访问的目录
192.168.1.*:
允许被访问的计算机IP
(rw,sync,no_root_squash):
rw:
读写权限;
Sync:
同步写磁盘
no_root_squash:
表示客户端root用户对该目录有些权限
输入以下命令:
exportfs–rv应答配置表示成功
启动NFS:
/etc/init.d/nfsstart
重启NFS:
/etc/init.d/nfsrestart
!
!
!
客户端配置
#showmount–e192.168.6.140(虚拟机IP)(NFS服务器的IP地址)
使用:
使用mount–t命令挂在要使用的NFS服务器上的目录
Mount–tnfsservername:
shard_dir/local/dir
如:
mount–tnfs192.168.1.100:
/home/mnt/nfs
2:
TFTP
查看是否安装:
netstat–a|greptftp
Netstat–a查看网络状态命令
安装:
rpm–ivhtftp-server-0.xxxx.rmp
建立tftp工作目录:
mkdir/tftpboot
配置:
/etc/xinetd.d/tftp
/etc/init.d/iptablesstop //关闭防火墙
启动:
/etc/init.d/xinetdrestart
使用:
netstart–nlp查看tftp服务是否起来
3:
samba----linux与windows之间共享
workgroup后面跟工作组名称。
serverstring后面为samba服务器的描述,这个会在窗口的标题栏显示。
netbiosname后面为netbios显示的名称,即在网上邻居中显示的计算机名。
配置samba服务器的安全级别,user用户要用账户和密码才能登入samba服务器(是samba默认的安全等级),share表示用户不需要账户及密码即可登入samba服务器
外部命令:
useradd:
添加用户
设置用于密码:
smbpasswd-ashanks
重新启动:
/etc/init.d/samrestart
servciesmbrestart
让其开机启动:
chkconfigsmbon
查看smb运行状态:
Servicesmbstatus
或者:
servicesmbstatus;chkconfig–listsmb
要从Linux系统中连接Samba共享,从shell提示下,键入以下命令:
smbclient//hostname/sharename-Uusername
4:
wireshak
5:
防火墙
/etc/init.d/iptablesstop //关闭防火墙
servicexinetdrestart //重启xinetd服务
9:
minicom
minicom–s:
进入
配置文件:
/etc/minirc.dfl
10:
制作根文件系统
1:
根文件系统总体概述
根文件系统的作用
内核启动后首先的挂载的文件系统
存放内核镜像、配置文件、各类命令、设备文件、应用程序等
根文件系统的结构
遵守FHS标准(FilesystemHierarchyStandard)
bin目录
命令程序文件
dev目录
设备文件终端设备
1.控制台(console)
2.虚拟控制终端(tty1、tty2)
3.串口终端(ttyS0、ttyS1)
console=ttySAC0
lib目录
1.libc
2.ld-linux
etc目录
配置文件
2:
构建根文件系统
♦Linux的根文件系统包括支持linux系统正常运行的基本内容,至少应包括以下几项内容:
●基本的文件系统结构,如bin、dev、etc、sbin,lib、usr、proc。
●基本程序运行所需的动态库。
●基本的系统配置文件。
●必要的设备文件支持。
●基本的应用程序,如sh、ls、cp等
♦构建根文件系统就是往相应的目录添加相应的文件。
如:
●在/dev添加设备文件,
●在/etc添加配置文件,
●在/bin添加命令或者程序,
●在/lib添加动态库等。
命令:
mkdirbinsbinusrlibdevmntoptrootetchomeproctmpvar
3:
添加设备文件:
♦Linux对所有外部设备的访问都是以文件的形式来进行;
♦在Linux系统中,可以找到设备对应的文件,称为设备文件;
♦设备文件(也叫做设备节点)都存放在/dev的目录下;
♦在/dev目录下,建立设备文件的命令是mknod;
如:
mknod/dev/ledc2310
上面例子中“/dev/led”是设备文件路径;“c”是指定为字符设备;“231”是主设备号;“0”是次设备号。
♦Linux系统是靠主、次设备号来联系驱动程序和设备文件的;
♦在内核源码树中,Documentation/devices.txt文件描述了常用的linux驱动程序的主、次设备号;
♦Linux内核完全可以自己管理设备文件,这就是设备文件系统(devfs);
♦设备文件系统可以在配置内核时定制;其层次是makemenuconfig-->Filesystems-->Pseudofile-system-->/devfilesystemsupport;
♦内核启动的时候就会把设备文件系统挂载到/dev目录下;
♦有了设备文件系统,linux设备文件的创建、删除都由各自设备驱动程序管理,不再需要用mknod命令来添加设备文件了;
这里-a参数用来保留文件的所有属性,否则cp命令将试图从设备文件中读取内容并写入新文件。
在嵌入式系统中,出于某种需要可能不希望动态创建设备文件,这时,所需的设备文件就要用mknod命令预先在根文件系统内创建,或者将创建设备文件的命令写入系统的初始化脚本中。
4:
添加动态库
♦应用程序的运行需要动态链接库,交叉编译的应用程序需要交叉编译的动态库;
♦假如我们用的工具链的路径是/usr/local/arm/3.3.2/,链接库的目录是/usr/local/arm/3.3.2/arm-linux/lib;
♦此目录下有四种类型的文件:
♦实际的共享链接库,如:
libc-2.3.2.so
♦主修订版本的符合链接,如:
libc.so.6
♦与版本无关的符合链接,如:
libc.so
♦静态链接库包文件,如:
libc.a
♦应用程序的运行只依赖于:
实际的共享链接库和主修订版本的符合链接;因此,在构建嵌入式根文件系统中,只需添加以上两种库文件。
♦在向目标板的根文件系统复制动态库之前,必须找出应用程序需要那些动态库;
♦下面介绍几个主要的动态链接库:
ld动态链接器
libc主C链接库
libcrypt秘密学链接库
libdl用来动态加载共享文件的动态库
libm数学库
libpthread多线程库
♦除了记下应用程序连接了哪些链接库之外,还可以通过arm-linux-readelf命令来找出应用程序依赖于哪些动态链接库;
如:
arm-linux-readelf-dhello;//hello只是打印一句“hello”的程序;
5:
添加配置文件
mkdiretc/init.d
进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,
添加如下内容:
6:
添加内核模块:
♦内核源码中的顶层Makefile文件包含了modules_install目标;
♦在缺省情况下,内核模块会安装到/lib/modules目录下;
♦然而,我们使用的是交叉开发,所以我们必须指示Makefile将模块安装到另外一个目录,如下;
●在交叉编译完内核之后,即执行完make之后,使用以下命令安装模块;
makeINSTALL_MOD_PATH=目标安装目录modules_install
7:
Busyboy添加应用程序:
下载地址:
Busybox的作用
1.缩小bin目录下命令文件的体积
2.生成默认配置文件
Busybox定制:
1:
安装busyboy工具包;
2:
创建文件系统的映象文件
3:
配置根文件系统
Makemenuconfig进入配置界面;
注:
1:
BuildBusyBoxasastaticbinary(nosharedlibs)//将busybox编译成静态链接
2:
DoyouwanttobuildbusyboxwithaCrossCompile?
(/usr/local/arm/3.3.2/bin/arm-linux-)CrossCompileprefix//指定交叉编译器
安装:
makeARCH=armCROSS_COMPILE=arm-linux-CONFIG_PREFIX=安装路径allinstall
Busybox的init分析:
♦Busybox提供常用系统命令之外,还提供一个init程序,它可以处理系统的启动工作;
♦Busybox的init进程会依次执行以下动作:
●初始化控制台
●根据/etc/inittab文件,执行系统初始化命令行(动作类型:
sysinit)
●根据/etcinittab文件,执行所有会导致init暂停的inittab命令(动作类型:
wait);
●根据/etc/inittab文件,执行所有仅执行一次的inittab命令(动作类型:
once)。
⏹一旦完成以上工作,init进程会循环执行一下工作
●执行所以终止时必须重新启动的inittab命令(动作类型:
respawn);
●执行所有终止时必须重新启动但启动前先询问用户的inittab命令(动作类型:
askfirst);
♦上面提到,init进程是根据/etc/inittab文件来执行相应的动作的;
♦下面分析inittab文件的格式:
Inittab文件中每一行的格式如下:
id:
runlevel:
action:
process
⏹其中:
●Id:
用来指定所启动进程的控制台,在嵌入式系统中一般不添;
●Runlevel:
busybox完全忽略runlevel字段;
●Action:
指出init程序在执行相应process时,对process所采取的动作
●Process:
具体的执行程序;
♦inittab文件的action字段中,有以下八个应用到process的动作:
●Sysinit:
为init提供初始化命令行的路径;
●Respawn:
当该进程死亡时,init将重新启动该进程,不等待该
进程的结束;
●Askfirst:
当相应的进程终止便重新启动,会t在控制台显示
“PleasepressEntertoactivatethisconsole.”的信息。
●Wait:
启动进程并等待其结束;
●Once:
启动相应的进程,但不等待该进程结束;
●Ctrlaltdel:
当按下Ctrl-Alt-Delete组合键时,执行相应的进程;
●Shutdown:
当系统关机时,执行相应的进程;
●Restart:
但init从新启动时,执行相应的进程。
●注意:
在inittab文件中,每一行的执行不是按照先后顺序来排列的,是安照每一行的“action”动作类型来执行的,
●例如,下面的inittab文件:
:
:
sysinit:
/etc/init.d/rcS//第一个执行
:
:
askfirst:
/bin/bash//第三个执行
:
:
restart:
/sbin/init
:
:
once:
/usr/etc/rc.local//第二个执行
:
:
ctrlaltdel:
/sbin/reboot
:
:
shutdown:
/bin/umount-a-r
♦如果/etc/inittab文件不存在,busybox会使用缺省的inittab配置。
这个缺省的inittab配置如下:
:
:
sysinit:
/etc/init.d/rcS/*执行的第一个命令行脚本*/
:
:
askfirst:
/bin/sh/*在控制台启动一个“shell”*/
:
:
ctrlaltdel:
/sbin/reboot
:
:
shutdown:
/sbin/swapoff-a
:
:
shutdown:
/bin/umount-a–r
/*系统关机的时候执行umount命令,卸载所以的文件系统*/
:
:
restart:
/sbin/init
/*重新启动init进程*/
8:
制作根文件系统的shell脚本:
*--------------------------------------------------------------------------*
#!
/bin/sh
echo"creatintrootfsdir......"
mkdirrootfs
cdrootfs
echo"makingdir:
bindevetclibprocsbinsysusr"
mkdirbindevetclibprocsbinsysusr#必备的8个目录
mkdirusr/binusr/libusr/sbinlib/modules
#Don'tusemknod,unlessyourunthisScriptasroot
# mknod-m600dev/consolec51
# mknod-m666dev/nullc13
echo"makingdir:
mnttmpvar"
mkdirmnttmpvar
chmod1777tmp
mkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/temp
mkdirvar/libvar/lockvar/logvar/runvar/tmp
chmod1777var/tmp
echo"makingdir:
homerootboot"
mkdirhomerootboot
echo"done"
*---------------------------------------------------------------------------*
11:
Bootloader
功能:
1:
初始化硬件设备
2:
建立内存空间的映射图
3:
调整系统的软硬件环境,以便操作系统内核启动
基于嵌入式微处理器构建的嵌入式系统通常都设计有某种类型的固态存储设备,如ROM、EEPROM、Flash等。
BootLoader被安装到这种存储设备上,这种存储设备又被映射到预先安排的最先取指令的地址。
这样,就可以保证系统加电或复位之后,首先运行BootLoader程序。
U-Boot编译后的代码定义一般不超过100kB,并且这100kB又分成两个阶段来执行。
第一阶段的代码在start.s中定义,大小不超过10kB,它包括从系统上电后在0x00000000地址开始执行的部分。
这部分代码运行在Flash中,它包括对S3C2410的一些寄存器的初始化和将U-Boot的第二阶段代码从Flash拷贝到SDRAM中。
除去第一阶段的代码,剩下的部分都是第二阶段的代码。
第二阶段的起始地址是在第一阶段代码中指定的,被复制到SDRAM后,就从第一阶段跳到这个入口地址开始执行剩余部分代码。
第二阶段主要是进行一些BSS段设置,堆栈的初始化等工作,最后会跳转到main-loop函数中,接受命令并进行命令处理。
从固态存储设备上启动的BootLoader大多都是2阶段的启动过程,分为stage1和stage2两部分,以便提供更为复杂的功能,以及更好的可移植性。
stage1:
汇编部分执行简单的硬件初始化;
stage2:
C语言部分负责复制数据,设置启动参数,串口通信等功能。
stage1 通常包括以下步骤:
●硬件设备初始化;
●为加载 Boot Loader 的 stage2 准备 RAM 空间;
●拷贝 Boot Loader 的 stage2 到 RAM 空间中;
●设置好堆栈;
●跳转到 stage2 的 C 入口点。
stage2 通常包括以下步骤:
●初始化本阶段要使用到的硬件设备;
●检测系统内存映射(memory map);
●将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中;
●为内核设置启动参数;
●调用内核。
U-Boot:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 学习 笔记