概 述
本文是linux开发的一个入门文档,介绍了从nfs启动android操作系统的相关步骤。
1. 开发环境
虚拟机:ubuntu8.10
虚拟机IP:172.16.10.73 网关:172.16.10.1 子网掩码:255.255.255.0 广播地址:172.16.1.255
开发板IP:172.16.10.211 广播地址:172.16.10.255 子网掩码 255.255.255.0
建立Linux虚拟机
关键设置:在虚拟机里一定要选上Bridged:connected directly to the physical network。
2.建立NFS服务
1.安装NFS
Ubuntu上默认是没有安装NFS服务器的,首先要安装NFS服务程序:
$ sudo apt-get install nfs-kernel-server
安装nfs-kernel-server时,apt会自动安装nfs-common和portmap
这样,宿主机就相当于NFS Server
2.配置NFS
(1)配置portmap
方法1: 编辑/etc/default/portmap, 将 -i 127.0.0.1 去掉.
方法2: $ sudo dpkg-reconfigure portmap , 对Should portmap be bound to the loopback address? 选N.
(2)配置/etc/hosts.deny
禁止任何host(主机)能和你的NFS服务器进行NFS连接,加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
(3)配 置/etc/hosts.allow
允许那些你想要的主机和你的NFS服务器建立连接。下列步骤将允许任何IP地址以172.16.10开头的主机(连 接到NFS服务器上),也可以指定
特定的IP地址,加入:
### NFS DAEMONS
portmap: 172.16.8. *
lockd: 172.16.8.*
rquotad: 172.16.8.*
mountd: 172.16.8.*
statd: 172.16.8. *
/etc/hosts.deny 和 /etc/hosts.allow 设置对portmap的访问. 采用这两个配置文件有点类似"mask"的意思. 现在/etc/hosts.deny中禁止所有用 户对portmap的访问. 再在/etc/hosts.allow 中允许某些用户对portmap的访问.
$sudo /etc/init.d/portmap restart
重启portmap daemon.
(4)配置/etc/exports
NFS挂载目录及权限由/etc/exports文件定义
比如我要将将我的/home/android/nfsroot目录让所有的IP共享, 则在该文件末尾添加下列语句:
/root/share/nfsroot *(rw,sync,no_root_squash,no_subtree_check)
若更改了/etc/exports, 运行$sudo exportfs -r 更新 运行
$ sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
(5)测试NFS
可以尝试一下挂载本地磁盘
我前面开始时已经提到了我的虚拟机IP172.16.10.73
#sudo mkdir nfsroot
将原来的文件系统的内容拷贝到这个目录。
#sudo mount –o loop ramdisk /mnt (注:这里有ramdisk文件系统由陈美友提供)
#sudo cp –rf /mnt /home/android/nfsroot
#sudo umount /mnt
我现在试把/home/android/nfsroot目录挂载到/mnt目录下
#mount -t nfs 172.16.8.67:/root/share/nfsroot /mnt
成功的挂载上的话你会在/mnt目录下看到nfsroot这个文件夹下的内容
sudo gedit /rootfs/etc/init.d/rcS
#! /bin/sh
mount –o remount,rw/
/sbin/ifconfig eth0 172.16.10.211
3.建立tftp服务
由于在uboot执行tftp命令时选用的是虚拟机里的文件,所以建立了tftp服务。
sudo apt-get install tftp tftpd xinetd tftp-hpa tftpd-hpa
cd /etc/xinetd.d/
sudo vim tftp
更改后如下:
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/android/tftpboot -c
per_source = 11
cps = 100 2
flags = IPv4
}
建立tftp服务文件目录
在/home/android/下建立sudo mkdir /tftpboot
sudo chmod 777 /tftpboot -R
重新启动服务
sudo /etc/init.d/xinetd restart
测试:
cd /home
(/tftpboot 下存放文件zImage)
sudo tftp 192.16.10.211
tftp> get zImage
如果在home目录下看到zImage说明配置正确。
4.内核配置
用了最新的dm9000.c文件(由陈美友提供),替换driver\net\dm9000.c文件.
在执行make menuconfig命令后,
在boot options里写入(如图所示)
noinitrd root=/dev/nfs rw nfsroot=172.16.10.73:/home/android/nfsroot ip=172.16.10.73:172.16.10.211:255.255.255.0 console=ttyS0,115200 init=/linuxrc mem=64M
在NetworkingàNetworking optionsà选上以下选项:
在Device DriversàNetwork device supportàEthernet(10 or 100Mbit)里选上:
在File systemsàNetwork File Systems里选上:
注:以上在make menuconfig中有些选项可能不是必须的,待进一步研究!
5.通过NFS启动开发板
当NFS 服务设置好并启动后,我们就可以把NFS 作为根文件系统来启动开发板了 通过使用NFS 作为根文件系统,开发板的“硬盘”就可以变得很大,因为您使用的是主机的硬盘 。这个时候把已有的文件系统
这是使用linux 作为开发经常使用的方法 ,打开串口终端,进入Uboot,设置虚拟机的IP
Ø setenv serverip 172.16.10.73
设置开发板的IP :
Ø setenv ipaddr 172.16.10.211
Ø 设置启动参数:
Ø setenv bootargs console=ttyS0 root=/dev/nfs nfsroot=172.16.10.73:/home/android/nfsroot ip=172.16.10.211:172.16.10.73:172.16.10.1:255.255.255.0:www.cn-emb.cn:eth0:off
这里解释下这条命令里面的意思:
1)nfsroot=172.16.10.73这个是我的虚拟机IP
2)ip=172.16.10.211:172.16.10.73:172.16.10.1:255.255.255.0
第一个IP是开发板的IP(开发板的IP不要与局域网内其它IP冲突),第二个是虚拟机的IP,第三个也是虚拟机的IP,第四个是开发板的子网掩码
执行完这条命令后再继续执行
>boot tftp 20400000 androidimg;bootm 20400000
如果一切顺利的话将会进入到开发板上去
进入到开发板后你就可以去mount你主机的共享目录了
下面是启动时的信息。
……
Looking up port of RPC 100005/1 on 172.16.10.73
VFS: Mounted root (nfs filesystem).
Freeing init memory: 124K
init started: BusyBox v1.11.1 (2009-03-04 14:12:26 CST)
starting pid 221, tty '': '/etc/init.d/rcS'
Processing etc/init.d/rc.S
Mount all
Start mdev....
Start network...
starting pid 227, tty '': '-/bin/sh'
Processing /etc/profile... Set search library path
Set user path
Done
# ls
bin etc home lost+found root tmp
boot gdbserver lib mnt sbin usr
dev hello linuxrc proc sys var
分享到:
相关推荐
嵌入式Linux开发入门主要涉及以下几个方面: 1. **Linux基础知识**:Linux是一种开源的操作系统,其内核由林纳斯·托瓦兹开发。了解Linux的基本概念,如文件系统、命令行操作、权限管理等,是嵌入式Linux开发的基础...
嵌入式LINUX开发入门嵌入式LINUX开发入门嵌入式LINUX开发入门嵌入式LINUX开发入门
Magic Linux开发入门指南 Magic Linux开发入门指南是制作Linux发行版的入门指南,旨在帮助读者从零开始制作自己的Linux发行版。 本指南假定读者对Linux有基本了解,拥有基本的命令使用经验,例如cp、mv、rm等,...
嵌入式Linux开发入门是进入嵌入式系统领域的一个重要起点,它涵盖了操作系统、硬件、编程和设备驱动等多个方面的知识。Linux作为一个开源的操作系统,因其稳定性、灵活性和强大的社区支持,被广泛应用于各种嵌入式...
在这个入门教程中,"嵌入式LINUX开发入门V1.5.pdf"很可能是包含上述所有内容的详细指导文档。这份资料可能涵盖了从环境搭建(如交叉编译工具链)、基础C编程、设备驱动模型介绍、内核模块开发,到实际的驱动示例和...
本课程的"嵌入式Linux开发入门(课件).zip"是针对初学者设计的教学资源包,旨在帮助学习者快速掌握嵌入式Linux的基本概念和实践技能。以下是基于提供的压缩包文件内容的详细知识点解析: 1. **嵌入式系统基础**: ...
Linux开发入门与实战
### Magic Linux 开发入门指南知识点总结 #### 一、工具链的制作 ##### 1.1 准备环境 在开始构建Magic Linux之前,需要确保有一台能够上网的386以上的计算机,并且具备基本的Linux操作技能。此外,熟悉一些基本的...
总的来说,Linux开发入门涉及的内容广泛,从操作系统基础、编程语言、系统编程到硬件平台的理解和系统移植,都需要逐步学习和实践。通过合理的学习路径和有效的学习方法,可以逐步掌握这一领域的知识,成为一名成功...
嵌入式linux开发入门.pdf
本文将从入门角度出发,详细介绍嵌入式Linux开发的基本概念、开发环境搭建、常用工具以及核心技能。 一、嵌入式系统与Linux 嵌入式系统是指集成在设备中的专用计算机系统,它们通常具有特定的功能,如智能家居控制...
TinaLinux系统适合初次接触全志平台的用户进行开发入门。 首先,TinaLinux系统的核心理念是智能硬件。智能硬件是指通过软硬件结合的方式,对传统设备进行智能化改造的科技概念。这类设备通常具有连接互联网的能力,...
嵌入式Linux开发是将Linux操作系统与特定硬件平台相结合,以实现特定功能的软件系统。在嵌入式领域,Linux因其开源、稳定、高效而受到广泛欢迎。本篇内容主要涵盖了嵌入式Linux开发的基本概念、开发模式、系统构成、...
linux项目开发入门案例 linux项目开发入门案例 linux项目开发入门案例linux项目开发入门案例 linux项目开发入门案例 linux项目开发入门案例 linux项目开发入门案例
Linux 是一个开源的操作系统,于 1991 年由林纳斯·托瓦兹(Linus Torvalds)创建。Linux 是一个免费、可自由修改和分发的操作系统,广泛应用于服务器、个人计算机、智能手机等领域。