数码相框毕业设计论文 - 图文
更新时间:2024-06-13 09:26:01 阅读量: 综合文库 文档下载
- 数控技术毕业设计论文推荐度:
- 相关推荐
毕业论文
题目 基于ARM和Linux的嵌入式数码相框系统设计
一、背景
随着PC时代数码技术的发展,数码相机以其低廉的价格,方便的操作成为摄影器材未来的发展方向。目前,很多家庭都持有数码相机,一次拍摄下来的照片往往会有上百张,使用PC机来查看拍摄下来的图片,操作繁琐,而且依赖于PC机。
作为数码相机的一种附属产品,数码相框不仅具有传统相框的特点,而且可以直接从数码相机中选择心仪的照片,定时更新照片。数字相框可以摆放在家居显眼之处,成为现代家庭一道靓丽的风景线。
数码相框是展示数码照片而非纸质照片的相框。众多的数码摄影产生的相片保存起来后,查看过程繁琐不方便,大量打印出来又非常浪费,如果用数码相框直接插上相机的存储卡展示照片,就非常酷了。数码摄影必然推动数码相框的发展,因为据调查全世界打印的数码相片不到35%。
二、系统开发目标
根据实际应用的特点对产品进行完整的需求分析,形成比较完善的总体设计方案。同时,达到能具备Linux操作系统下简单的设备驱动程序开发、图形用户接口设计的能力。此外,掌握基本的系统功能及性能测试技术,从而具备比较全面的嵌入式应用系统开发能力。另外,作为一个消费类电子产品,数码相框的设计必须考虑以下因素:
(1)用户接口友好、操作方便。由于该产品的使用者大多是非专业人士,用户接口是否清晰明了、操作是否简捷方便成为用户是否能迅速的接受此产品的重要因素。
(2)系统兼容性强。数码相框应能识别和处理当前数码相机主要的图像格式,能访问主流的外部半导体存储卡。
(3)稳定可靠。作为消费类电子产品。必须通过比较严格的功能测试,以保证用户在使用过程中,不会因为程序错误而丧失对产品的信心。
三、所需环境及设备
(1)以GEC2440开发板作为目标机,使用安装了Windows XP 的PC机作为宿主机,并在宿主机上安装虚拟机软件,虚拟机里安装的是Red Hat EnterpriseLinux5作为开发环境。
(2)硬件部分:GEC2440模仿三星smdk2440,以ARM920T为内核,控制辅助设备。基本端口包括以太网接口,USB接口,还有两个RS232的串口。A/D和D/A模块主要用于现场数据的采集与控制信号的输出。DC/DC模块主要负责整个系统的供电。
四、系统概要设计
硬件部分:
系统的主要硬件包括嵌入式开发平台GECC2440、LCD屏、人机交互界面、外部存储介质接口电路。大致可以分为三块:
(1)LCD屏用来展示图片、输出信息。
(2)人机交互界面设定各个模式的播放形式、输入信息。
(3)外部存储介质接口电路用来提供外部的存储介质的接口。 软件部分:
(1)交叉环境的搭建:用GNU工具链作为交叉编译器。 (2)超级终端。
五、系统详细设计
(1)嵌入式Linux开发环境的建立具体步骤过程:交叉环境的具体建立;Qt应用
2
界面代码的编写;环境的调试、仿真运行、NFS的配置等。
(2)系统软硬件的的连接工作:
bootloader的移植、linux内核配置移植、驱动移植、根文件系统制作、带库的根文件系统的制作及各阶段的调试、QT界面的设计。
(3)运用QT 及网络编程实现系统设计界面的可视化,及网络的连接问题。 (4)对预期的目标功能,编写代码,调试仿真、运行。 (5)对应用程序开发的代码编写与调试运行。
六、调试分析及分工
对开发过程中遇到的问题,时时记录,分析解决,保证阶段任务能够顺完成。张军委完成环境的搭建、bootloader的烧写,usb驱动的移植及调试。肖奇超完成内核的裁剪与移植、Qt应用程序的设计。
测试记录要细致。
七、时间安排及所用到的参考资料
第一二周前期资料调查整理,准备开发板及有关环境的搭建与测试。第三周系统概要设计,对硬件和软件部分的分析,主要是对设计的目标功能的预计需求,作好交叉编译环境的建立与运行等。第五六周完成详细系统设计。包括具体的代码的编写,内核驱动和网络驱动的完成,以及应用程序的开发等。第七周完成应用程序代码的编译运行仿真,测试等
参考资料:
【1】张勇.ARM原理与C程序设计.西安:西安电子科技大学出版社, 2009年4月 【2】韦东山.嵌入式Linux应用软件开发完全手册.北京:人民邮电出版社,2008年8月
【3】LUPA. Linux软件工程师实用教程.北京:科学出版社,2011年11月修订版 【4】成洁,卢紫毅.Linux窗口程序设计.北京:清华大学出版社,2008年11月 【5】粤嵌技术中心.GEC2440开发板说明文档,GEC开发板实验指导手册. 【6】http:\\\\www.trolltech.com. qt开发白皮书,qt帮助文档 【7】Daniel Solin著,袁鹏飞译.24小时学通Qt编程.北京:人民邮电出版社2000年10月
【8】百度文库,中国IT实验室网站,ChinaUnix网站
摘 要
嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可以配置,通常对功能、可靠性、成本、体积、功耗有严格约束的一种专用计算机系统。当前先进的嵌入式系统,通常由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及嵌入式应用程序四个部分组成,实计算机基于ARM Linux和Qt/Embedded的嵌入式数码相框系统的研究和实现应用系统,称为嵌入式系统、实时系统或者嵌入式实时系统。
根据目前国内外对嵌入式的研究和开发,结合实际的实验条件,本项目使用硬件平台广东省嵌入式软件公共技术中心开发的GEC2440开发板作为目标机,使用安装
3
Windows XP的PC机作为宿主机,并在宿主机Windows平台上安装了一个虚拟机软件,虚拟机里安装的是Red Hat EnterpriseLinux 5作为开发环境。主要实现工作包括:在宿主机上安装交叉编译工具,建立交叉编译环境,配置tftp、DNW(或超级终端)以建立嵌入式软件平台。进行一个可以浏览与管理图片功能,且能进行幻灯片播放的课程设计。针对项目需求实现对驱动程序的完善和移植,制作适合此开发板的根文件系统,最后将基于qt设计的应用程序程植到开发板上,实现个人图片的掌上管理。
关键词:嵌入式系统;GEC2440开发板;虚拟机环境;移植。
Abstract
Embedded system is used as the center, take the computer technology as the foundation, software and hardware can be configured, usually to the function, reliability, cost, volume, power consumption have strict constraints of a kind of special computer system. The current advanced Embedded system, usually by Embedded microcontroller processor,peripheral hardware equipment, Embedded operating system and Embedded application four parts, real computer based on ARM Linux and Qt/Embedded Embedded digital photo frame system research and
4
implementation application system, called the Embedded system, real-time systems or Embedded real-time system.
According to the current domestic and foreign research and development of embedded, combining with the condition of experiment, this project use hardware platform embedded software public technology center of guangdong province the development of GEC2440 development board as the target machine, use Windows XP install the PC as the host machine, and in the host machine Windows platform installed a virtual machine software, virtual machine is installed, the Red Hat EnterpriseLinux 5 as a development environment. Main realization work include: in the host machine installation cross-compiling tools, set up cross-compiling environment, the configuration TFTP, DNW (or super terminal) to establish embedded software platform. A can browse pictures and management function, and can play a course design slides. For the project requirements to achieve the perfect for drivers and transplantation, making for the development of the board root filesystem, finally will be based on qt application ChengZhi designed to development board, realize the palm of personal pictures !
Keywords: embedded system;GEC2440 development board;virtual machine environment;the transplant.
5
目 录
摘 要 .......................................................................................................................................... 3 Abstract ...................................................................................................................................... 4 目 录............................................................................................................................................ 6 第一章 绪论 ........................................................................................................................ 8 第二章 所需环境及设备................................................................................................................ 9
2.1硬件部分:...................................................................................................................... 9
2.1.1 GEC2440开发板介绍 ............................................................................................. 9 2.2软件部分 ....................................................................................................................... 10
2.2.1 Linux系统平台介绍:........................................................................................ 10
2.2.2 QT/Embeded界面介绍: ...................................................................................... 10
2.3实现思路 ....................................................................................................................... 10 第三章 嵌入式开发环境的搭建 ....................................................................................................11
3.1嵌入式交叉环境的概述 ...................................................................................................11 3.2 交叉编译环境的搭建 ......................................................................................................11 3.3交叉调试环境的搭建...................................................................................................... 12 3.4交叉服务器的搭建 ......................................................................................................... 12 3.5关于交叉调试 ................................................................................................................ 12 3.6关于网络挂载的配置...................................................................................................... 13 第四章 U-boot的移植 ................................................................................................................ 16
4.1建立工作目录 ................................................................................................................ 16 4.2设置环境 ....................................................................................................................... 16 4.2.1stage1阶段硬件初始化........................................................................................ 16 4.2.2修改时钟............................................................................................................. 16 4.2.3重定位u-boot代码 ............................................................................................. 18 4.3进入目录配置编译 ......................................................................................................... 21 4.4 bootloader的烧写 ....................................................................................................... 21 第五章 Linux内核的移植 ........................................................................................................... 23
5.1 准备工作 ...................................................................................................................... 23 5.2 修改内核源码顶层 ........................................................................................................ 23 5.3 修改机器码 ................................................................................................................... 23
5.4 设置 flash 分区 .......................................................................................................... 24 5.5 配置编译内核 ............................................................................................................... 25 5.6 Linux内核编译............................................................................................................. 29 5.7 使用minicon远程访问目标板 ....................................................................................... 29 5.8下载到开发板中测试...................................................................................................... 30 第六章 驱动的移植..................................................................................................................... 31
6.1关于USB驱动移植 ......................................................................................................... 31
6.2 关于LCD驱动移植 ........................................................................................................ 32 6.3关于触摸板驱动移植...................................................................................................... 34 第七章 制作根文件系统.............................................................................................................. 37
7.1工作目录 ....................................................................................................................... 37
7.2创建节点 ....................................................................................................................... 37 7.3拷贝动态链接库............................................................................................................. 37
7.4交叉编译busybox .......................................................................................................... 38 7.5交叉编译bash(交互程序) .......................................................................................... 38 7.6建立系统配置文件 ......................................................................................................... 39 7.7添加一个用户程序 ......................................................................................................... 40 7.8带QTE库的根文件系统制作 ........................................................................................... 41 7.9手动校准 ....................................................................................................................... 42 7.10根文件系统烧入 ........................................................................................................... 43 第八章 基于qt3平台的应用程序................................................................................................ 44
8.1新建一个数码相框工程 .................................................................................................. 44 8.2函数主要源代码............................................................................................................. 45 8.3在主机上运行 ................................................................................................................ 56 8.4交叉编译生成目标文件 .................................................................................................. 56 8.5在目标板上运行............................................................................................................. 56 第九章 结束语............................................................................................................................ 58 致谢 ........................................................................................................................................... 58 参考文献 .................................................................................................................................... 59 附录 ............................................................................................................... 错误!未定义书签。
7
第一章 绪论
根据实际应用的特点对产品进行完整的需求分析,形成比较完善的总体设计方案。同时,达到能具备Linux操作系统下简单的设备驱动程序开发、图形用户接口设计的能力。此外,掌握基本的系统功能及性能测试技术,从而具备比较全面的嵌入式应用系统开发能力。另外,作为一个消费类电子产品,数码相框的设计必须考虑以下因素:
1、用户接口友好、操作方便。
2、系统兼容性强。数码相框应能识别和处理当前数码相机主要的图像格式,能访问主流的外部半导体存储卡。
3、稳定可靠。
随着PC时代数码技术的发展,数码相机以其低廉的价格,方便的操作成为摄影器材未来的发展方向。目前,很多家庭都持有数码相机,一次拍摄下来的照片往往会有上百张,使用PC机来查看拍摄下来的图片,操作繁琐,而且依赖于PC机。
作为数码相机的一种附属产品,数码相框不仅具有传统相框的特点,而且可以直接从数码相机中选择心仪的照片,定时更新照片。数字相框可以摆放在家居显眼之处,成为现代家庭一道靓丽的风景线。
数码相框是展示数码照片而非纸质照片的相框。众多的数码摄影产生的相片保存起来后,查看过程繁琐不方便,大量打印出来又非常浪费,如果用数码相框直接插上相机的存储卡展示照片,就非常酷了,数码摄影必然推动数码相框的发展,因为据调查全世界打印的数码相片不到35%。
第二章 所需环境及设备
2.1硬件部分:
以GEC2440开发板作为目标机,使用安装了Windows XP 的PC机作为宿主机,并在宿主机上安装虚拟机软件,虚拟机里安装的是Red Hat EnterpriseLinux5作为开发环境。GEC2440模仿三星smdk2440,以ARM920T为内核,控制辅助设备。基本端口包括以太网接口,USB接口,还有两个RS232的串口。A/D和D/A模块主要用于现场数据的采集与控制信号的输出。DC/DC模块主要负责整个系统的供电。
系统的主要硬件包括嵌入式开发平台GECC2440、LCD屏、人机交互界面、外部存储介质接口电路。大致可以分为三块:
(1)LCD屏用来展示图片、输出信息。
(2)人机交互界面设定各个模式的播放形式、输入信息。 (3)外部存储介质接口电路用来提供外部的存储介质的接口. 2.1.1 GEC2440开发板介绍
使用硬件平台广东省嵌入式软件公共技术中心开发的GEC2440开发板作为硬件平台,GEC2440是模仿广为流行的三星smdk2440开发板而设计的低价位开发板,下面对GEC2440做一些简单介绍。
GEC2440的设计以ARM920T为内核的三星SC32440是控制核心,负责控制所有辅助设备。存储器采用SDRAM和FLASH两种类型,能满足系统运行和调试的需要。基本端口包括以太网接口,USB接口,还有两个RS232的串口。A/D和D/A模块主要用于现场数据的采集与控制信号的输出。DC/DC模块主要负责整个系统的供电。扩展接口考虑了系统的可扩展性。开发板外观布局如图2.1
图2.1GEC2440开发板外观图
9
2.2软件部分
2.2.1 Linux系统平台介绍:
Linux是一种类UNIX操作系统。兼容POSIX 1003.1标准,并包含了UNIX System V和BSD 4.3的大部分特征。它充分体现了操作系统的方展趋势,即开放、稳定、标准。Linux具有如下的特征:
(1)真正的多用户、多任务操作系统。
(2)符合POSIX(可移植操作系统接口)标准。 (3)采用页式存储管理。 (4)支持动态链接库。
(5)提供具有内置安全措施的分层文件系统。 (6)提供Shell命令解释程序和编程语言。
(7)提供强大的管理功能,包括远程管理功能。 (8)提供内核编程接口。 (9)具备图形用户接口。
(10)具备大量的实用程序和通信、联网工具。
(11)大量高级程序设计语言已经被移植到Linux系统上,因此它是理想的应用程序开发平台。
2.2.2 QT/Embeded界面介绍:
当前嵌入式Linux在手机、PDA等手持信息设备领域的应用十分广泛。各种手持设备是否拥有图形用户界(GUI)己经成为其人机交互技术的关键体现,所以一个十分友好的图形用户界面(GUI)是必不可少的。嵌入式GUI是嵌入式系统广泛应用的人机交互接口。嵌入式系统有限的硬件资源要求嵌入式GUI必须简单、直观、可靠、占用资源小且反应快速。由于嵌入式系统硬件本身的多样性,嵌入式GUI应具备高度可移植性与可裁减性。
2.3实现思路
首先在本地计算机上编写程序;然后通过在本地进行交叉编译生成目标平台上可以运行的二进制代码格式;最后再下载到目标平台上的特定位置上运行。
(1)交叉环境的搭建:用GNU工具链作为交叉编译调试器。 (2)终端使用的是DNW和secure CRT。
10
第三章 嵌入式开发环境的搭建
3.1嵌入式交叉环境的概述
嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。所以需要一个交叉环境来实现:
(1) 首先在通用计算机上编写程序;
(2) 然后通本地编译或者交叉编译生成目标浃台上可以运行的二进制代码格式; (3) 最后再下载到目标平台上的特定的位置上去运行。
3.2 交叉编译环境的搭建
在一种平台上编译出能在另一种平台(体系结构不同)上运行的程序,在PC平台(X86CPU)上编译出能在arm平台上的程序,编译后的程序在X86上是不能运行的,必须放到arm上才能运行,用来编译这种程序的编译器叫做交做编译器。我们用到的是arm-linux-gcc。
嵌入式软件开发需要交叉开发环境,这是其开发的一显著特点,交叉编译器只是交叉开发环境的一部分,我们说的交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,常采用宿主机----目标机模式。
关于交叉工具链:
它是交叉编译环境所需工具的集合体,是所需软件(binuntials、gcc与glibc等)的安装载体,主要包括:交叉编译器(arm-linux-gcc)、交叉汇编器(arm-linux-as)、交叉链接器(arm-linux-ld)、各种操作所依赖的库及用于处理可执行程序和库的一些基本工具(如arm-linux-strip)。
交叉环境如图所示:
图3.2 1
安装编译器(交叉工具链)软件:eabi-4.1.2.tar.bz2 安装准备 #mkdir /usr/local/arm
#cp eabi-4.1.2.tar.bz2 -C /usr/local/arm #mv eabi 4.1.2
11
添加环境变量:
#vi /etc/bashrc
在文件结尾添加 export PATH= /usr/local/arm/4.1.2/bin:$PATH 使配置生效:
#source /etc/bashrc
3.3交叉调试环境的搭建
源码包gdb-6.5.tar.bz2的安装cd. (1)新建编译目录
#mkdir /home/build_gdb #cd /home/build_gdb
将gdb-6.5.tar.bz2拷贝到/home/build_gdb (2)解压gdb-6.5.tar.bz2
#tar jxf gdb-6.5.tar.bz2c (3)配置
#cd gdb-6.5
#./configure --target=arm-linux --prefix=/usr/local/arm/4.1.2/ 此步遇到的问题是:./configure—target =arm-linux没有那个文件或目录,是因为configure的权限问题,在运行configure前chmod 755 configure) (4)编译
#make (5)安装
#make install (在/usr/local/arm/4.1.2/bin/目录下已生成arm-linux-gdb工具)。
3.4交叉服务器的搭建
源码包:gdb-6.5/gdb/gdbserver (1)进入
#cd gdb-6.5/gdb/gdbserver (2)配置
#chmod u+x configure
#./configure --host=arm-linux (3)编译
#make CC=/usr/local/arm/4.1.2/bin/arm-linux-gcc (完了在当前目录生成gdbserver、gdbreplay等)
这里遇到的问题是:没有使用绝对路径,导致了无法生成 (4)下载安装到目标板(gdbserver)
gdbserver放到目标板的/bin目录下。
3.5关于交叉调试
(1)新建测试目录
#mkdir /root/test #cd /root/test
12
(2)编辑文件
#vim debug.c (3)交叉编译
#arm-linux-gcc -g debug.c -o debug (加上-g选项) (4)下载到目标板(将整个代码目录)
#mkdir arm_debug
#cd arm_debug //将目标程序放进arm_debug (5)启动调试服务器(目标板上进行)
成功后便开始侦听本地调试端口,可以看到如下信息: bash-4.0# gdbserver 172.22.60.222:1234 debug Process try created; pid = 992 Listening on port 1234
(172.22.60.222是目标板的IP) (6)启动交叉调试器(在宿主机上进行)
#/root/test (一定要进去代码目录下) #arm-linux-gdb debug
#target remote 172.22.60.222:1234 成功后打印如下:
(gdb) target remote 172.22.60.223:1234 Remote debugging using 172.22.60.223:1234
Remote communication error: Connection reset by peer 然后进行调试。
3.6关于网络挂载的配置
使用NFS服务,将宿主机的一个目录通过网络可以挂载到其他计算机上,并作为它的一个目录,在嵌入式开发中通过NFS可以很方便的将修改的文件通过NFS传输到开发板中去,不用以复的烧写镜像文件。
13
图3.6 1
修改配置文件:
#vim /etc/exports
配置内容为 /root/rootfs 192.168.1.* ()rw.sync,no_root_squash)
[共享的目录][主机名或IP][参数1 参数2 ??]
[共享的目录][IP1(参数1,参数2)][IP2(参数3,参数4)] rw 对共享文件夹可读可写。
sync 所有数据在请求时写入共享。
no_root_squash 使远程用户具备本地root用户所具有的读写权限。 /root/rootfs :是宿主机上共享的文件夹。
192.168.1.* :是所支持的目标板的IP地址,用的*表示该网段的地址都可以访问。
备注:NFS的使有分服务器端和客户端:
服务器端提供要共享的文件,客户端通挂载(mount)实现对共享文件平的访问,例如:
mount 192.168.1.1:/home/nfs/tmp/test
本地NFS服务器端通过读取配置文件/etc/exprots决定对外所共享的文件目录,在客户端的终端中通过NFS方式挂载宿主机目录,例如:
mount -o nolock 192.168.1.1:/home/nfs/tmp/test
客户端卸载所挂载的NFS文件系统,umount命令不能在挂载目录执行,需要离开执行。
umount /tmp/test
宿主机#ifconfig eth0 192.168.1.132
ping 192.168.1.1(ping网关) #service nfs restart
#showmount –e localhost(查看当前对外共享目录) #mount 192.168.1.132:/root/rootfs/ /tmp(本地测试)
客户端ifconfig eth0 192.168.1.132.xxx(与服务器在同一网段):
14
ping 192.168.1.132 –c 5(与服务器联网通连测试) mount -o nolock 192.168.1.132:/root/rootfs /tmp
15
} }
NAND_CHIP_DISABLE; //取消片选信号 return 0; }
(4)修改board/samsung/gec2440/Makefile
在board/samsung/gec2440/Makefile 中添加nand_read.c的编译选项,使他编译到u-boot中:
COBJS := gec2440.o flash.o nand_read.o (5)修改cpu/arm920t/u-boot.lds
在cpu/arm920t/u-boot.lds 中,这个u-boot 启动连接脚本文件决定了u-boot 运行的入口地址,以及各个段的存储位置,这也是链接定位的作用。添加下面两行代码的主要目的是防止编译器把我们自己添加的用于nandboot 的子函数放到4K之后,否则是无法启动的。如下:
.text : {
cpu/arm920t/start.o (.text)
board/samsung/gec2440/lowlevel_init.o (.text) board/samsung/gec2440/nand_read.o (.text) *(.text)
}
4.3进入目录配置编译
配置#make gec2440_config #make
编译结果生成u-boot.bin烧入开发板
4.4 bootloader的烧写
Bootloader是硬件启动的引导程序,是启动操作系统的根本,是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用准备好环境。
使用Flash烧写工具,安装并口驱动程序(GIVEO)后,双击sjff2440.exe 文件,过程如下截图4.4所示:
21
图4.4 1
在提示下,输入3个0,然后等待片刻即完成.。
22
第五章 Linux内核的移植
linux-2.6 内核已经支持 S3C2440 处理器的多种硬件板,由于 S3C2410 跟 S3C2440 同属于 ARM920T 系列芯片,且寄存器等硬件电路基本一致,参考 SMDK2410 参考板来移植 2440 开发板。
5.1 准备工作
建立工作目录,下载内核源码:linux-2.6.30.4.tar.bz2。步骤如下: #mkdir /root/build_kernel #cd /root/build_kernel
#tar jxvf linux-2.6.30.4.tar.gz
解压后会在当前目录下生成一个 linux-2.6.30.4 的内核源码目录
5.2 修改内核源码顶层
修改内核目录树根下的的 Makefile,指明体系结构是 arm,交叉编译工具是 arm-linux-gcc
#vi Makefile
找到 ARCH 和 CROSS_COMPILE,修改 ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/4.1.2/bin/arm-linux-
5.3 修改机器码
在 u-boot-2009.11 的/board/samsun/gec2440/gec2440.c 设置了 MACH_TYPE 的类型为 MACH_TYPE_SMDK2410,查看 u-boot 里的 include/asm-arm/mach-types.h 文件,有下面定义:
#define MACH_TYPE_SMDK2410 193
//针对 2440 的 MACH_TYPE 码的值定义为 193,而 linux 内核源码的 arch/arm/tools/mach-types 文件有如下定义:
smdk2440 MACH_SMDK2440 SMDK2410 193
即 u-boot 和 linux 内核的同样类型的机器码都为 193,那么我们就修改 kernel 的 MACH_TYPE 代码引用部分,确定 kernel 的 MACH_TYPE。 如下:
修改#vim arch/arm/mach-s3c2440/mach-smdk2440.c : //修改文件最后面 将 MACHINE_START(S3C2440, \修改为:
MACHINE_START(SMDK2410, \
修改#vim arch/arm/kernel/head.S //在ENTRY(stext)下添加如下代码 ENTRY(stext) mov r0, #0
mov r1, #0xc1 // MACH_TYPE_SMDK2410值193换成十六进制就是 0xc1 ldr r2, =0x30000100 //Linux kernel parameter
5.4 设置 flash 分区
(1)修改分区信息(默认 8 个分区,具体分区数目可以根据项目而定,本项目初设置为 3 个)。
#vim arch/arm/plat-s3c24xx/common-smdk.c 修改内核分区信息(本示例分设四个分区),让内核知道 nand flash 的分区信息,设置成跟 bootloader 一致,修改如下:
static struct mtd_partition smdk_default_nand_part[] = { [0] = {
.name = \.size = 16*SZ_16K, //分区大小 256k .offset = 0, // 本分区起始地址 0x0 },
[1] = {
.name = \
. offset = 16*SZ_16K, // 本分区起始地址 0x40000 . size =3*SZ_1M, // 分区大小 3M },
[2] = {
.name = \
.offset = MTDPART_OFS_APPEND, // 紧接上一分区地址 // 本区起始地址 0x340000
.size = MTDPART_SIZ_FULL, // 使用剩余全部空间
} //本分区大0x3cc0000 }; // 62208K name: 代表分区名字
size: 代表 flash 分区大小(单位:字节)
offset: 代表 flash 分区的起始地址(相对于 0x0 的偏移) 另外在该文件中修改smdk_nand_info如下:
static struct s3c2410_platform_nand smdk_nand_info = {
.tacls =0, //default is 20 参数设置需参看 datasheet,上有描述 .twrph0 =30, //default is 60 .twrph1 =0, //defualt is 20
.nr_sets = ARRAY_SIZE(smdk_nand_sets), .sets = smdk_nand_sets, };
(2)修改时钟 (终端输出若有乱码则需修改)
在 arch/arm/mach-s3c2440/mach-smdk2440.c 中修改 smdk2440_map_io : #vim arch/arm/mach-s3c2440/mach-smdk2440.c static void init smdk2440_map_io(void) {
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc)); s3c24xx_init_clocks(12000000); //default is 0
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
24
(3)修改 nand Flash 的校验方式,去掉 ECC 校验,否则上电启动会提示 ECC 错误或 者 I/O 读取错误。
在#vim drivers/mtd/nand/s3c2410.c 中 将 chip->ecc.mode = NAND_ECC_SOFT;改为 chip->ecc.mode = NAND_ECC_NONE;
5.5 配置编译内核
#make s3c2410_defconfig //2440参照2410 #make menuconfig //进入设置界面,配置内核
make menuconfig命令运行后进入内核配置主菜单,如图5.5 1,这时根据自己的硬件需求对内核进行配置,即选择合适的选项,在用make menuconfig命令来裁减内核时,都是选上所需的选项,不需要的去掉该选项。(选项前按“y”则显示“*”表示需要此项;按n则空,不要此项)。
图5.5 1
根据开发板情况,在配置中主要考虑的有: (1)CPU类型的选择
25
图5.5.1 1
(2)引导设置如下5.5.2
图5.5.2 1
Boot options --> Default kernel command string:
noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 rootfstype=jffs2
说明:mtdblock2 代表第 3 个 flash 分区,它是预设的 rootfs 分区,
console=ttySAC0,115200 使 kernel 启动期间的信息全部输出到串口 0 上,2.6 内核对于串口的命名改为 ttySAC0,但这不影响用户空间的串口,用户空间的串口编程针对的仍是/dev/ttyS0 。
(3)文件系统的支持,这就根据自己的需要来配置。
接下来做的是针对文件系统的设置,实验时目标板上要上的文件系统是 cramfs与 jffs2,故做如下配置
File systems -->
26
<> Second extended fs support去除对 ext2 的支持,如图5.5.3
图5.5.3 1
Miscellaneous filesystems -->
[*]JFFS2 XATTR support (EXPERIMENTAL)支持 jffs2 和 cramfs 文件系统,配置如下图5.5.4
27
图5.5.4 1
Network File Systems --> 支持 NFS 文件系统,配置如下图5.5.5 [ ] NFS client support for the NFSv3 ACL protocol extension [*]NFS client support for NFS version 4 (EXPERIMENTAL) <*> NFS server support
图5.5.5 1
(4)系统调用方式设置如下图5.5.6
28
图5.5.6 1
Kernel Features --->
[*] Use the ARM EABI to compile the kernel//防止出现内核恐慌,内核指针跑飞。
主菜单中选最后一项“Save an Alternate Configuration File”,按回车,进入配置文件名编辑,默认文件名,ok保存,exit退出,产生.config内核配置文件,该文件会在 make 的时候被调用。
5.6 Linux内核编译
配置完成后,会在内核目录下生产.config文件!然后回到内核目录编译内核!具体操作如下:
#make //编译内核在arch/arm/boot目录下生成zImage镜像,然后进行kernel的烧写:
打开DNW软件,在菜单Configuration中选择Options,然后配置波特率和端口参数,修改烧写地址,使内核烧入Nand Flash分区1;
配置好参数后,选择菜单Serial Port--.>Connect,然后给开发板上电,接着根据目录中提示,USB Port-->Transmit中导入zImage文件即可。
5.7 使用minicon远程访问目标板
minicom的设置:minicom –s
选择串口,选择菜单中的serial port setup 回车,进入serial device(串口1->/dev/ttyS0,串口2->/dev/ttyS1)。
设置波特率,按E进入设置bps/par/Bits界面,再按I以设置波特率为115200,Q数据位8,奇偶检验位无,停止位1。
设置无流控制(无硬件,无软件),按回车退回到上一级菜单,按F键设置Hardware Flow Control为NO,其它选项使用缺省值,保存设置(在/etc/minirc.dfl中)。
设置完毕,打开目标板电源开关,minicom显示目标板启动信息,当linux启动后,minicom就相当于虚拟终端,可以用它来操作目标板了。
退出Ctrl+A,紧接着再按下Q键,在跳出的窗口中选Yes。
29
5.8下载到开发板中测试
使用windows下的终端工具,DNW或者secrueCRT将内核烧写到开发板中去: (1)打开终端,配置好端口;
(2)连接开发板与终端,给开发板上电;
(3)根据进入bootloader面的提示,选择分区烧写即可。
30
第六章 驱动的移植
6.1关于USB驱动移植
(1)修改arch/arm/mach-s3c2410/mach-smdk2410.c文件
#include
static struct s3c2410_hcd_info usb_gec2410_info = { .port[0]={
.flags = S3C2410_HCDFLG_USED, };
int usb_gec2410_init(void) {
unsigned long upllvalue = (0x78<<12)|(0x02<<4)|(0x03); printk(“USB Control,(c)gec2410\\n”);
s3c_device_usb.dev.platform_data = &usb_gec2410_info; while(upllvalue!=_raw_readl(S3C2410_UPLLCON)) {
_raw_write(upllvalue,S3C2410_UPLLCON); mdelay(1); }
return 0; }
(2)在static void_init smdk2410_map_io()函数中添加usb_sbc2410_init()函数usb_gec2410_init(); (3)内核配置
支持热插拔
General setup—>
[*]Configure standard kernel features(for small systems)-> <*>Support for hot-pluggable devices 让内核支持USB设备 Device drivers
Block devices --->
< * >Low Performance USB Block driver SCSI device support --->
< * >SCSI generic support
< * >Probe all LUNs on each SCSI device USB support --->
< * >Support for Host-side USB [ * ] USB device filesystem < * >USB Mass Storage support < * >USB Monitor
加入 MSDOS 文件系统和 VFAT 文件系统支持(为适应挂载 U 盘) File systems --->
DOS/FAT/NT Filesystems ---> <*> MSDOS fs support
<*>VFAT (Windows-95) fs support
( 936 ) Default codepage for FAT // 更改默认值为 936
( cp936 ) Default iocharset for FAT // 更改默认值为 cp936 使能( DOS 分区) CONFIG_MSDOS_PARTITION File systems ---> Partition Types --->
[ * ] PC BIOS (MSDOS partition tables) support 添加对中文字体库的支持
File systems --->
-*- Native language support --->
< * >Simplified Chinese charset (CP936, GB2312) < * > NLS UTF8 编译#make
6.2 关于LCD驱动移植
(1)关于LCD的配置文件源码:
在Linux-2.6.30.4/arch/arm/mach-s3c2410/mach-smdk2410.c中添加如下 #vim /arm/mach-s3c2410/mach-smdk2410.c #include
static sturc s3c2410fb_display smdk2410_lcd_cfg__initdata={ .lcdcon5 = S3C2410_LCDCON5_FRM565|
S3C2410_LCDCON5_INVVLINE| S3C2410_LCDCON5_INVVFRAME| S3C2410_LCDCON5_PWREN| S3C2410_LCDCON5_HWSWP, .type = S3C2410_LCDCON1_TFT, .width =320, .height =240,
.pixclock = 170000,/*HCLK 60 MHz,divisor10*/ .xres = 320, .yres = 240, .bpp = 16,
.left_margin =21, .right_margin =39, .hsync_len = 31, .upper_margin =16, .lower_margin = 13, .vsync_len = 4, };
static struct s3c2410fb_mach_info smdk2410_fb_info__initdata ={
32
.displays = &smdk2410_lcd_cfg, .num_displays = 1, .default_display = 0, };
(2)初始化函数中添加LCD初始化功能
Static void__init smdk2410_init(void) {
S3c24xx_fb_set_platdata(&smdk2410_fb_info);//添加部分 }
(3)删除arch/arm/mach-s3c2440/mach-smdk2440.c中的部分内容如下:
Static struct s3c2410fb_display smdk2440_kd_cfg__initdata={ .lcdcon5 = S3C2410_LCDCON5_FRM565|
S3C2410_LCDCON5_INVVLINE| S3C2410_LCDCON5_INVVFRAME| S3C2410_LCDCON5_PWREN| S3C2410_LCDCON5_HWSWP, .type = S3C2410_LCDCON1_TFT, .width = 240, .height = 320, .pixlock =166667, .xres =240, .yres = 320, bpp = 16,
.left_margin =20, .right_margin = 8, .hsync_len = 4, .upper_margin = 8, .lower_margin =7, .vsync_len = 4, };
(4)自定义logo
(1)进入Linux 的Ked图形面,使用图像编辑器打开图像文件,选择图像-》模式->索引颜色,将颜色改为224,大小不大于显示器分辨率,最后文件另存为ppm格式(ASCII码),文件名为:logo_linux_clut224.ppm
(2)把logo_linux_clut224.ppm拷贝到drivers/video/logo下替换相应用ppm图片,并删除所生成代码。
#rm –rf drivers/video/logo/logo_linux_clut224.*
#cp –r /mnt/hgfs/share/logo_linux_clut22.ppm driviers/video/logo 重新配置内核:
在make menuconfig Device Drivers-> Graphics support->
<*>Support for frame buffer devices [*]Bootup logo?
[*]Standard 224-color Linux logo 然后编译#make
33
6.3关于触摸板驱动移植
(1)添加代码:
将touchscreen驱动源码gec2440_ts.c添加到linux-2.6.30源码目录drivers/input/touchscreen中。
将ADC驱动源码gec2440_adc.c及头文件s3c24xx-adc.h添加到linux-2.6.30源码目录drivers/char中。
(2)修改drivers/input/touchscreen/Makefile文件。
#vim drivers/input/touchscreen/Makefile
obj-$(CONFIG_TOUCHSCREEN_GEC2440) += gec2440_ts. (3)修改drivers/input/touchscreen/Kconfig文件
#vim drivers/input/touchscreen/Kconfig添加 config TOUCHSCREEN_GEC2440
tristate \ help
Say Y here if you have the s3c2440 touchscreen. (4)修改drivers/char/Makefile文件
#vim drivers/char/Makefile添加
obj-$(CONFIG_GEC2440_ADC) += gec2440_adc.o (5)修改drivers/char/Kconfig文件
#vi drivers/char/Kconfig 添加config GEC2440_ADC
tristate\ ---help---
Say Y here if you have the s3c2440 ADC. (6)修改arch/arm/mach-s3c2410/mach-smdk2410.c文件
#vim arch/arm/mach-s3c2410/mach-smdk2410.c 添加
static struct s3c2410_ts_mach_info gec2410_ts_cfg __initdata = { .delay = 10000, .presc = 49,
.oversampling_shift = 2, };
在static void __init smdk2410_map_io(void)函数中添加: s3c24xx_init_touchscreen(&gec2410_ts_cfg);
(7)修改arch/arm/mach-s3c2440/mach-smdk2440.c文件
#vim arch/arm/mach-s3c2440/mach-smdk2440.c
在static struct platform_device *smdk2440_devices[] __initdata 结构体中添加:&s3c_device_ts,
(8)修改arch/arm/plat-s3c/include/plat/devs.h文件
#vim arch/arm/plat-s3c/include/plat/devs.h 添加:
struct s3c2410_ts_mach_info { int delay;
34
int presc;
int oversampling_shift; };
void __init s3c24xx_init_touchscreen(struct s3c2410_ts_mach_info *hard_s3c2410_ts_info);
extern struct platform_device s3c_device_ts; (9)修改arch/arm/plat-s3c24xx/devs.c文件
#vim arch/arm/plat-s3c24xx/devs.c 在文件后面添加 /* Touchscreen */
static struct s3c2410_ts_mach_info s3c2410_ts_info;
void __init s3c24xx_init_touchscreen(struct s3c2410_ts_mach_info *hard_s3c2410_ts_info)
{
memcpy(&s3c2410_ts_info,hard_s3c2410_ts_info,sizeof(struct s3c2410_ts_mach_info));
}
EXPORT_SYMBOL(s3c24xx_init_touchscreen);
struct platform_device s3c_device_ts = { .name = \ .id = -1,
.num_resources = ARRAY_SIZE(s3c_adc_resource), .resource = s3c_adc_resource, .dev = {
.platform_data = &s3c2410_ts_info, } };
EXPORT_SYMBOL(s3c_device_ts); (10)编译配置内核
#make menuconfig
配置菜单添加驱动到内核: Device Drivers --->
Input device support ---> [*] Touchscreens --->
<*> GEC2440 touchscreen input driver Character devices --->
<*> GEC2440_ADC 编译内核生成静态驱动模块 #make
(11)在内核启动中可以看到
s3c2410 TouchScreen successfully loaded
input: s3c2410 TouchScreen as /class/input/input0 注册信息为:(开发板启动后,在dnw窗口或者超级终端中输入下列指令)
35
#cat /proc/bus/input/devices 信息截图如图6.3:
图6.3 1
(12)在根文件系统中建立相关设备节点:(开发板中执行,若文件已经存则不能建立)
#mkdir /dev/input
#mknod /dev/input/event0 c 13 64 #mknod /dev/input/mouse0 c 13 32 提示“...Read-only file system”,或者 “mkdir: cannot create directory '/dev/input': File exists”。
解决方法如下: #chmod 777 /dev/
#mount -o remount rw /
36
第七章 制作根文件系统
制作基本的根文件系统:使用busybox定制一个基本的文件系统,使用到的软件包有busybox和bash。
7.1工作目录
设定工作目录为/root/build_rootfs/,该目录主要用来编译busybox,bash等制作根文件系统的软件,下载busybox,bash到该目录:mkdir /root/build_rootfs
建立根目录,该目录就是我们要移植到目标板上的目录,对于嵌入式的文件系统,根目录下必要的目录包括bin,dev,ctc,usr,lib,sbin,proc,sys,tmp;这里设定根目录是/root/rootfs;busybox、bash编译之后,安装到该目录下;
mkdir /root/rootfs
mkdir /root/rootfs/{bin,dev,etc,usr,lib,sbin,proc,sys,tmp} mkdir /root/rootfs/usr/{bin,sbin,lib}
7.2创建节点
以root用户在/root/rootfs/dev目录下执行,创建节点(如果使用mdev设备管理工具可忽略此步骤)。
mknod –m 666 null c 1 3 mknod –m 666 console c 5 1
7.3拷贝动态链接库
交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下,我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标上,这里我们用到的交叉工具链的路径是/usr/local/arm/4.1.2/,所以链接库的目录是/usr/local/arm/4.1.2/arm-linux/lib。
进入链接库目录:
#cd /usr/local/arm/4.1.2/arm-linux/lib
编写一个shell文件,用于copy实际的共享链接库;主修订版本的符合链接;动态连接器及其符号链接到目标板根目录下的lib(/root/rootfs/lib):
#vi cp.sh 内容如下:
for file in libc libcrypt libdl libm libpthread libresolv libutil libthread_db
do
cp $file *.so /work/rootfs/lib
cp –d $file .so.* /work/rootfs/lib done
cp –d ld *.so* /work/rootfs/lib
cp –d libstdc++.so* /work/rootfs/lib
cp –d libz.so* /work/rootfs/lib cp –d libjpeg.so* /root/rootfs/lib cp –d libgcc_s* /root/rootfs/lib
第一个复制命令会复制实际的共享库,第二复制符合链接本身,第三个复制态链接器及其符合链接,然后执行刚编写的shell:
#source cp.sh
这样就反链接库复制到/root/rootfs/lib目录下了,接着还要缩小复制过来的链接库的体积。
#arm-linux-strip -s/root/rootfs/lib/lib*
7.4交叉编译busybox
#tar xjvf busybox-1.16.0.tar.bz2 #mv busybox-1.16.0 busybox #cd busybox #vi Makefile
指定ARCH, CROSS_COMPILE环境变量 ARCH ?= arm
CROSS_COMPILE = /usr/local/arm/4.1.2/bin/arm-linux-
然后配置busybox,在基于默认配置上,再配置它为静态编译,安装时不用/usr路径,另外指定一个路径。
#make defconfig #make menuconfig
BusyboxSettings---》
BuildOptions——》
[*]BuildBusyBoxasastaticbinary(nosharedlibs) InstallationOptions---》
[*]Don’t tuse/usr
(/root/rootfs)BusyBoxininstallationprefix // 指定安装路径
最后编译#make &7 make install
7.5交叉编译bash(交互程序)
#cd /root/rootfs/build_rootfs #tar xzvf bash-4.0.tar.gz #cd bash-4.0
#exportPATH = /usr/local/arm/4.1.2/bin:$PATH ./configure --host = arm-linux #make
#arm-linux-strip -s bash
编译的结果得到静态链接的bash程序,将其拷到根目录下:
#cp bash /root/rootfs/bin
38
7.6建立系统配置文件
(1)首先inittab文件是系统启动后所访问的第一个脚本文件,后续启动的文件都由它来指定:
#cd /root/rootfs #vim etc/inittab 添加以下内容:
#first:run the system script file ::sysinit:/etc/init,d/rcS
#second:run the locals cript file ::once:/etc/rc.local
#third run the bash shell prosecc ::respawn:/rin/bash #restart init process ::restart:/sbin/init #umount all file system
::shutdown:/bin/umount –a –r
添加这个inittab文件决定的启动流程是:
先执行/etc/init.d/reS脚本;然后执行/etc/rc.local脚本:再执行/bin/bash交互程序,进入交换界面。
(2)/root/rootfs/etc/fstab文件
该配置文件为目标系统所支持挂载的文件系统类型列表: vim /root/rootfs/etc/fstab 添加如下内容:
#device mount-point type option dump fsck order Proc /proc proc defaults 0 0 none /tmp ramfs defaults 0 0 svsfs /sys sysfs defaults 0 0 mdev /dev ramfs defaults 0 0 (3)/root/rootfs/etc/init.d/rcS文件
该配置文件主要是挂载配置文件系统,建立必要的设备文件或其符号连接: mkdir /root/rootfs/etc/init.c vim /root/rootfs/etc/init.d/rcS 内容如下: #!/bin/sh
export PATH = /sbin:/bin:/usr/sbin:/usr/bin
echo “------------ munt all---------------”
mount –a //实现对/etc/fstab文件中各文件系统的挂载。
echo /sbin/mdev >/proc/sys/kernel/hotplug
mdev –s //使用mdev工具对设备进行动态管理。
MDEV:mdev是busybox自带的一个简化版的udev,适合嵌入式的应用场合,具有简单使用的特点,它的作用就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需要的节点文件
39
Mdev的正常使用需要创建/root/rootfs/etc/mdev.conf文件(可以为空文件,但必需存在,在/root/rootfs/etc/下执行“touch mdev.conf”指令可创建),同时MDEV会改写/dev和/sys两个目录,必须保证这两个目录存在且是可写的。
执行mdev-s
以-s为参数调用位于/sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点文件。一般只在启动时才执行一次 “mdev-s”。
热插拔事件:
由于启动时运行了命令:echo/sbin/mdev>/proc/sys/kernel/hotplug ,那么当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev。这时mdev通过环境变量中的 ACTION 和DEVPATH,(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev 下创建设备节点文件。
(4)etc/rc.local文件:
该配置文件主要是配置IP地址; #vi /root/rootfs/etc/rc.local 内容如下: #!/bin/sh # set ip
/sbin/ifconfiglo 127.0.0.1up
/sbin/ifconfigeth0172.22.60.223 netmask 255.255.0.0 up /sbin/routeadddefaultgw172.22.60.1eth0
(5)在文件系统目录的根路径下添加.bashrc文件: 文件系统最后启动的是bash交换程序,进入交换界面; bash程序的启动会读取根目录下的.bashrc脚本文件: vi/root/rootfs/.bashrc .bashrc文件参考: #!/bin/bash # set env
exportPATH=/bin:/sbin:/usr/bin
exportLD_LIBRARY_PATH=/lib:/usr/lib /usr/bin/hello&
7.7添加一个用户程序
进入工作目录:
cd/root/build_rootfs/ 编辑源文件:
vihello.c 内容如下
#include
40
正在阅读:
数码相框毕业设计论文 - 图文06-13
大学生关于社会性别研究的论文03-08
福建省福州市2016届中考复习模拟数学试题(福州左海中学)及答案09-10
苏州大学基因工程专业课复习题04-21
教师资格证45分钟全程教案参考--语法课课型试讲教案(最新)04-15
绵阳市高中2014届高三第一次诊断考试文科综合地理试题05-28
督导手册 - 图文03-08
撰写调查报告的要诀06-02
小学五年级科学苏教版上册实验报告单12-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 毕业设计
- 相框
- 图文
- 数码
- 论文