Linux 开发入门

来源:互联网 发布:apache beam storm 编辑:程序博客网 时间:2024/06/03 19:36

本文是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。

clip_image002

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

clip_image004

在NetworkingàNetworking optionsà选上以下选项:

clip_image006

在Device DriversàNetwork device supportàEthernet(10 or 100Mbit)里选上:

clip_image008

在File systemsàNetwork File Systems里选上:

clip_image010

clip_image012

注:以上在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