学 号: 140
嵌入式系统设计与应用
实习报告
嵌入式 linux 设计与应用
学 生 姓 名
班
成
级
绩
计算机与信息工程学院
2017 年 12 月 9 日
前 言
近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在
通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无
疑成为当前最热门最有发展前途的 IT 应用领域之一。
嵌入式 Linux 嵌入式 Linux 是以 Linux 为基础的嵌入式作业系统,它被广
泛应用在移动电话、个人数字助理(PDA)、媒体播放器、消费性电子产品以及
航空航天等领域中。嵌入式 linux 是将日益流行的 Linux 操作系统进行裁剪修改,
使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式 linux 既继承了
Internet 上无限的开放源代码资源,又具有嵌入式操作系统的特性。嵌入式 Linux
的特点是版权费免费;购买费用媒介成本技术支持全世界的自由软件开发者提供
支持网络特性免费,而且性能优异,软件移植容易,代码开放,有许多应用软件
支持,应用产品开发周期短,新产品上市迅速,因为有许多公开的代码可以参考
和移植,实时性能 RT_Linux Hardhat Linux 等嵌入式 Linux 支持,实时性能稳定
性好安全性好。。
本次设计是采用三星公司的 64 位芯片 S5PC100,是 iPhone 3GS 的主 CPU,
采用 ARM v7 的 Cortex-A8 内核,运算能力强劲,是新一代高性能消费电子产品
的理想选择。
关键词:ARM Cortex-A8 S5PC100 Linux
目录
一、系统简介....................................................................................................... 1
二、镜像烧写....................................................................................................... 1
Tftp 配置:...................................................................................................1
nfs 服务器配置:............................................................................................ 3
内核镜像的下载与烧写:.............................................................................. 4
文件系统镜像的下载与烧写:...................................................................... 5
三、文件系统的移植........................................................................................... 5
根文件系统制作:.......................................................................................... 5
NFS 测试:......................................................................................................7
制作 jffs2 文件系统:..................................................................................... 7
四、UDEV 的移植............................................................................................... 8
五、LED 驱动编写与测试.................................................................................10
六、Android 应用程序开发基础——简单音频播放器................................... 10
源文件:Main.java..................................................................................... 10
源文件:main.xml...................................................................................... 13
七、心得体会..................................................................................................... 14
一、系统简介
嵌入式系统硬件设备包括嵌入式处理器和外围设备。其中,嵌入式处理器(CPU)是嵌
入式系统的核心部分,它与通用处理器最大的区别在于,嵌入式处理器大多工作在为特定用
户群所专门设计的系统中,它将通用处理器中许多由板卡完成的任务集成到芯片内部,从而
有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。如今,全世界嵌
入式处理器已经超过 1000 多种,流行的体系结构有 30 多个系列,其中以 ARM、PowerPC、
MC 68000、MIPS 等使用得最为广泛。
外围设备是嵌入式系统中用于完成存储、通信、调试、显示等辅助功能的其他部件。目
前常用的嵌入式外围设备按功能可以分为存储设备(如 RAM、SRAM、Flash 等)、通信
设备(如 RS-232 接口、SPI 接口、以太网接口等)和显示设备(如显示屏等)3 类。
嵌入式系统软件组成大致如下图所示:
应用层
驱动层
驱动层
二、镜像烧写
Tftp 配置:
1. 配置服务器端
使用以下的命令,安装 TFTP 服务。
install
tftp-hpa
tftpd-hpa
xinetd
linux@farsight:~$ sudo apt-get
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
推荐安装的软件包:
inet-superserver
下列【新】软件包将被安装:
tftp-hpa tftpd-hpa xinetd
共升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 9 个软件未被升级。
需要下载 198kB 的软件包。
解压缩后会消耗掉 631kB 的额外空间。
获取:1 http://archive.ubuntu.com intrepid/main tftp-hpa 0.48-2.2ubuntu1 [24.5kB]
获取:2 http://archive.ubuntu.com intrepid/main tftpd-hpa 0.48-2.2ubuntu1 [35.2kB]
获取:3 http://archive.ubuntu.com intrepid/main xinetd 1:2.3.14-7ubuntu1 [139kB]
下载 198kB,耗时 14s (13.8kB/s)
正在预设定软件包 ...
1
选中了曾被取消选择的软件包 tftp-hpa。
(正在读取数据库 ... 系统当前总共安装有 108543 个文件和目录。)
正在解压缩 tftp-hpa (从 .../tftp-hpa_0.48-2.2ubuntu1_i386.deb) ...
选中了曾被取消选择的软件包 tftpd-hpa。
正在解压缩 tftpd-hpa (从 .../tftpd-hpa_0.48-2.2ubuntu1_i386.deb) ...
选中了曾被取消选择的软件包 xinetd。
正在解压缩 xinetd (从 .../xinetd_1%3a2.3.14-7ubuntu1_i386.deb) ...
正在处理用于 man-db 的触发器...
正在设置 tftp-hpa (0.48-2.2ubuntu1) ...
正在设置 tftpd-hpa (0.48-2.2ubuntu1) ...
正在设置 xinetd (1:2.3.14-7ubuntu1) ...
*
Stopping
*
Starting
[ OK ]
[ OK ]
internet
internet
superserver
superserver
xinetd
xinetd
2. 修改配置文件
在/etc/default 下修改 tftp 服务的配置文件 tftpd-hpa:
linux@farsight:~$ sudo vim /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
说明:修改项,其中 TFTP_DIRECTORY 处可以改为你的 tftp-server 的根目录,参数-c 指
定 了可以创建文件。
创建文件夹/tftpboot, 修改权限为 666
3. 手动启动/停止服务
用户可以通过手动去启动/停止 TFTP 服务器,修改配置文件后必须重新启动服务。
a) 停止包括 tftp 在内的网络服务,查看状态显示为“not running”。
linux@farsight:~$ sudo service tftpd-hpa
tftpd-hpa stop/waiting
linux@farsight:~$ sudo service tftpd-hpa
tftpd-hpa start/running, process 9948
stop
start
b) 启动包括 tftp 在内的网路服务,查看状态显示为“running”。
linux@farsight:~$ sudo service tftpd-hpa
*
Starting
[ OK ]
start
internet
status
superserver
xinetd
linux@farsight:~$ sudo service tftpd-hpa
tftpd-hpa start/running, process 9875
c) 重新启动包括 tftp 在内的网络服务。
linux@farsight:~$ sudo service tftpd-hpa
tftpd-hpa start/running, process 9953
restart
2
nfs 服务器配置:
1. 配置服务器端
使 用 以 下 的 命 令 , 安 装 NFS 服 务 器 程 序 软 件 包 。 并 创 建 /etc/exports 和
/etc/default/nfs-kernel-server 配置文件,等待用户在完成 NFS 安装之后,配置将要共享的资
源。
linux@farsight:~$ sudo apt-get
[sudo] password for linux:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列【新】软件包将被安装:
nfs-kernel-server
install
共升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 8 个软件未被升级。
需要下载 152kB 的软件包。
解压缩后会消耗掉 385kB 的额外空间。
获 取 : 1 http://archive.ubuntu.com intrepid-updates/main nfs-kernel-server 1:1.1.2-4ubuntu1.1
nfs-kernel-server
[152kB]
下载 152kB,耗时 3s (43.1kB/s)
选中了曾被取消选择的软件包 nfs-kernel-server。
(正在读取数据库 ... 系统当前总共安装有 108565 个文件和目录。)
正在解压缩 nfs-kernel-server (从 .../nfs-kernel-server_1%3a1.1.2-4ubuntu1.1_i386.deb) ...
正在处理用于 man-db 的触发器...
正在设置 nfs-kernel-server (1:1.1.2-4ubuntu1.1) ...
Creating config file /etc/exports with new version
Creating config file /etc/default/nfs-kernel-server with new version
* Starting NFS common utilities
* Exporting directories for NFS kernel daemon...
* Starting NFS kernel daemon
[ OK ]
[ OK ]
[ OK ]
可以使用 netstat 命令检查 NFS 端口是否已经打开,NFS 端口(2049)以及 SUNRPC 端
口(111)已处于监听状态。
2. 配置 NFS 资源
配置 NFS 服务器的关键也就是配置该文件。配置文件中一行即为一条配置项,用于指明
网络中的“哪些客户端”共享“哪些目录资源”。导出资源配置项格式如下所示。
< Share Directory >
……
其中,表示服务器中导出的共享资源路径,必须使用绝对路径名;
表示客户端主机标识,可以使用表 24.1 列出的方式指定主机名,如果是多个主机标识,需
要使用空格隔开;表示赋予每个客户端主机的访问权限。以下为一个配置样本。
linux@farsight:~$ cat
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
# Example for NFSv2 and NFSv3:
/etc/exports
3
# /srv/homes hostname1(rw,sync) hostname2(ro,sync)
#
/source/rootfs
*(rw,sync,no_root_squash)
3. 手动启停 NFS 服务
通常,NFS 服务的守护进程是以持续监听端口的独占方式运行。用户通过使用 NFS 的
初始化脚本,可以手动启停 NFS 服务。系统管理员在调整共享资源之后,一定要重新启动
NFS 服务,以便使修改的配置生效。
(1)启动 NFS 服务
linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server
* Exporting directories for NFS kernel daemon...
[ OK ]
* Starting NFS kernel daemon
[ OK ]
(2)停止 NFS 服务
linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server
[sudo] password for linux:
* Stopping NFS kernel daemon
[ OK ]
[ OK ]
* Unexporting directories for NFS kernel daemon...
(3)重新启动 NFS 服务
linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server
* Stopping NFS kernel daemon
start
stop
restart
*
*
*
[ OK ]
Unexporting
[ OK ]
Exporting
[ OK ]
Starting
[ OK ]
directories
directories
for
for
NFS
NFS
kernel
kernel
NFS
kernel
daemon...
daemon...
daemon
(4)查看 NFS 服务当前状态
NFS 服务开启时显示 nfsd running,关闭是显示 nfs not running。
linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server
nfsd running
linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server
nfsd not running
status
status
内核镜像的下载与烧写:
烧写内核镜像到 nand flash
拷贝/image/zImage 到虚拟机/tftpboot 目录下
20008000
# tftp
# nand
erase
# nand write
100000
20008000
300000
100000
300000
zImage
4
文件系统镜像的下载与烧写:
flash
烧写文件系统镜像到 nand
拷贝 rootfs.cramfs 到虚拟机/tftpboot 目录下
20008000
# tftp
# nand
erase
# nand write
rootfs.cramfs
400000
400000
20008000
400000
400000
设置启动参数
bootdelay
bootcmd
bootargs
# setenv
# setenv
# setenv
# saveenv
3
nand
root=/dev/mtdblock2
read
20008000 100000
300000\; go 20008000
init=/linuxrc
console=ttySAC0,115200
三、文件系统的移植
根文件系统制作:
1.源码下载
我们选择的版本是 busybox-1.17.3.tar.bz2 下载路径为:
http://busybox.net/downloads/
2.解压源码
$ tar
3.进入源码目录
$ cd
4.配置源码
$ make menuconfig
Busybox Settings --->
Build Options --->
busybox-1.17.3.tar.bz2
busybox-1.17.3
xvf
[*] Build BusyBox as a static binary (no shared libs)
[ ] Force NOMMU build
[ ] Build with Large File Support (for accessing files > 2 GB)
(arm-none-linux-gnueabi-) Cross Compiler prefix
() Additional CFLAGS
install
5.编译
$ make
6.安装
busybox 默认安装路径为源码目录下的_install
$ make
7.进入安装目录下
$ cd
$ ls
bin
usr
8.创建其他需要的目录
_install
linuxrc
sbin
5