根据IEEE(电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。一般的嵌入式系统都由以下几部分组成:
1.特定的应用程序 比如QQ ,浏览器,游戏
2.嵌入式库支持 比如标准C库,嵌入式qt库
3.根文件系统 根文件系统是内核启动后挂载的第一个文件系统
4.操作系统内核 Linux内核
5.Bootloader BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。Bootloader在嵌入式系统中的作用相当于x86机器中的BIOS和GRUB。比如u-boot
6.硬件平台 Arm mips powerpc
要搭建一个嵌入式开发平台必须具备以下工具:
1.嵌入式开发板,在这里我们使用三星的SMDK6410开发板,主控芯片S3C6410,而S3C6410采用的arm11架构
2.个人计算机,推荐使用redhat5.5操作系统
接下来搭建嵌入式交叉开发环境
一、 配置minicom
Minicom是一个运行在开发主机上的程序,通过这个程序可以观察开发主机串口的数据传输,首先用串口线把PC机的串口和开发板的串口连接,对于一个嵌入式设备来说,一般标准输入、标准输出、标准错误都是串口,所以这样的话我们就可以利用minicom来观察开发板的运行情况,并且还可控制开发板。详细的minicom配置过程如下:
在开发主机终端输入minicom –s,然后按照下面进行配置
#minicom-s
+-----[configuration]-- ------+
|Filenames and paths |
|File transfer protocols |
|Serial port setup |
|Modem and dialing |
|Screen and keyboard |
|Save setup as dfl |
|Save setup as.. |
|Exit |
|Exit from Minicom |
+-------------------------------------+
选择Serialport setup
设置参数如下:
+----------------------------------------------------+
| A - Serial Device : /dev/ttyS0 |
| B - Lockfile Location : /var/lock |
|C - Callin Program : |
|D - Callout Program : |
|E - Bps/Par/Bits : 115200 8N1 |
| F - Hardware Flow Control : No |
|G - Software Flow Control : No |
| |
| Change which setting? |
+---------------------------------------------------+
选择Savesetup as dfl设置保存为默认
+-----[configuration]---------+
|Filenames and paths |
|File transfer protocols |
|Serial port setup |
| Modem and dialing |
|Screen and keyboard |
|Save setup as dfl |
|Save setup as.. |
|Exit |
|Exit from Minicom |
+-------------------------------------+
最后选择Exit推出minicom,以后运行minicom只需要在主机终端中输入minicom即可
二、把u-boot-movi.bin写到SD卡
u-boot-movi.bin是一个已经编译好的bootloader,并且是SD卡启动的,也就是说这个程序要烧写到SD卡后才能运行。详细的SD卡烧写过程如下:
1 把SD卡插入PC机
2 用fdisk –l查看SD卡对应的设备文件,一般为/dev/sdb
3卸载SD卡分区,umount /dev/sdb1
4 把u-boot-movi.bin写入SD卡,<path>write_sd /dev/sdb u-boot-movi.bin 注:<path>为write_sd工具所在的目录
备注:(1)write_sd为smdk6410_lzy/tools文件夹下的工具write_sd.
(2)u-boot-movi.bin为smdk6410_lzy/images文件夹下的往sd卡里下载的uboot文件,注意写它的绝对路径。
5 把SD卡插入开发板,打开开发板电源,在minicom中观察SD卡启动过程,如启动正确则输出以下信息:
三、配置tftp服务
tftp服务是开发主机和开发板之间通信的一种方法,tftp客户端在bootloader中已经集成,tftp服务器在开发主机上,详细的tftp服务配置过程如下:
1打开tftp服务配置文件,vim /etc/xinetd.d/tftp,把该文件中disable对应的yes改为no ,这样便打开了tftp服务
2重新启动tftp服务器,service xinetd restart
四、把内核镜像下载到开发板的DDR内存中
1把zImage拷贝到tftp服务器的下载路径,cp <path>/zImage /tftpboot
2配置u-boot环境变量,在[u-boot-sd]#界面操作
[u-boot-sd]# set serverip 192.168.1.xxx(xxx代表开发主机的ip地址)
[u-boot-sd]# sav 保存环境变量
3下载内核到开发板并且启动内核, 在u-boot的终端操作
[u-boot-sd]# tftp 50008000 zImage //把内核下载到开发板的内存中
[u-boot-sd]# bootm 50008000 //启动开发板中的linux内核
若启动成功的话LCD上会出现小企鹅
注意:zImage是已经编译好的linux内核镜像
五、配置nfs服务
nfs服务在linux下用来共享资源的,利用这个服务我们可以在开发主机上为开发板创建一个共享目录,让这个共享目录作为开发板的根文件系统,详细的配置过程如下:
1创建共享目录,mkdir /nfsroot
2 修改共享目录权限,chmod 777 /nfsroot
3打开nfs服务配置文件,vim /etc/exports,在该文件里添加:/nfsroot *(rw,sync,no_root_squash)
4重新启动nfs服务,service nfs restart
六、搭建根文件系统
根文件系统是linux内核启动后挂载的第一个文件系统,这个文件系统可以建立在开发板上,也可以建立在开发主机上,如果建立在开发主机上就叫做网络文件系统,在这里我们使用网络文件系统,搭建过程如下:
1 把已经做好的根文件系统解压到共享目录下,tar -xvf rootfs.tar -C /nfsroot
2 设置u-boot环境变量,告诉开发板根文件系统在网络上,等内核启动后挂载网络文件系统,这个操作需要在[u-boot-sd]#界面操作,如下:
[u-boot-sd]# set bootargs "root=/dev/nfs nfsroot=192.168.1.xxx:/nfsroot ip=192.168.1.20 console=ttySAC0,115200"
[u-boot-sd]# sav 保存环境变量
3下载linux内核
[u-boot-sd]# tftp 50008000 zImage
4启动内核
[u-boot-sd]# bootm 50008000
若启动成功的话LCD会出现图形界面,并且在minicom中会出现shell终端如下:
[root@uplooking# ]