第一天
一、实训任务:
1. 2. 3. 4.
熟悉虚拟机的环境,了解了虚拟机的基础知识 安装与配置 VMware Workstation虚拟机
进而熟悉交叉编译环境,完成交叉编译环境的安装和配置 测试端口的连通性
二、原理
交叉编译,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture) 、操作系统(Operating System) 。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。一般情况下,主机和目标机是同一类型的计算机,这就是正常的编译。所谓交叉编译就是在主机上为目标机编译,比如在 PC 上编译,然后在手机上运行,这种编译就叫交叉编译。
交叉编译需要交叉编译器,不同的目标机(主要是看芯片类型)需要不同的交叉编译器。我们所用的交叉编译器就是 arm-linux-gcc 系列。构建一个交叉编译器(toolchain),说简单也简单,说复杂也复杂。原理上很简单,实际情况常常比较复杂,原因是编译器一直处于开发状态,你要了解某个版本的稳定性,要去找patch。网上已经有不少已经构建好了的交叉编译器(toolchain),除非你想了解如何构建交叉编译器,否则直接下载一个来用是比较明智的做法。
三、截图及说明
1、测试连通性:COM3
显示了相关信息,表示虚拟机和开发机连通了 2、可执行以下命令,安装交叉编译环境:
#mkdir -p /A8RP/tools /A8RP/toolchain
1
#cd /media/cdrom/linux/toolchain #cp –arf
arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz2
arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 /A8RP/tools #cd /A8RP/toolchain
#tar -jxvf arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz2
#tar –jxvf arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 # cp media/cdrom/linux/tools/mkimage /A8RP/tools # cp /media/cdrom/linux/tools/signGP /A8RP/tools #cp /media/cdrom/linux/tools/mkfs.ubifs /A8RP/tools #cp /media/cdrom/linux/tools/ubinize /A8RP/tools #cp /media/cdrom/linux/tools/ubinize.cfg /A8RP/tools 添加环境变量
#export PATH=/A8RP/toolchain/arm-2007q3/bin:/A8RP/toolchain/arm-2009q1/bin:/A8RP/tools:$PATH
这样我们就完成了交叉编译环境及编译工具的安装
第二天
一、实训任务:
1. 2. 3. 4.
交叉编译生成用于 SD 卡启动的 x-loader 映像文件 MLO U-Boot的编译 kernel的编译
格式化 SD 卡,并设置活动分区,将编译好的系统镜像以及文件系统拷贝至SD卡
二、原理
OURS-A8RP 支持 MMC/SD 启动或 NAND 启动,不同的启动方式烧写的 x-loader 的映像文件是不一样的,对应的映射生成方法也不同。
x-loader是一级引导程序,主要完成加载uboot之前的板载初始化, fat文件驱动,以便于从sd卡fat32分区读取uboot等文件,系统上电后由CPU内部ROM自动拷贝到内部RAM并执行。主要作用为初始化CPU,拷贝u-boot到内存中,然后把控制权交给u-boot。 u-boot是二级引导程序,主要用于和用户进行交互,提供映像更新、引导内核等功能。kernel是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
2
三、截图及说明
1、x=loader的编译
(1)交叉编译生成用于 SD 卡启动的 x-loader 映像文件 MLO #tar –xf x-load-1.41-256.tar
#cd x-load-1.41-256 #make distclean
#makeoursa8rp_config #make
#./signGP x-load.bin #ls
#sudo mv x-load.bin.ift MLO
执行以上操作后,当前目录会用于 SD 卡启动的 x-loader 映像文件 MLO,如截图所示:
(2)生成用于 NAND 启动的 x-load.bin.ift_for_NAND
1) 修改 x-load-1.41-256/include/configs/oursa8rp.h 文件
#cd include/configs/ #gedit oursa8rp.h
2) 交叉编译 NAND 启动 x-load
#cd x-load-1.41-256 #make distclean
#makeoursa8rp_config #make
#./signGP x-load.bin
#mv x-load.bin.ift x-load.bin.ift_for_NAND
3
执行完以上操作后,当前目录下会生成我们需要的NAND Flash 引导文件x-load.bin.ift_for_NAND,如图所示:
2、 U - B o o t 及编译,生成我们需要的 u-boot.bin 文件
#tar –xf u-boot-1.3.3-256.tar #cd u-boot-1.3.3-256 #make distclean
#makeoursa8rp_config #make
如图所示生成我们需要的 u-boot.bin 文件:
4
3、kernel编译,在arch/arm/boot 目录下会生成我们需要的 uImage 文件
#cd /A8RP/source/linux-omap3-a8rp #apt-get install libncurses5-dev #aptitude install libncurses5-dev
#make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean #make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
#make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omap3_a8rp_defconfig #make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
执行完以上操作后,arch/arm/boot 目录下会生成我们需要的 uImage 文件,如图所示:
4、格式化SD卡,下将MLO、u-boot.bin、uImage复制放在SD卡的第一个分区LABEL1中把/A8RP/source/sd_image/rootfs 中的所有文件,通过 CP 命令拷贝到/media/LABEL2 中:
5
启动终端,将SD卡插入SD卡插槽。按住目标板上的BOOT按键,给开发板上电,系统自动从SD卡启动,结果显示如下:
第三天
一、实训任务
1. 2. 3. 4.
通过 S D 卡烧写镜像到 N A N D F l a s h PC机、Ubuntu、开发机的IP设置 测试简单程序
TFTP安装与配置
二、原理
1. 因为OMAP3530支持MMC/SD引导,所以我们可以通过MMC/SD卡将系统引导起来,再通过在bootloader中加入擦除及烧写NAND指令,实现将镜像下载更新到NAND Flash,这样做的好处是省去了仿真器。
2. TFTP的全称是Trivial File Transfer Protocol,即简单文件传输协议。是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。使用此服务传送文件时没有数据校验、密码验证,非常适合小型文件的传输。
三、截图及说明
1. 烧写SD卡
第一步:烧写 X-loader
Ours A8rp #mmcinit
Ours A8rp #fatload mmc 0:1 80300000 x-load.bin.ift_for_NAND Ours A8rp #nand unlock
6
Ours A8rp #nand ecc hw
Ours A8rp #nand erase 0 80000
Ours A8rp #nand write.i 80300000 0 80000
上图表示x-loader烧写完成 第二步:烧写 U-boot
Ours A8rp #mmcinit
Ours A8rp #fatload mmc 0:1 80300000 flash-uboot.bin Ours A8rp #nand unlock Ours A8rp # nand ecc sw
Ours A8rp # nand erase 80000 160000
Ours A8rp #nand write.i 80300000 80000 160000
上图表示U-boot烧写完成 第三步:烧写 Kernel
Ours A8rp #mmcinit
Ours A8rp #fatload mmc 0:1 80300000 uImage Ours A8rp #nand unlock Ours A8rp # nand ecc sw
Ours A8rp #nand erase 280000 400000
Ours A8rp # nand write.i 80300000 280000 400000
上图表示Kernel烧写完成 第四步:烧写文件系统
Ours A8rp #mmcinit
Ours A8rp#fatload mmc 0:1 81000000 ubi.img Ours A8rp # nand unlock Ours A8rp # nand ecc sw
Ours A8rp # nand erase 680000
Ours A8rp #nand write.i 81000000 680000 $(filesize)
7
上图表示文件系统烧写完成
第五步:在 Uboot 中设置 NAND 启动参数
Ours A8rp#setenv bootargs mem=88M console=${con},115200n8 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs ip=192.168.0.125:192.168.0.76:192.168.0.1:255.255.255.0:a8_rp:eth0:off vram=12M omapdss.def_disp=lcd omapfb.mode=lcd:800x480MR-16@60 omapfb.vram=0:12M
Ours A8rp #setenv bootcmd 'nand ecc sw;nand read.i 0x80300000 0x280000 0x300000;bootm 0x80300000' Ours A8rp #saveenv Ours A8rp #boot
上图说明系统启动成功,已经成功将 X-Loader,U-boot,Kernel,Rootfs 烧写至 NAND Flash 中,并切已设定好启动参数。按下目标板上的 RESET 按键或者重新上电,此时系统将从 NAND Flash 引导并启动。
8
2. 设置PC机、Ubuntu、开发机的IP,最后Ping结果如图所示:
表示网络已连接 3. 程序测试
如图所示:测试程序显示出小组成员的信息(姓名,学号)结果
9
第四天
一、实训任务
1. NFS环境的安装与配置 2. 简单字符型驱动程序实现 3. LED点阵程序设计与实现
二、原理
1. 设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细
节,这样在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1 )对设备初始化和释放。
2)把数据从内核传送到硬件和从硬件读取数据。
3 )读取应用程序传送给设备文件的数据和回送应用程序请求的数据。 4 )检测和处理设备出现的错误。
2. 字符设备是指存取时没有缓存的设备,在对字符设备发出读/写请求时,实际的硬件I/O一般就紧 接着发生了
3. Linux字符设备驱动的关键数据结构为cdev及file_operations结构体,在Linux2.6字符设备驱动程序 中还有一个重要的组成部分,那就是字符设备驱动模块的加载与卸载,其中驱动模块的加载实现 设备号的申请和cdev注册,而在卸载函数中实现设备号的释放和cdev的注销。 在Linux2.6下用cdev 结构体描述字符设备,其中,cdev的成员函数dev_t用于定义设备号,cdev结构体的另一个重要成 员file_operations用于定义字符设备驱动提供给虚拟文件系统的接口函数,这接口函数给每个设备 提供I/O设备的固定存取入口点,使得我们可以通过这组有固定名称和功能的接口函数来访问I/O 设备。
4. LED点阵一般采用扫描式显示,实际运用分为三种方式:
(1)点扫描; (2)行扫描; (3)列扫描。
若使用第一种方式,其扫描频率必须大于32x256=8192Hz,周期小于1ms即可。 若使用第二和第三种方式,则频率必须大于32x16=512Hz,周期小于7.8ms即可符合视觉暂留要求。 此外一次驱动一列或一行时需外加驱动电路提高电流,否则LED亮度会不足。
16x16点阵共需要256个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,只 要对其顺向偏压,即对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。例如如果想 使左上角LED点亮,则Y0=1,X0=0即可。
三、截图及说明
LED点阵程序设计与实现中运行编译脚本进行编译
#./build-module.sh
10
运行测试程序1、2、3截图如下所示,test1 此程序将扫描整个点阵点,以测试坏点,然后显示不同方向的“奥”字,test2 此测试程序是一个很接近实用的Demo广告屏。点阵屏将循环显示“奥尔斯电子”,test3 程序将循环显示“奥尔斯电子;火星小绿人来了”并加粗显示。
实训总结:
同学***:
通过这一星期的嵌入式系统实训,对嵌入式系统有了较系统的认知。对VMware Workstation虚拟机有了一个更深一步的学习和了解,同时对OURS-A8RP的结构也有一定的了解。掌握了各IP的设置、一些命令的使用,也学会了SD格式化烧写、交叉编译、程序测试等方法,了解了有关嵌入式的特有名词概念、原理、常用命令等。同时对于驱动程序设计、外设程序设计与实现的一些思想、实施流程有理解并能按步骤运行出结果。
实训过程中,我和小组成员张金娥团结合作,张金娥主要负责PC机上的操作,我负责检查她写出的命名以保证正确性,同时负责开发机与PC机之间的各种连线,检查串口线、网线是否正常,运行程序等工作。在此期间,我们常常会遇到问题,有时候真的会失去耐心,好
11
在组员之间互相鼓励。同时,这次也让我们又一次体会到虚心请教的重要性,很多时候我们组解决不了问题时都是找老师和同学帮忙。做实验时,我们应该一步一步脚踏实地认真的做,回报我们的不止是实验结果,同时也能学会处事的方法。
同学***:
通过嵌入式系统的实训,我进一步了解了嵌入式系统的概念以及其的工作原理。嵌入式系统为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。显而易见它和我们平常所认知的计算机系统有着不同的含义,当然我们平常所认知的操作系统是一种系统软件,而嵌入式系统它是集系统的应用软件与硬件于一体,而且具有软件代码小、高度自动化、响应速度快等特点,特别适合于要求实时和多任务的体系。
从工作的角度来看,嵌入式系统在当今社会也有着非常重大的意义而且有着非常光明的前景。嵌入式系统应用领域十分的广泛,对于我们来说,计算机专业、通信专业、电子信息工程和电子技术等专业的学生都比较适合向嵌入式的发展。
虽然此次实训只是简单的接触了一下,包括编译环境的配置,还有Bootload与内核的编译,已经点阵的实现,但是已经感觉到了其的博大精深,进而更进一步的认识了微机原理的重要性,也深刻的认识的每一门课程都是一门学问,都得认真对待和学习。
12
因篇幅问题不能全部显示,请点此查看更多更全内容