Top

ESD PORTING DAY01

  1. 虚拟机、ubuntu系统安装及配置
  2. ubuntu操作系统中的TFTP服务配置
  3. ubuntu操作系统中的NFS服务配置
  4. 嵌入式GCC交叉编译器安装及使用
  5. 部署嵌入式系统到开发板

1 虚拟机、ubuntu系统安装及配置

1.1 问题

安装虚拟机Vmware,安装Ubuntu12.04操作系统。Windows 和Vmware环境下Ubuntu的网络设置和Windows和Linux文件共享。

1.2 方案

1.安装VMware虚拟机VMware8.0。

VMware Workstation(虚拟机),其最大的功能就是可以在同一时刻运行多个操作系统。其特点如下:

(1)VMware虽说只是使用软件模拟一个虚拟的计算机,但是它就像物理计算机一样提供了BIOS,可像在windows下一样更改BOIS的参数设置。不需要重新启动就可以同时在一台计算机上运行多个操作系统,可以是在窗口模式下运行客户机,也可以在全屏模式下运行,当从Guest OS切换到Host OS屏幕之后,系统将自动保存Guest OS 上运行的所有任务,以避免由于Host OS的崩溃,而损失Guest OS应用程序中数据。

(2)每一个在主机上运行的虚拟机操作系统都是相对独立的,拥有自己独立的网络地址,就像单机运行一个操作系统一样,提供全部的功能。最令人兴奋的是,当计算机在同时运行多个操作系统的情况下,如果,其中一个Guest OS的崩溃,其它Guest OS不受影响。

(3)在虚拟机上安装同一种操作系统的另一发行版,不需要重新对硬盘进行分区。

(4)虚拟机之间支持TCP/IP、Novell Netware以及Microsoft网络虚拟网络以及Samba文件共享等。而且,支持Guest OS和Host OS之间以及不同Guest OS操作环境下的剪切、复制和粘贴操作。VMware支持CD-ROM 、软驱以及音频的输入输出。

(5)在VMware的窗口上,模拟了打开虚拟机电源、关闭虚拟机电源以及复位键等,这些按钮的功能对于虚拟机来说,就如同PC机机箱上的按钮一样。如果客户机的操作系统是Windows ,在运行过程中非正常关机或者VMware崩溃,下次启动Windows的时候,它会自动进行文件系统的检查与修复。

利用VMware Workstation的功能特性,在windows XP系统下模拟一个虚拟的计算机,在此虚拟机上安装Ubuntu12.04操作系统,这样windows和Linux是相对独立的在运行,有利于学习。当然,在这种情况下,对于PC主机的配置要求是比较高的,因为想要XP和Linux都正常的工作的话,内存最好是1G以上,要不系统运行起来会不那么的流畅。如果您有兴趣或者机器的配置有限,那么建议还是安装一个独立的Linux系统,这样的不便之处就是同时只可以使用一个系统。

2.创建虚拟机。

3.安装ubuntu12.04系统。

Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu基于Debian发行版和GNOME桌面环境,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。2013年1月3日,Ubuntu正式发布面向智能手机的移动操作系统。

4.虚拟机网络设置和文件共享。

由于Ubuntu操作系统时通过虚拟机的方式安装在PC机中,因此,需要设置Windows下的IP地址,以及Ubuntu中的IP地址。设置Windows的IP为192.168.1.60,Ubuntu的IP为192.168.1.164。

VMware提供四种网络连接方式:网桥网络(Bridge)、网络地址翻译网络(NAT)、仅为主机网络(Host-only)和客户网络。常用的方式是前两种,网桥网络需要接上网线才可使用,当主机与TPAD间需要进行网络通信时使用这种方式,它相当于3台处于同一网段的计算机:主机(Windows)、虚拟机(Ubuntu)、TPAD。

要实现文件传输和共享,在共享目录中的文件两个系统都可以访问,即windows系统可以访问,ubuntu系统也可以访问,这样就为两个系统之间传输文件带来方便。

如本例中,向D:\ebm_linux\系统班\iso目录复制文件,在ubuntu系统中可以在/mnt/hgfs/shared目录下看到,反之,在ubuntu系统中,向/mnt/hgfs/shared目录复制文件,在windows系统中也可以访问。

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装虚拟机Vmware8.0。

双击“VMware 8.0”文件夹下的setup.exe,如图-1、图-2所示,即可开始安装虚拟机,注意安装类型选择“Custom”,如图-3-图-10所示安装界面图。

图-1

图-2

点击Next。

图-3

选择“Typical”安装即可,点击“Next”。

图-4

可以默认,也可以通过“change”重新选择安装路径,点击“Next”。

图-5

图-6

图-7

图-8

图-9

图-10

安装完成以后点击“Finish”,完成安装。

步骤二:创建虚拟机。

打开vmare软件,指定安装目录和ubuntu12.04的iso文件,如图-11-图-17所示安装过程:

图-11

选择“Create a New Virtual Machine”创建一个新的虚拟机。

图-12

选择上面的“Typical”配置,“Next”继续下一步。

图-13

选择“Installer disc image file(iso)”,通过“Browse”键选择已经准备好的iso文件。

图-14

输入该系统的用户名和密码,记好用户名和密码,稍后登录系统时会用到。

图-15

设置好虚拟机的名称和存放路径,如果有多个虚拟机时,可以通过虚拟机名来区别。

图-16

配置该虚拟机最大的磁盘空间,在这里使用40G。

图-17

最后点击“Finish”按钮开始安装系统。

步骤三:安装ubuntu 12.04系统

安装过程如图-18-图-21所示。

图-18

图-19

图-20

图-21

步骤四:设置主操作系统Windows的IP地址,设置为192.168.1.60。

在做实验的过程中,不同学员的PC机器上要设置不同的IP地址,以防止网络地址冲突,但必须保证都设置为192.168.1这个网段的IP地址即可,设置过程如图-22所示。

图-22

步骤五:设置Ubuntu 的IP地址。

在Ubuntu中打开一个终端窗口,输入如下命令,设置IP地址:

$sudo ifconfig   eth0   192.168.1.164

有些学员可能会发现,如果重新启动Ubuntu系统之后,之前设置好的IP地址常常会出现丢失的现象。如果遇上这个问题,请参看ARM day01的cookbook,使用图形界面重新设置IP地址。

步骤六:使用网桥(Bridged),设置主操作系统Windows和VMware。

使用网桥网络时,Windows和Ubuntu的IP必须属于同一个网段。将Windows系统下的网卡IP设为192.168.1.60。在VMware中,执行“VM”—>“Setting”命令,设置以使用网桥网络(”Connect at power on“一定要选上),Replicate Physical network connection state也勾选上,否则nfs文件系统有可能挂载不成功。如图-23所示。

图-23

我们的教学主机通常是装有双网卡。因此,还有一个非常重要的设置就是选择的桥接网卡必须是主机用来连接TPAD的那块网卡。学员使用PC机的网卡型号,可能与文档中显示的网卡型号不同,因此,需要根据各自具体的网卡型号进行配置选择,如图-24所示。

图-24

点击ok后,ubuntu的网络就设置好了,可以通过ping命令进行测试,不过首先要知道T-PAD的ip地址。

步骤七:设置windows和ubuntu的共享目录。

用于实现windows和ubuntu文件传输和共享:在vmware的菜单栏,选择VM,然后选择Settings…,再选择optinos,如图-25所示:

图-25

打开Shared Folders,如图-26所示:

图-26

选择Always Enabled选项,如图-27所示:

图-27

选择Add……按钮,添加新的共享目录,如图-28、图-29所示:

图-28

图-29

2 ubuntu操作系统中的TFTP服务配置

2.1 问题

Ubuntu 操作系统中的TFTP服务配置。

2.2 方案

在嵌入式Linux 开发过程中需要使用tftp 方式从Linux 主机下载文件到TPAD中,因此需要在主机Linux 系统中安装tftp 服务器。

2.3 步骤

实现此案例需要:

步骤一:安装程序。

安装tftp tftpd,前者是客户端,后者是服务程序。系统根据依赖会选上openbsd-inetd。

在Ubuntu 的终端下输入命令如下:

$ cd  /home/tarena/Downloads/tftp
$sudo dpkg –i  tftp-hpa_5.2-1ubuntu1_amd64.deb
$sudo dpkg –i  tftpd-hpa_5.2-1ubuntu1_amd64.deb
$sudo dpkg –i  openbsd-inetd_0.20091229-1ubuntu1_amd64.deb

步骤二:建立共享目录tftpboot。

在Ubuntu 的终端下输入命令如下:

$cd  /
$sudo mkdir tftpboot
$sudo chmod 777tftpboot
$sudo chown tarena tftpboot
$sudo chgrp tarena tftpboot

步骤三:修改tftp配置的共享目录。

在Ubuntu 的终端下输入命令如下:

$sudo vim /etc/default/tftpd-hpa

将下面代码:

TFTP_DIRECTORY="/var/lib/tftpboot"

修改为:

TFTP_DIRECTORY="/tftpboot"

步骤四:重启tftp服务。

当修改完配置文件之后,需要重新启动tftp服务,这样新的配置才能生效,在Ubuntu 的终端下输入命令如下:

$sudo /etc/init.d/tftpd-hpa   restart

步骤五:测试本机tftp服务。

$cd /home/tarena
$touch test.txt 
$cd /tftpboot
$tftp 127.0.0.1
$tftp>get test.txt

现在就可以通过tftp来下载u-boot,kernel和根文件系统的镜像等到TPAD的内存中了。

3 ubuntu操作系统中的NFS服务配置

3.1 问题

Ubuntu 操作系统中的NFS服务配置。

3.2 方案

在嵌入式linux开发的时候,常常需要使用nfs网络文件系统以方便程序的调试。使用nfs,用户可以将TPAD要用到的根文件系统放在主机目录下,TPAD则通过以太网挂载到主机的这个目录下,并将这个目录下的文件作为TPAD的根文件系统,这样用户的程序更新后不必重新烧写TPAD的根文件系统便能被重新使用,这点能够大大加快程序的调试。

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:进行NFS服务器端与客户端的安装。

$ cd  /home/tarena/Downloads/nfs
$sudo dpkg –i nfs-kernel-server_1%3a1.2.5-3ubuntu3_amd64.deb
$sudo dpkg -i nfs-common_1%3a1.2.5-3ubuntu3_amd64.deb

安装客户端的作用是可以在本机进行NFS 服务的测试。

步骤二:配置NFS的挂载目录和权限。

$sudo vim /etc/exports/

添加:

/opt/rootfs*(rw,sync,no_root_squash)

将/opt/rootfs目录设置为NFS的共享目录,*号表示允许与Ubuntu系统处于同一网段的所有机器都可以以NFS的方式挂载访问此目录。

步骤三:重启NFS服务。

$sudo /etc/init.d/nfs-kernel-server restart 

当重新修改了Ubuntu的IP地址,或者是重新修改了exports配置文件中的共享目录,都需要重新启动Ubuntu端的NFS服务,使得新的设置可以生效。

步骤四:测试NFS服务

在PC机上可以通过如下mount命令挂载进行测试。

$sudo  mount -t nfs 192.168.1.8:/tmp /mnt	
$ls /mnt

如果挂载成功,ls命令可以看到的输出信息与ls /tmp输出信息一样。

步骤五:T-PAD挂载NFS文件系统

打开T-PAD电源,按空格键进入命令行,修改T-PAD的bootargs参数,设置挂载文件系统为nfs。命令如下:

tarena# setenv bootargs lcd=vs070cxn tp=gslx680-linux root=/dev/nfs console=ttySAC0 nfsroot=192.168.1.164:/opt/rootfs ip=192.168.1.109:192.168.1.164:192.168.1.1:255.255.255.0::eth0:on init=/linuxrc maxcpus=1
tarena#save

设置完成后,保存参数。再重启开发板,可以看到linux内核正常启动,输入用户名root,密码123456进入shell界面。

图-30

4 嵌入式GCC交叉编译器安装及使用

4.1 问题

安装嵌入式GCC交叉编译器、设置环境变量。编译一个helloworld程序。

4.2 方案

在主机上用来编译其他类型机器可执行代码的编译器就叫交叉编译器,进行嵌入式Linux的开发的主机的处理器大部分都是x86,而的嵌入式系统的处理器有可能是arm、MIPS等非x86处理器,这时候必须使用arm、MIPS 等交叉编译器才能编译出这些处理器能够执行的代码。这里使用的是ARM公司提供的新一代的arm交叉编译器EABI编译器。

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装嵌入式GCC交叉编器。

在Ubuntu 下查看是否有交叉编译工具,如果没有请复制并解压到相应的路径,在给的ubuntu虚拟机镜像/home/tarena/workdir/路径中有交叉编译工具arm-cortex_a9-eabi-4.7-eglibc-2.18.tar.gz。

使用命令解压到/opt目录下(如果已经解压了可以略过该步骤)

tar xvf  /home/tarena/workdir/arm-cortex_a9-eabi-4.7-eglibc-2.18.tar.gz -C /opt

步骤二:设置环境变量。

注意,如果老师给的虚拟机镜像已经安装了交叉编译工具,并设置了环境变量则该步骤可以跳过。如果自己安装的交叉编译工具,就需要根据自己的安装路径来设置下面的环境变量。

$sudo vim  /etc/environment 

environment添加内容如下:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/bin"

修改完成后,保存。然后用source命令进行同步

$source /etc/environment

步骤三:测试编译器。

在Ubuntu 的终端下输入命令如下:

$arm-cortex_a9-linux-gnueabi-gcc  -v

显示该交叉编译器的版本信息如下:

Using built-in specs.

COLLECT_GCC=arm-cortex_a9-linux-gnueabi-gcc

....................

gcc version 4.7.4 20131111 (prerelease) (crosstool-NG linaro-1.13.1-4.8-2013.11 - nexell)

步骤四:编译hellowork.c源文件。

编辑helloworld.c源文件,代码如下:

#include <stdio.h>

int main(void)
{
	   printf("hello world\n");
    return 0;
}

用交叉编译工具进行编译:

$arm-cortex_a9-linux-gnueabi-gcc -o helloworld helloworld.c	

步骤五:运行helloworld,查看结果。

将编译好的helloworld文件复制到/opt/rootfs目录下,命令如下:

$cp helloworld  /opt/rootfs

在复制命令前,用ls命令查看了设备根目录下的文件,复制完成后再用ls命令查看根目录的文件,可以发现多了一个helloworld的文件。

图-31

在开发板上执行第一个arm平台linux环境的程序:

tarena#./helloworld

结果如图-32:

图-32

5 部署嵌入式系统到开发板

5.1 问题

烧写制作好的u-boot、kernel、rootfs到TPAD上。

5.2 方案

通过u-boot命令烧写TPAD上的emmc中。首先确定u-boot的分区设置,如图-33。

图-33

通过使用u-boot的tftp命令将数据下载到0x48000000的位置,然后再使用mmc write 命令烧写kernel到emmc中,文件系使用的是ext4文件系统格式。烧写完成后直接从emmc中启动部署好的嵌入式系统。

5.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:准备设备与软件资源

1. 准备硬件资源包括T-PAD、专用串口线、usb线、TF卡,读卡器,电源适配器

2.准备软件资源主要有串口工具(SecureCRT)、SD卡烧录工具(IROM_Fusing_Tool.exe),fastboot升级工具,可在T-PAD平台运行的u-bootpak.bin

3.主机系统要求:可以在winxp、win7 系统实现。

步骤二:打开虚拟机。

1. 打开前面案例中已经准备好的虚拟机

2. 将uImage,rootfs_ext4.img 复制到/tftpboot 目录下。

步骤三:通过Windows系统下的fastboot软件,使用USB接口烧写u-boot。

如果TPAD的emmc里面已经有uboot,那么该步骤可以跳过,如果没有可以参考ARM day01 的第一个案例,通过TF卡上的uboot实现将uboot部署在emmc中。

更新完成后,退出TF卡,重启开发板后,在SecureCRT中可以看到打印信息,如图-34所示:

图-34

步骤四:通过u-boot的tftp命令和mmc write 命令下载烧写kernel。

启动开发板,按空格键进入u-boot的命令行,将kernel下载到内存48000000的位置,如图-35所以:

图-35

回车后开始下载kernel镜像文件“uImage”,下载成功后出现如下图-36所示:

图-36

下载成功后,可以看到uImage的大小为0x529040Byte。如果命令不能一次执行成功,可以多试几次。kernal存放的位置是在emmc的1M到40M的位置,所以在用emmc写入数据的时候,要写在1M的偏移位置即0x10000。通过help命令可以查看mmc 命令的使用方法:

tarena# help mmc
mmc - MMC sub system

Usage:
mmc info - display info of the current MMC device
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
mmc part - lists available partition on current mmc device
mmc dev [dev] [part] - show or set current mmc device [partition]
mmc list - lists available devices
mmc setdsr <value> - set DSR register value

1. 在使用mmc的子命令之前先通过mmc dev 设定要操作的mmc设备。

2. 关于mmc read 和write 命令的格式,addr 是内存地址,我们通过tftp命令将数据下载在48000000位置,所以此处的参数为48000000,blk# 是写在emmc的偏移扇区,emmc每个扇区的大小是512(0x200)字节,1M自己的偏移量其所偏移的扇区数是0x100000/0x200=0x800,所以blk#的参数为800,cnt是指写入的扇区数,内核uImage的大小为0x529040字节,因此要写入的扇区数=0x529040/0x200 我们取大于该结果的扇区数,取3000。如图-37所示:

图-37

步骤五:烧录文件系统。

通过u-boot的tftp命令和mmc write命令下载烧写文件系统到emmc,要烧录的文件名为“rootfs_ext4.img”。跟kernel的烧录过程一样,通过tftp命令将文件系统数据下载到内存,如图-38所示:

图-38

下载完成以后,可以看到文件系统的大小为 0x6400000 字节,如图-39所示,再通过mmc write命令将数据写到emmc中,命令如下:

tarena#mmc write 48000000 20800 32000

图-39

因为文件系统分区system的偏移是4100000,如图-40。对应的扇区偏移为20800,文件的大小为6400000,其需要写入扇区的块数为6400000/200 = 32000。

图-40

步骤六:部署完成后,重启开发板。

启动过程中,串口会有打印信息,如图-41。启动完成后,可以看到T-PAD上的Qt界面。root用户登录,登录密码123456可以进入系统。

图-41