本实验采用华清远见A8实验箱--FS210,搭载三星生产的ARM-A8内核的单核处理器S5PV210。这款处理器曾用于制造三星TAB平板,性能比较强大。本课程实验旨在通过对实验箱的使用掌握基本的ARM-A系列芯片系统的嵌入式开发流程。包括四个实验: - 裸机开发环境及linux操作系统下开发环境搭建
- 应用程序如何烧写到开发板中以及如何在线调试
- 裸机下实现开发板与PC机的串口通信
4、带操作系统下的嵌入式开发原理初识 通过四次试验,使同学们掌握嵌入式开发流程,理解有无操作系统在开发嵌入式系统过程中的区别,为以后深入学习嵌入式打下入门基础。 最后附有实验报告要求。 实验1:裸机开发环境及linux操作系统下开发环境搭建 及Linux常用命令及vi, gdb的使用 实验目的: (1)掌握嵌入式开发环境搭建的基本流程 - 掌握linux系统安装过程,熟悉基本的Linux指令操作
- 理解交叉编译的意义
实验原理: 嵌入式软件开发不同于PC机的软件开发,由于不同硬件平台的指令系统不同,要想在个人计算机上编写嵌入式软件和程序就需要使用对应的嵌入式平台的开发环境,比如大家学过的51单片机,用的KEIL(keil-C51)软件就是针对51内核平台下的集成开发环境,keil-C51软件中集成了代码编写、交叉编译、链接、程序烧写、仿真等最主要功能,从而使51单片机软件开发者在一个软件中实现了整个的程序开发流程,方便快捷。 同理,ARM内核平台也有其相应的开发平台,包括IAR,KEIL FOR ARM这两个著名软件,这两个软件在开发不带操作系统以及带有小型嵌入式操作系统(如u\Cos,RT-thread,Vx-works等)的产品时非常方便,但在开发如linux、安卓系统的产品时力不能及。因此需要用到更通用些的开发环境,如eclipse、PC-linux系统。 Eclipse是一个开源的软件工程文件管理界面,当它的底层安装了不同的编译、仿真等工具后,就可以用来开发不同平台的软件,如安卓APP,FPGA软核代码,当然也包括ARM软件。 当需要开发带有linux内核的大型嵌入式系统时,通常要在linux操作系统下进行,因此安装linux操作系统是开发嵌入式高端产品的必由之路,linux的使用流程能够帮助你更好理解嵌入式开发的每个环节。 实验仪器及资料: 1个人电脑(建议安装winXP或win7-32b,更高版本系统可能导致驱动安装失败) 2 FS210试验箱 3 FS210试验箱配套资料(12G) 实验内容及步骤: - 裸机开发环境搭建(这一大步骤需要在实验课上完成,第二步可以回去自己做)
下面为win7-32b系统下软件安装流程,以后的实验都使用win7-32位系统进行,使用其他系统的同学请参照实验箱配套书籍进行操作。此实验手册不做介绍。 把下载的实验箱资料解压(假设解压在桌面上)后: - 安装GCC编译器和Yagarto工具包(圈住的两个都装,安装位置随意):(已经安装)
- 安装FS-JTAG调试软件(安装位置随意):(已经安装)
(3)安装FS-JTAG驱动: 如图所示用USB线连接JTAG仿真器和电脑 <我的电脑>--右键--管理--设备管理器,如图 会出现两个带黄色叹号的设备(下图中的两个未知设备不必管它,只关心那两个“USB<=>JTAG&RS232”即可) 鼠标放在“USB<=>JTAG&RS232”上--右键--更新驱动程序软件,如图 选择第二项: ④浏览选择驱动位置并点击下一步,安装完成 注意:在win764位以及更高版本系统中会出现提示“驱动数字签名不可用”或者“哈希值不可用“的问题,而且有的电脑可以解决,有的不能解决,同学们自行百度。 ⑤重复第三步和第四步,直到使设备管理器里面没有带叹号的设备(一共三次) ①如图所示链接串口线 ②打开设备管理器按照“(3)安装JTAG驱动”方法安装串口驱动 ① ②自行在D盘新建一个Eclipse文件夹,并把上图压缩包解压至Eclipse文件夹中 ③下图是D盘下解压的eclipse,将其发送到桌面,留待以后使用 ④双击打开eclipse,设定工作路径(即以后你用eclipse新建的软件工程的默认保存位置),点击Workbench。如下图: 至此,可用于开发ARM裸机程序的开发环境搭建完成。 二、操作系统开发环境搭建(这一步可以回宿舍自己做,实验室电脑已经安装好,只需要在做第四个实验之前完成这一步骤就可以了,建议做完第二个实验之后做这一步) (1)环境搭建前的准备 ①检查主机配置 ②检查自己的电脑是否支持虚拟化技术(只有支持虚拟化技术的CPU才能运行虚拟机软件) 如果显示有下图红圈中的VT-x,则表示支持虚拟化技术 如果支持就继续实验,不支持的话,实验一下面的步骤和实验四没法做 ③继续,打开计算机的虚拟化功能:关机重启计算机,重启时按下F2按键进入下图状态,按照下图操作 准备工作完成,下面进入环境搭建流程 (2)环境搭建与初级设置 ①安装VMware Player,双击下图程序安装 ②解压Ubuntu系统镜像到D盘新建文件夹中(其他磁盘也可以) 解压后在D盘中: ③打开虚拟机,进行初级配置 ④编辑虚拟机设置 ⑤分别修改各项配置参数1、内存。2、处理器。3、网络适配器。4、共享目录 虚拟机内存分配大小根据自己的电脑配置修改,如果是2G内存,则分配约1G即可,如果大于等于4G内存,则分配大于1G即可。本机内存4G,如下图分配1.5G给虚拟机。 查看处理器的配置:计算机--右键--属性 可以看到,我的计算机为双核四线程(看不懂的可以用鲁大师查看) 我的计算机为双核,每个核心为双线程。 因此设置如下(下图中所谓核心数量=内核数x每个内核的线程数) 网络适配器为桥接模式: 上图桥接到了有线网卡上,因为我们后面要用有线网卡往开发板烧写程序 至于无线网卡,需要取消掉对它的桥接 共享目录添加:添加--下一步--浏览--下一步--完成 初级配置完成 ⑥打开虚拟机 ⑦ 密码为1,回车 打开了!!! 如何关闭!!! 到现在为止,linux开发环境的配置还没有结束,但是第二个和第三个实验的开发环境早已经可以使用了。 至于linux下的开发环境搭建还差一点点,留在第四个实验时接着介绍! (三)Linux常用命令及vi, gdb的使用 一、常用命令使用介绍 1.ls 命令 ---------------------------------------------------------------------- ls 以默认方式显示当前目录文件列表 ls –a 显示所有文件包括隐藏文件 ls –l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ---------------------------------------------------------------------- 2.cd 命令 cd dir 切换到当前目录下的 dir 目录 cd .. 切换到到上一级目录 cd ~ 切换到用户目录,比如是 root 用户,则切换到/root 下 ---------------------------------------------------------------------- 3.rm 命令 rm file 删除某一个文件 rm -rf dir 删除当前目录下叫 dir 的整个目录 ---------------------------------------------------------------------- 4.cp 命令 cp source target 将文件 source 复制为 target cp –av soure_dir target_dir 将整个目录复制,两目录完全一样 cp –fr source_dir target_dir 将整个目录复制,并且是以非链接方式复制,当 source 目录带有符号链接时,两个目录不相同 ---------------------------------------------------------------------- 5.mv 命令 mv source target 将文件或者目录 source 更名为 target ---------------------------------------------------------------------- 6.diff 命令 diff -ruN dir1 dir2 > <patch_file> 比较目录 1 与目录 2 中的文件 ---------------------------------------------------------------------- 7.echo 命令 echo message 显示一串字符 ---------------------------------------------------------------------- 8.cat 命令 cat file 显示文件的内容,和 DOS 的 type 相同 cat file | more 显示文件的内容并传输到 more 程序实现分页显示,使用命令 less file可实现相同的功能more 分页命令,一般通过管道将内容传给它,如 ls | more ---------------------------------------------------------------------- 9.du 命令 du 计算当前目录的容量 du -sm /root 计算/root 目录的容量并以 M 为单位 ---------------------------------------------------------------------- 10.find 命令 find -name <path> file 在/path 目录下查找看是否有文件 file ---------------------------------------------------------------------- 11.grep 命令 grep -r “chars” ./ 在当前目录的所有文件查找字串 chars -r 表示递归查找子目录 ---------------------------------------------------------------------- 12.vi 的使用 vi file 编辑文件 file vi 原基本使用及命令: vi 分为编辑状态和命令状态。输入命令要先按 ESC,退出编辑状态, 然后输入命令。 常用命令有: :x(退出) :x!(退出不保存) :w(保存文件) :w!(不询问方式写入文件) :r file(读文件 file) :%s/oldchars/newchars/g(将所有字串 oldchars 换成 newchars) i 进入编辑插入状态 ESC 退出编辑状态 ---------------------------------------------------------------------- 13.man 命令 man ls 读取关于 ls 命令的帮助 ---------------------------------------------------------------------- 14.启动关闭计算机命令 reboot 重新启动计算机 halt 关闭计算机 init 0 关闭所有应用程序和服务,进入纯净的操作环境 init 1 重新启动应用及服务 init 6 重新启动计算机 ---------------------------------------------------------------------- 15.tar 命令 tar -xfzv file.tgz 将文件 file.tgz 解压 tar -zcvf file.tgz <source> 将文件或目录<source>压缩为 file.tgz gzip directory.tar 将覆盖原文件生成压缩的 directory.tar.gz gunzip directory.tar.gz 覆盖原文件解压生成不压缩的 directory.tar。 ---------------------------------------------------------------------- 16.dmesg,uname 命令 dmesg 显示 kernle 启动及驱动装载信息 uname -a 显示操作系统的类型 ---------------------------------------------------------------------- 17.string 命令 string file 显示 file 文件中的 ASCII 字符内容 --------------------------------------------------------------------- 18.rpm 命令 rpm -ihv program.rpm 安装程序 program 并显示安装进程 ---------------------------------------------------------------------- 19.文件目录管理命令 su root 切换到超级用户 chmod a+x file 将 file 文件设置为可执行,脚本类文件一定要这样设置一个,否则得用 bash file 才能执行 chmod 666 file 将文件 file 设置为可读写 chown user /dir 将/dir 目录设置为 user 所有 ---------------------------------------------------------------------- 20.mknod 命令 mknod /dev/hda1 b 3 1 创建块设备 hda1,主设备号为 3,从设备号为 1,即 master 硬盘的第一个分区 Mknod /dev/tty1 c 4 1 创建字符设备 tty1,主设备号为 4,众设备号为 1,即第一个 tty 终端 ---------------------------------------------------------------------- Touch /tmp/running在/tmp 下创建一个临时文件 running,重新启动后消失 ---------------------------------------------------------------------- 21.磁盘管理的命令 fdisk /dev/hda 就像执行了 dos 的 fdisk 一样 mount -t ext2 /dev/hda1 /mnt 把/dev/hda1 装载到 /mnt 目录 df 显示文件系统装载的相关信息 mount -t nfs 192.168.1.1:/sharedir /mnt 将 nfs 服务的共享目录 sharedir 加载到/mnt/nfs 目录 umount /mnt 将/mnt 目录卸载,/mnt 目录必须处于空闲状态 sync 刷新缓冲区,使内容与磁盘同步, mkfs.ext2 /dev/hda1 格式化/dev/hda1 为 ext2 格式 dd if=/dev/zero of=root.ram bs=1024,count=1024 生成一个大小为 1M 的块设备,可以把它当作硬盘的一个分区来用 22.程序开发有关命令 gcc hello.c -o hello 将 hello.c 编译成名为 hello 的二进制执行文件 ldd program 显示程序所使用了哪些库 23.系统有关命令 ps 显示当前系统进程信息 ps –ef 显示系统所有进程信息 kill -9 500 将进程编号为 500 的程序杀死 top 显示系统进程的活动情况,按占 CPU 资源百分比来分 free 显示系统内存及 swap 使用情况 time program 在 program 程序结束后,将计算出 program 运行所使用的时间 网络命令 ifconfig eth0 192.168.1.2 捆绑网卡 1 的 IP 地址为 192.168.1.2 ---------------------------------------------------------------------- 24、登录网络服务器 telnet 192.168.1.1 登陆 IP 为 192.168.1.1 的 telnet 服务器 ftp 192.168.1.1 登陆到 ftp 服务器 实验思考 Linux 下命令有哪几种可使用的通配符?分别代表什么含义?
实验2 烧写应用程序到开发板中以及在线调试 实验目的: 掌握如何把自己编写好的软件下载到开发板上 实验原理: PC机通过JTAG工具把开发者编译好的可执行文件下载到开发板中,有的时下载到芯片内部的flash中,以后芯片上电后就会自动执行flash中的代码。也有的芯片内部没有flash,而是把可执行文件烧到开发板上的flash中,大型程序往往存储在外部磁盘,比如个人电脑里有一个ROM用于开机时的初始化工作,之后调用了C盘里的windows操作系统,嵌入式平台可以外接SD卡,MMC等,他们都可以存储程序。 本试验把一个已经编译好的软件烧写到开发板的RAM中,这个程序只有几KB,不会引导外部存储中的其他可执行文件。 把程序烧写到RAM中是一种快捷的调试手段,这样可以在不修改flash中的引导程序的前提下,在线调试程序,当断开仿真器后,开发板会重新复位,RAM中的程序被清除,重新加载flash中的程序。 通过对一个现有的点亮LED灯的程序,使大家掌握eclipse软件的使用流程。 实验仪器及资料: 1个人电脑(建议安装winXP或win7-32b,更高版本系统可能导致安装失败) 2 FS210试验箱 3 FS210试验箱配套资料(12G) 实验内容及步骤: ① 关闭电源的情况下,开发板上的拨码开关需要拨到如图状态(1000),这是一个用于开机启动配置的开关,拨到不同位置,启动的系统来自不同的存储器。 ②连接开发板与电脑,如下图 ③使用串口终端调试软件Putty。 (把这个软件复制到桌面,因为以后实验多次用到) ④查看自己电脑的串口号,如图,本机CH340的串口为COM5,(至于COM7,它是FS-JTAG上面的串口,暂时不必管它) ⑤配置Putty并使用 把刚才查看到的串口号填写到Putty的文本框中 ⑥打开串口 ⑦打开后如图 ⑧以后再次使用putty只需如图设置 ⑨打开开发板电源,此时Putty显示下图内容,立刻按下空格键。 ⑩打开FS-JTAG调试工具 出现下图现象: 出现ERROR属于正常情况,此时不要关闭putty和FS-JTAG软件 准备工作到此完成,以上工作在以后的实验中也要提前用到,目的就是要使开发板进入步骤⑨的状态,下面开始进行程序烧写实验 (2)程序仿真 ①打开eclipse,导入一个已有的工程:右键点击Project Explorer--Import ②选择Exsiting project--next ③浏览并打开一个LED工程的根目录 这个工程目录如下: ④工程打开后界面如图,双击打开led.c文件 ⑤编译工程:project--build all ⑥仿真配置:run--debug configeration--Zylin...(native)--右键--new ⑦browse--<04-led-ram>--OK--Browse ⑧上图第三小步打开led.elf文件 ⑨配置debugger选项卡 其中上图第二小步选择打开下图所示(打开之前安装yagarto编译器的安装位置): 其中上图第三小步选择打开下图所示: ⑩配置好仿真命令后开始仿真 ⑪仿真时界面如下,按下图标记的1小步开始运行仿真 此时看到开发板上led灯闪烁: 按⑪中的2小步仿真暂停,led停止闪烁 ⑫查看此时开发板上的寄存器以及变量的值(暂停状态下) 由于在main函数中定义了一个变量i,所以在右上角的查看窗口的Variables选项卡中有一个“(x)=i 551556”,代表i当前值为551556. 同理点击Registers选项卡,可以查看CPU寄存器中的数值。 ⑬结束仿真:按照下图步骤 ⑭工程名--右键--close project,然后关闭eclipse 实验结束!!! 思考题: 1.注释main函数的每一条语句的大致意思?可以打印出来粘贴在实验报告上 2.工程文件中有一个start.s文件,它的作用是什么? 实验3 裸机下实现开发板与PC机的串口通信 实验目的: 1.理解一个嵌入式硬件开发板上两个不同的芯片之间如何通信 2.掌握串口通信概念,理解串口通信对于嵌入式开发的作用 实验原理: 在实际应用中串行通信比并行通信应用广泛的多,wifi,蓝牙,以太网,光线都是采用串行通信。本次试验讲解一种最简单的串行通信--UART. 这个串口每次发送一个字节的数据,波特率可选为115200bps、9600bps等不同速度,和51单片机的串口相比,其通信协议相同,只是ARM中的串口功能更强大一点。 串口与整个开发板之间的关系如图: Uart是芯片上的一个外设,芯片内核通过并行(IO映射统一编址)方式把数据发给UART,然后串口自动以串行方式发出,接受过程类似。 途中用到MAX3232芯片,这是一个把UART使用的TTL电平转换为RS232电平,从而提高传输线抗干扰能力。PC机通过USB转串口驱动把数据接收过来。 实验仪器及资料: 1个人电脑(建议安装winXP或win7-32b,更高版本系统可能导致安装失败) 2 FS210试验箱 3 FS210试验箱配套资料(12G) 实验内容及步骤: ①导入一个已有工程 09-uart ②安装一个新的串口调试助手: 百度下载并安装 ③ 准备工作:(完全按照实验二的准备工作进行即可) ④ 完成上一步后,可以关闭putty软件了,因为putty和上面新下载的串口助手无法同时运行 ⑤打开新下载安装的Spu串口助手并打开串口 所需要配置的串口号是putty软件所驱动的同一个串口-COM5,这就是putty和Spu无法同时运行的原因(两个软件不可同时驱动同一个外设工作) ⑥程序仿真:按照实验二中程序仿真的步骤进行操作(无非是换了个工程而已) 实验现象: ① 此时接收到三行字符串,数据量体现在最下方“Rx:52 Bytes” 此时还没有通过电脑给开发板发送数据,所以显示“Tx:0 Bytes” ②通过电脑发送数据“Teacher Chen--学号110”: 可以看到接收框中多出了自己发送的一行,但是事实上多出的一行是从开发板发送过来的,不是自己打在上面的。 因为最下面显示“Rx:73 Bytes”和“Tx:21 Bytes”。“Teacher Chen--学号110”这段字符刚好占21字节,所以会显示发送了21字节,同时又接收了新的21个字节,导致接收了52+21=73字节。 实验完成!! 注意:第四次试验中第一部分要求自己回去完成,请同学在第四次实验开始之前完成好。 思考练习: 1.修改程序代码,使你通过电脑发出的数据和接受的数据不一样,实现发送一个字符大写’A’,接收小写’a’。把实验结果和修改后的程序代码打印粘贴在实验报告上。 2.在C语言中我们学过,printf()函数是用来在电脑屏幕上显示格式化字符的,但是本实验中却是在ARM开发板上用来通过串口发送了一段字符串,这是什么原理?(自行百度) 实验4 带操作系统下的嵌入式开发原理初识 实验目的: 1掌握在有操作系统下,如何开发嵌入式应用程序 2理解有没有操作系统时嵌入式开发有什么区别 3理解有没有操作系统时嵌入式系统的使用有什么区别 实验原理: 嵌入式系统总体上是由硬件和软件组成的,硬件是基础,软件是核心与灵魂。它们之间的关系如图: 实验仪器及资料: 1个人电脑(建议安装winXP或win7-32b,更高版本系统可能导致安装失败) 2 FS210试验箱 3 FS210试验箱配套资料(12G) 实验内容及步骤: - 完成实验一未完成的环境搭建配置(去实验室做第四次实验之前要完成,否则时间不够)
(1)tftp配置 ①打开终端输入“cd /tftpboot”回车 ②输入“ls”回车 ③输入“cat test”回车,结果如图, ④输入“cd ~”回车,再输入“tftp 127.0.0.1”回车,再输入“get test”回车,结果如图 ⑤输入“q”回车,再输入“ls”回车,再输入“cat test”回车,结果如图 如此表明tftp服务建立成功 所谓NFS是指开发板通过NFS挂载放在主机PC上的根文件系统。这样的话主机在文件系统进行的操作就可以同步反映到开发板上;开发板上进行的操作也会同步反映到主机的根文件系统上。因此,在实际的高端嵌入式开发中,经常使用NFS方式挂在系统,这样可以非常方便进行网络调试。具体使用方法如下 ①打开终端,输入“sudo vim /etc/exports”回车,会看到要求输入密码,密码为“1”,回车,结果如图 NFS允许挂载的目录及权限在文件/etc/exports中,第一步就是用vim打开了这样的文件。Vim是linux操作系统的一种文件编辑器,类似于windows系统里面的记事本这样的小软件,只是使用上有点麻烦。下图便是vim打开了/etc/exports文件之后的界面,很像cmd命令。 ②可以看到上图第12行的一串字符 其中/source/rootfs是要共享的目录,*代表允许所有的网络段访问,rw代表可读可写权限,sync是指资料要同步写入内存和硬盘,no_root_squash是NFS客户端分享目录使用者的权限。 其实本来第12行是需要同学们来输入进去的,但是在制作虚拟机镜像时已经操作过了,所以你们不用修改它。 ③在小写状态下打字“:q”回车,就可以退出vim编辑界面 ④重启NFS服务:在终端输入”sudo /etc/init.d/nfs-kernel-server restart”回车,结果如图 上图有一句带有一个fail,在是不管他 (3)配置开发环境网络 我们之前的NFS配置是为了通过有线网卡对开发板进行调试,而这一步就是为了配置有线网卡,具体步骤如下: ①打开终端,输入“sudo vim /etc/network/interfaces”,回车,输入密码“1”回车,结果如图所示 本次也是用到了,vim文件编辑器,还是不需要编辑他,已经编辑好了。 而且电脑和开发板是通过网线直接相连,不需要做过多的网络配置。 ②把上图用手机拍下来记住就可以了,然后在键盘上打字“:q”回车就可以已退出vim。 ③终端下输入“sudo /etc/init.d/networking restart”回车,弹出信息如下 上图表明网络配置没有问题了 ④查看网络配置:终端里面输入“ifconfig”回车,结果如图 至此,网卡配置成功了 (4)配置交叉工具链 交叉工具是在个人电脑上开发嵌入式系统所使用的一系列软件工具,交叉编译器,交叉连接器,交叉调试器等都属于交叉工具,交叉工具链是指把这些针对ARM-A8的交叉工具集成在一起从而开发特定的嵌入式系统。因此当然你把51单片机的编译器和ARM的链接器组合在一起形成工具连是没法使用的。具体操作如下: ①打开终端输入“cd /usr/local/toolchain/”回车,再输入“ls”回车,如图 ②输入“vim ~/.bashrc”回车,进入vim编辑界面,(这次要使用vim编辑器了),鼠标滚动至最下面,如图 ③把光标放到第107行--小写状态下按一下字母“o”--按一下esc--再按一下“o”,结果多出两行:108和109,如图 此时输入: “export PATH=$PATH:/usr/local/toolchain/toolchain-4.4.6/bin/”,按一下esc结束输入(如果输入错误,可以把光标移动到错误处按一下字母“R”然后就可以打字替换错误的字符了,也是按一下esc按键退出修改) 结果如下图: ④打字“:wq”回车,就退出编辑了(其中“:”表示命令状态,“w”表示保存修改,“q”表示退出vim编辑器) ⑤重启配置:在终端下输入“source ~/.bashrc”回车,如图 ⑥工具连测试:输入“arm-cortex_a8-linux-gnueabi-gcc -v”回车,结果如下图: 出现上图所示(注意倒数第二行版本号为4.4.6),表示交叉工具链已经配置好了 二、开始实验四,操作系统下的各种文件编译与下载(第四次实验课上进行) (1)拷贝文件 把下图所示资料路径中的全部文件拷贝到之前第一个实验时我们建立的共享文件夹中 (2)把共享目录中需要下载的文件拷贝到tftp下载目录中 ①拷贝u-boot.bin,zImage文件到虚拟机下的/tftpboot目录下 :在中端输入 “cp /mnt/hgfs/VM_ENJ/u-boot.bin /mnt/hgfs/VM_ENJ/zImage /tftpboot/”回车 注意:上面的命令中红色的是我的共享目录名,请根据自己的共享目录名来输入,不要全盘照抄 ②继续输入“ls /tftpboot/”回车,结果如图 ③解压文件系统,拷贝rootfs.tar.bz2文件到虚拟机ubuntu下的/source目录下:输入“cp /mnt/hgfs/VM_ENJ/rootfs.tar.bz2 /source/”回车 继续输入“ls /source/”回车 继续输入“cd /source”回车 继续输入“ls”回车,结果如下两图 ④解压:输入“tar xvf rootfs.tar.bz2”回车,结果如图 结果弹出很多行内容,图中最后几行大致如此,说明解压成功 (3)开始使用开发版 ①连接开发板,如图所示连接(用到了串口线,网线,电源),此时开发板暂不上电 ②打开串口调试助手(打开方式如同实验二方法,这里不再赘述) ③开发板上拨码开关拨到1000,打开电源,在putty倒计时到0之前按下任意键,停留在如下图所示状态 ④修改开发板环境变量(通过putty) a.在putty中输入“setenv serverip 192.168.100.192”回车 (上面的IP地址就是之前让你们手机拍照记住的IP,这是主机的IP,也就是ubuntu里的IP) b.继续输入“setenv ipaddr 192.168.100.191”回车 (这是设定开发板的IP,原则上IP的最后一位是任意的,但不能和主机IP冲突) c.继续输入“saveenv ”回车,最后如图所示 ⑤查看修改后的环境变量:输入“print”回车,如图 ⑥使用ping命令一下主机:输入“ping 192.168.100.192”回车,如图 (ping命令的作用是与某IP地址的主机进行连接,这句话的意思其实是让开发板去ping一下主机,而不是主机通过putty串口ping开发板。当然最后开发板ping来的结果还是通过putty显示到电脑上) 上图倒数第二行显示host 192.168.100.192 is alive,表示ping通了。 (4)烧写uboot ①在putty中输入“tftp 20008000 u-boot.bin”回车 ②继续输入“nand erase 0 100000”回车 ③继续输入“nand write 20008000 0 100000”回车 (注意上面三步不要少了0,或者空格),结果如图 ④重启开发板:开关关上再打开,如图 (5)设置环境变量 ①依次输入下面的内容 “setenv serverip 192.168.100.192”回车 “setenv ipaddr 192.168.100.191”回车 “setenv gatewayip 192.168.100.1”回车 “setenv bootcmd tftp 20008000 zImage\; go 20008000”回车 “setenv bootargs root=nfs nfsroot=192.168.100.192:/source/rootfs ip=192.168.100.191 init=/linuxrc.console=ttySAC0,115200”回车 “saveenv”回车,结果如图 ②再次重启开发板:开关关上再打开,(注意这次也会出现倒计时,但是不要按下任何按键),结果如图 此时还没有boot完成,请等待一段时间 最后弹出如下内容,表示开发板已经通过网线把PC机的文件加载完成 (6)制作SD卡启动盘 ①把下图路径的文件夹拷贝到共享目录下 ②在ubuntu终端里输入“cd ~”回车 继续输入“cp /mnt/hgfs/VM_ENJ/sd_fusing/ ~ -a”回车 继续输入“ls”回车 ③继续输入“cd sd_fusing”回车 继续输入“make”回车 继续输入“chmod 777 sd_fusing.sh”回车 至此编译完成 ④拔下开发板的SD卡,用读卡器插在电脑上 ⑤在共享文件夹里新建一个文件夹命名为sd_out。 终端输入“cp ~/sd_fusing/sd_fusing.sh /mnt/hgfs/VM_ENJ/sd_out/”回车,就把生成的sd_fusing.sh复制到了共享文件夹下的sd_out中 ⑥在windows下把第五步复制的文件拷贝到SD卡根目录,然后把SD卡插入开发板 ⑦打开putty助手,拨码开关拨成0110,启动开发板,结果如图 ⑧在putty中输入“tftp 20008000 u-boot.bin”回车 继续输入“nand erase 0 100000”回车 继续输入“nand write 20008000 0 100000”回车 ⑨重启开发板,设置环境参数 依次输入下面的内容 “setenv serverip 192.168.100.192”回车 “setenv ipaddr 192.168.100.191”回车 “setenv gatewayip 192.168.100.1”回车 “setenv bootcmd tftp 20008000 zImage\; go 20008000”回车 “setenv bootargs root=nfs nfsroot=192.168.100.192:/source/rootfs ip=192.168.100.191 init=/linuxrc.console=ttySAC0,115200”回车 “saveenv”回车,结果如图 ⑩再次重启开发板:开关关上再打开,(注意这次也会出现倒计时,但是不要按下任何按键),结果如图 实验结束! 本次实验到底在做什么? 主要是做SD卡的启动,我们把需要运行的程序拷贝到了SD卡中,然后拨码开关拨到0110,这样uboot代码自动判断此时要求启动SD卡,就会加载SD卡中的sd_fusing.sh,然后运行这个文件。就得到了上图结果,虽然结果类似于网络文件系统的启动方式,但本质上启动位置不同。之前的网络启动方式是把拨码拨至1000,当然内部原理就不一样了。 以后当大家深入学习之后,可能会把一个嵌入式linux系统镜像烧写到SD卡中,然后拨码拨至0110,这样,linux就会在开发板上启动并且运行。如果把安卓镜像烧进SD卡,就会启动安卓系统。 再此还要说明一点,这个拨码开关到底是什么,它是普通的CPU引脚连在开关上的。当系统上电,首先运行CPU内部的flash中的初始化以及系统加载代码。这段代码相当于个人电脑刚开机进入windows之前所运行的那段程序,因为我们电脑也可以装多个操作系统,通过键盘选择启动哪一个。 CPU的flash中的代码会判断拨码的状态,今儿决定启动谁。 至于flash中的启动代码的设计,有的由CPU制造商提供,也可以由嵌入式开发者自己设计。其设计的总体流程类似于开发没有外部flash的51单片机,只是因为ARM-A8系统远比51单片机复杂,所以用ARM汇编写启动代码会高深一些。 思考题: 1.在linux系统下开发基于linux系统的嵌入式系统和开发裸机下嵌入式系统的区别有哪些?(两点即可) 2.linux操作系统、驱动程序、应用程序之间的位置关系是什么? 实验报告要求 1实验名称,实验日期等 2实验目的 3实验原理 4实验仪器与资料 5实验内容与步骤(不必把完整的步骤都写在实验报告上,只需要总结一个大致过程即可) 6实验最终现象(第一个实验只要一个查看自己的ip地址和接口信息的截图) 7思考题(有思考题的实验必须要写思考题,格式:问题加答案) (前5条可以简写。) (实验现象或结果必须贴图,思考题必须完成) 8 实验体会与总结
完整的Word格式文档51黑下载地址: |