protocol = udp wait = yes user = root
server = /usr/sbin/in.tftpd server_args = -s /tftpboot per_source = 11 cps = 100 2 }
启动tftp服务
[root@localhost /]# service xinetd restart
Stopping xinetd: Starting xinetd: 检测tftp服务
[root@localhost /]# netstat -a | grep tftp
udp 0 0 *:tftp 1.2.3 Samba服务器配置
选择samba服务
[root@localhost /]# setup
编辑smb.conf配置文件,
[root@localhost /]# vi /etc/samba/smb.conf 增加用户名以及共享路径,如下: [homes]
comment = Home Directories path = /
browseable = no writable = yes valid users = root create mode = 0664 directory mode = 0775
[root@localhost /]#smbadduser root:admin 增加samba用户
[root@localhost /]# service smb restart 激活samba服务
[root@localhost /]# service smb status 察看samba服务
[ [ *:* OK ] OK ] 1.2.4 telnet服务器配置
选择telnet服务
[root@localhost /]# vi /etc/pam.d/login
注释掉auth required /lib/security/pam_securetty.so 这句话 重启服务
[root@localhost /]# service xinetd restart 至此可以以root用户telnet登录 1.2.5 nfs服务器配置
选择nfs服务
[root@localhost /]# vi /etc/exports
增加nfs服务输出的路径以及供给的ip地址,例如增加如下条目: /home/nfsroot 192.168.230.128(rw,sync)
表示ip地址为192.168.230.128可以读写本机的目录/home/nfsroot [root@localhost /]# service nfs restart 激活nfs服务
[root@localhost /]# service nfs status 察看nfs服务的状态 1.2.6 DHCP服务器配置
注意:当配置DHCP服务时会对于局域网有影响,建议在虚拟机的环境下,网络设备选择Host-only工作方式,如果不是虚拟机,请把网络连接与局域网断开。
选择DHCP服务器
[root@localhost /]# cp /usr/share/doc/dhcp-3.0pl1/dhcpd.conf.sample /etc/dhcpd.conf 创建一个DHCP服务的配置文件 [root@localhost /]# vi /etc/dhcpd.conf
编辑dhcpd.conf配置DHCP服务,下面的例子实现了基本的配置,目的是为在虚拟机上实现linux内核在网络上的启动。本机的ip是192.168.230.129
ddns-update-style interim; ignore client-updates;
subnet 192.168.230.0 netmask 255.255.255.0 {
# --- default gateway
option routers 192.168.230.129; option subnet-mask 255.255.255.0;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 192.168.230.120 192.168.230.128; default-lease-time 21600; max-lease-time 43200; filename \
#为实现通过网络启动加载的文件
# we want the nameserver to appear at a fixed address }
[root@localhost /]# service dhcpd start 开启dhcp服务
[root@localhost /]# service dhcpd status 察看服务是否运行
1.2.7 支持网络启动内核的配置方法
基本原理,实现网络启动必须支持PXE,PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。
PXE协议的成功运行需要解决以下两个问题:
l 既然是通过网络传输,那么计算机在启动时,它的IP地址由谁来配置; l 通过什么协议下载Linux内核和根文件系统
对于第一个问题,可以通过DHCP Server解决,由DHCP server来给PXE client分配一个IP地址,DHCP Server是用来给DHCP Client动态分配IP地址的协议,不过由于这里是给PXE Client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置。
至于第二个问题,在PXE client所在的ROM中,已经存在了TFTP Client。PXE Client使用TFTP Client,通过TFTP协议到TFTP Server上下载所需的文件。 1.2.7.1 1.2.7.2
配置DHCP和tfpt服务,配置方式见以上描述。 配置bootstrap
Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。bootstrap文件在dhcpd.conf中被指定为pxelinux.0文件,放置在/tftpboot。Linux内核以及Linux根文件系统也放置在/tftpboot。pxelinux.0在执行过程中,要读配置文件,所有的配置文件都放在/tftpboot/pxelinux.cfg/目录下。由于PXElinux具有为不同的PXE Client提供不同的Linux内核以及根文件系统的功能,所以要通过不同的配置文件名来区分出不同的PXE Client的需求。比如一个PXE Client由DHCP Server分配的IP地址为192.168.0.22,那么相对应的配置文件名为/tftpboot/pxelinux.cfg/C0A80016(注:C0A80016为IP地址192.168.0.22的十六进制表示)。如果找不到,就按照顺序C0A80016-> C0A8001-> C0A800-> C0A80-> C0A8-> C0A-> C0-> C->default查找配置文件。
[root@localhost /]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
[root@localhost /]# cd /tftpboot/ [root@localhost tftpboot]# mkdir pxelinux.cfg [root@localhost tftpboot]# cd pxelinux.cfg/ [root@localhost pxelinux.cfg]# vi default
default linux-boot prompt 1 timeout 30 label linux-boot kernel vmlinuz
append initrd=initrd devfs=nomount ramdisk_size=9216
把内核vmlinuz,initrd拷贝到/tftp下,这样当启动另外一个虚拟机,启动时按F12,即可进入网络启
动。启动界面如下:
1.3 交叉工具链的介绍与使用
1.3.1 基础知识
交叉编译,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。
在主机平台上开发程序,并在这个平台上运行交叉编译器,编译我们的程序;而由交叉编译器生成的程序将在目的平台上运行。例如:
arm-linux,说明平台所使用的是arm体系结构,运行的操作系统是linux 1.3.2 GNU 交叉工具链的下载
Arm工具链的官方下载地址:
ftp://ftp.arm.linux.org.uk/pub/arm-linux-/toolchain/cross2.95.3.tar.bz2 ftp://ftp.arm.linux.org.uk/pub/arm-linux-/toolchain/cross3.0.tar.bz2 ftp://ftp.arm.linux.org.uk/pub/arm-linux-/toolchain/cross3.2.tar.bz2 http://www.handhelds.org/download/projects/toolchain/ 可以下载arm-linux-gcc-3.4.1编译linux2.6的内核
1.3.3 GNU交叉工具链的介绍以及使用 1.3.3.1
常用工具介绍
arm-linux-as 编译ARM汇编程序 arm-linux-ar 把多个.o合并成一个.o或静态库(.a),
arm-linux-ranlib 为库文件建立索引,相当于arm-linux-ar –s arm-linux-ld 连接器(Linker), 把多个.o或库文件连接成一个可执行文件 arm-linux-objdump 查看目标文件(.o)和库(.a)的信息 arm-linux-objcopy 转换可执行文件的格式 arm-linux-strip 去掉elf可执行文件的信息. 使可执行文件变小 arm-linux-readelf 读elf可执行文件的信息 arm-linux-gcc 编译.c或.S开头的C程序或汇编程序 arm-linux-nm 用来列出目标文件的符号清单 1.3.3.2 1.3.3.2.1
主要工具的使用 arm-linux-gcc 的使用
1. 编译C文件,生成elf可执行文件
h1.c 源文件
#include
printf(\}
h2.c 源文件
#include
printf(\}
hello.c 源文件 #include
extern void hellosecond(void); extern void hellofirst(void); int main(int argc, char *argv[]) {
hellofirst(); hellosecond();