打造嵌入式软件开发团队(2) tftp服务器

上回书说到嵌入式开发环境的根文件系统如何通过NFS挂载,接下来说一下内核如何通过tftp服务器调试和加载。

Bootloader

通过tftp加载内核的前提是,开发使用的bootloader支持tftp功能。这样的bootloader有很多,在MIPS结构(MIPS4K,BRCM,龙芯等处理器)上,可以尝试使用U-Boot或者CFE。其中U-Boot适用于多种平台,包括ARM,PowerPC,MIPS等多中体系结构,而CFE是Broadcom公司开发的一个开放源代码BL,被广泛应用于MIPS结构。

安装和配置TFTP服务器

在Debian base的Ubuntu系统上安装tftp的方法非常简单。首先,你可以尝试用apt-cache命令查看一下发行版上都提供了哪些tftp相关的软件可以使用。


$ apt-cache search tftp
...
tftp-hpa - HPA's tftp client
tftpd-hpa - HPA's tftp server
atftp - advanced TFTP client
atftpd - advanced TFTP server
...
tftp - Trivial file transfer protocol client
tftpd - Trivial file transfer protocol server

atftp和tftp-hpa都是比较特殊的版本,所以,为了简便起见,这个介绍中只安装通用的tftp和tftpd。你可以使用下面的命令安装TFTP。


$ sudo apt-get install tftpd tftp

确认inetd.conf中是否正确安装了tftpd。


grep tftp /etc/inetd.conf

准备TFTP服务器使用的目录,可以在这个目录中放入需要共享的文件,比如编译好的内核image文件。


$ sudo mkdir /tftpboot
$ sudo chmod 777 /tftpboot

一般,为了配置简便,通常将tftp服务的目录放在/tftpboot,当然这个位置是可以配置的,在/etc/inetd.conf文件中,可以看到tftp目录被放在了/srv/tftp中,你可以根据需要更改。


$ sudo sed -e "s,/src/tftp,/tftpboot," /etc/inetd.conf >
/etc/inetd.conf_out &&
sudo mv /etc/inetd.conf /etc/inetd.conf_bak &&
sudo mv /etc/inetd.conf_out /etc/inetd.conf

测试一下。


$ echo "HELLO" > /tftpboot/FILE.txt
$ tftp
tftp> connect localhost
tftp> get FILE.txt

另外一个选择是使用xinet.d来驱动tftpd,取代inet.d。

安装xinet.d。

$ sudo apt-get install xinetd

配置tftpd服务。

打开/etc/xinet.d/tftpd文件,根据下面的样子照猫画虎就行了,需要注意的是disable=yes这一行变成disable=no。另外,默认的配置文件中可能需要增加访问控制选项,即将only_from这个选项固定为局域网。


service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
group = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot
only_from = 192.168.1.0/24
disable = no
}

使用xinet.d的好处是安全性增强。也是一个比较不错的选择。


参考URL:
http://hogeo.jp/blog/memo/2008/07/tftpubuntu.html
http://0x100.com/Gentoo/Server/tftpd.html

发表评论