530 likes | 873 Views
嵌入式 Linux 开发培训. Ashen Yu 2008.9.1. 大纲. Linux 的介绍 开发环境的搭建 Minicom 交叉编译工具链 Bootp && Ttfp 嵌入式 Linux 的 镜像文件 下载 制作简单程序 Linux 内核的移植 文件系统的制作 制作 QT/E 应用程序. Linux 的介绍. 定义,特点 Linux 是开放源代码的自由操作系统,是一种 UNIX 操作系统的克隆,但 Linux 不是 Unix 。
E N D
嵌入式 Linux开发培训 Ashen Yu 2008.9.1
大纲 • Linux的介绍 • 开发环境的搭建 • Minicom • 交叉编译工具链 • Bootp && Ttfp • 嵌入式Linux的镜像文件下载 • 制作简单程序 • Linux内核的移植 • 文件系统的制作 • 制作QT/E应用程序
Linux的介绍 • 定义,特点 • Linux 是开放源代码的自由操作系统,是一种 UNIX 操作系统的克隆,但Linux不是Unix。 • Linux 的目标是保持和 POSIX(可移植操作系统接口,Portable Operating System Interface)的兼容
Linux介绍 • 定义,特点 • 广泛支持硬件 • X86,PowerPC,ALPHA,SPARC ,ARM,MIPS • 内核高效稳定 • 开放源代码,软件丰富 • Linux 的发行遵守通用公共许可证(GPL) • 秉承“自由的思想,开放的源码”的原则
Linux的结构 • 应用程序 • 系统应用程序 • Shell、图形界面、系统管理和维护程序、GCC编译程序 • 用户应用程序 • 系统调用接口 • VFS • Linux内核 • 管理磁盘上的文件、内存 • 启动和运行程序 • 从网络上接受和发送数据包 • 硬件 • Linux安装和运行时所需要的各种物理设备
Linux常用命令 • 常用命令 • ls 显示文件列表 • cd 目录转换 • pwd 显示当前路径 • mkdir 创建目录 • rm 删除目录 • cp 拷贝 • tar 压缩解压缩 • rpm rpm包的安装 • grep 关键字查找 • find 文件查找 • 自助 • man command • command -- help
开发环境的建立 Minicom 交叉编译工具链 Bootp && Ttfp
XSbase270_linux的开发 • 1、硬件的连接 • A、JTAG线的联接。
硬件的连接 • B、平台上串口的联接。 模块板上的串口
硬件的连接 • C、平台上网口线的联接。
硬件的连接 • D、平台电源线的联接。
XSbase270_linux的开发 • 2、设置串口调试工具。 Minicom是LINUX下的串口调试工具。 2.1、输入命令"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| +---------------------------------+
XSbase270_linux的开发 • 2.2、选择“serial port setup”项显示下面的菜单。 保存设置,选择"Save setup as dfl.“ 再按ESC键即可退出Minicom的配置界面。 +--------------------------------------------------+ | 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? | +---------------------------------------------------+
XSbase270_linux的开发 Bootp: • 英文原义:Bootstrap Protocol • 中文释义:自举协议 • 注解:该协议是一个基于TCP/IP协议的协议,它可以让无盘站从一个中心服务器上获得IP地址 创建Bootp 3.1、安装bootp rpm包 bootp rpm 在附送光盘的rpm目录里。
cp /mnt/cdrom/Net_Config/bootptab /etc/ XSbase270_linux的开发 • 3.2、拷贝配置文件 将光盘中的Net_config目录下的bootp 拷贝到/etc/xinetd.d目录下 将光盘中的Net_config目录下的bootp tab拷贝到/etc目录下
XSbase270_linux的开发 • 3.3、更改boottab文件 在/etc下更改bootptab文件 下面是Bootp的范例: ‘1’表示使用以太网协议 注意: 板子的ip地址和主机平台的ip地址必须在同一个网段内。 (例如主机IP: 192.168.10.100, 板子IP : 192.168.10.xxx)
XSbase270_linux的开发 Tftp: • 英文原义: Trivial File Transfer Protocol • 中文释义:简单文件传输协议 • 注释:提供不复杂、开销不大的文件传输服务。 创建Tftp 3.4、安装tftp-server rpm
XSbase270_linux的开发 • 3.5、拷贝配置文件 将光盘中的Net_config目录下的tftp 拷贝到/etc/xinetd.d目录下
XSbase270_linux的开发 3.6、重启xined 在主机平台重启xined。
XSbase270_linux的开发 交叉编译: 由于嵌入式系统的自身限制不可能装备很大的存储设备和友好的人机交互界面,所以嵌入式开发的程序编写和编译是在PC机上完成的,编译产生的结果在嵌入式目标平台上运行 4.1安装编译工具链(Toolchain) 编译工具链在附带光盘的Toolchain目录下 4.2添加环境变量 将下面的语句添加到用户主目录下.bash_profile文件尾 然后重启系统
XSbase270_linux的开发 • 4.3、X86与ARM中小程序的开发 分别使用gcc和arm-linux-gcc 编译下面一个短小的例子。 hello.c的内容:
XSbase270_linux的开发 • 5、使用JTAG下载Bootloader 1.需要烧写工具Jflashmm 2.需要建立好的bootloader映像文件
XSbase270_linux的开发 6、下载Kernel和Filesystem 6.1、拷贝映像文件到/tftpboot (附带光盘Image\下放着已经做好的映像文件) 6.2、打开minicom, 打开板子电源开关。 显示启动信息。 当你看到 “Autoboot in progress, press any key to stop” 时3秒内按下任意键然后再按下“0”;你将进入bootloader 命令模式。
XSbase270_linux的开发 6.3、使用bootp自举IP 6.4、使用TFTP命令下载kernel 。 6.5、烧写Kernel到flash中。 6.6、使用TFTP命令下载Filesystem 6.7、烧写Filesystem到Flash中
XSbase270_linux的开发 • 8、linux启动 如果上述3个映像文件都成功地下载到FLASH中,那么Linux 启动条件将满足。开始启动。 启动完成,成功进入Shell
通过串口下载简单文件 • 使用minicom连接上开发板 • Ctrl+A,S • 选择zmodem模式
BootLoader的介绍 • Boot Loader的简介 Boot Loader是一种引导程序,它是系统加电后运行的第一段软件代码。通过这段代码,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户对特定的 Boot Loader 进行设计与实现。
BootLoader的介绍 • Boot Loader 的安装媒介 系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。比如,基于 XSCale core 的 CPU 在复位时通常都从地址 0x00000000 取它的第一条指令。而基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU 将首先执行 Boot Loader 程序。 下图就是一个同时装有 Boot Loader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。
BootLoader的介绍 • Boot Loader 特点 • 不同的 CPU 都有不同的 Boot Loader • U-boot支持ARM和MIPS • 也依赖于具体的嵌入式板级设备的配置 • 例如:Liod && EELiod • 一般需要用JTAG烧写 • 一般使用串口进行连接 • 两种工作模式: • 下载模式——tftp(以太网) • 启动模式
BootLoader的介绍 • Boot Loader 的启动过程 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数Boot Loader 都分为 stage1 (汇编)和 stage2(C语言) 两大部分 Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序):1、硬件设备初始化 2、为stage2 准备 RAM 空间3、拷贝 stage2 到 RAM 空间中 4、设置好堆栈 5、跳转到 stage2 的 C 入口点 Boot Loader 的 stage2 通常包括以下步骤(以执行的先后顺序):1、初始化本阶段要使用到的硬件设备2、检测系统内存映射(memory map)3、将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。 4、为内核设置启动参数 5、跳转到内核的入口点
Linux内核的配置与编译 • 10、解压Kernel源码包 源码包的位置在附带光盘的/Kernel 下 解压完成后进入刚刚解压出来的目录
Linux内核的配置与编译 • arch • include • init • mm • kernel • drivers • block • char • cdrom • pci • scsi • net • sound • lib • net • ipc • fs • scripts • 各种CPU体系结构相关的内核代码 • 编译内核所需要的头文件 • 内核的初始化代码 • 独立于CPU体系结构的内存管理代码 • 主要的内核代码 • 系统所有支持的设备驱动代码 • 块设备驱动 • 字符设备驱动 • 所有的CD-ROM驱动 • PCI卡驱动,包含PCI子系统映射和初始化代码等 • 所有的SCSI驱动 • 网络设备驱动 • 声卡设备驱动 • 内核所需的库文件 • 内核与网络相关的代码,有别于/drivers下的/net • 内核进程通信的代码 • 所有文件系统代码和各种类型的文件操作代码 • 用于配置内核的脚本
Linux内核的配置与编译 Linux内核编译的操作方法 10.2、“make menuconfig.”命令打开内核配置。 10.3、“make dep.”检查依赖性 10.4、“make zImage.”生成内核映像 如果编译没有出错,在arch/arm/boot 路径下生成映像文件zImage。
Linux内核编译的操作方法 • 配置界面的使用方法 运行make menuconfig后将进入Kernel的配置界面 • 使用上下键可以在各个菜单之间移动 • 在标有”---->”标志的地方按回车键进入下一级菜单 • 按<ESC>可以回到上级菜单,或退出 • 按<F1>或选择菜单中<Help>可以获得帮助信息 • Y表示选择该功能,M表示以模块方式编译到内核,N表示不选择该功能 • [ ]可以选择三种状态,< >只有两种
嵌入式文件系统 • 嵌入式Linux文件系统简介 由于系统体系结构的不同,嵌入式文件系统在很多方面与桌面文件系统有较大区别。例如在普通桌面操作系统中,文件系统不仅要管理文件,提供文件系统API,还要管理各种设备,支持对设备和文件操作的一致性(像操作文件一样操作各种I/O设备)。在嵌入式文件系统中,则发生了变化——在某些情况下,嵌入式操作系统可以针对特殊的目的制定,特别是随着ASOS(Application Specific Operating System,为应用定制的嵌入式操作系统)的发展,对嵌入式操作系统的系统功能归整性和可伸缩性提出了更高的要求。一般说来,嵌入式文件系统要为嵌入式系统的设计目的服务,不同用途的嵌入式操作系统下的文件系统在许多方面各不相同。
嵌入式文件系统 • 嵌入式操作系统的文件系统的设计目标 1.使用简单方便. 2.安全可靠 3.实时响应 4.接口标注的开放性和可移植性 5.可伸缩性和可配置性 6.开放的体系结构 7.资源有效性 8.功能完整性 9.热插拔 10.支持多种文件类型
嵌入式文件系统 • Linux文件系统概述 Linux支持的文件系统有ext、 ext2、xia、vfat、minix、msdos、umsdos、 proc、smb、ncp、iso9660、nfs、sysv、hpfs、affs和ufs等 嵌入式Linux常用文件系统 支持NOR FLASH的JFFS、JFFS2文件系统和支持NAND FLASH的YAFFS、YAFFS2最为流行。
嵌入式文件系统 • Linux下常用文件系统结构
实验步骤 • 将光盘中的Filesystem目录拷贝到工作目录 • 解压该目录中的一个tar.gz文件(qt) • 进入rootfs目录做相应的修改(添加一个应用程序) • 退出rootfs目录,运行mkrootfs.sh • 将生成的镜像文件重新下载到Flash中
QT介绍 • Qt是一种跨平台的C++图形界面(GUI)工具包,它是Troll Tech化公司的标志产品,Qt工具包括用于商业性质的商业版和用于开发自由软件的两种不同的版本,用自由版开发软件必须作为自由软件公布。 • QT/E是指QT的嵌入式版本,删除了许多嵌入式GUI中不常用的代码,缩小了体积,但是需要根据处理器的结构进行移植
实验步骤一 • 利用QtDesigner工具,建立一个工程文件,从File菜单选中New,从对话框中选中C++ Project 图标,按OK按钮将新建工程保存为test.pro(Qt工程的扩展名为.pro);
实验步骤二 • 建立窗体和添加控件:选中File菜单中的New菜单,双击dialog图标,建立一个对话框图形界面,可以在属性编辑栏中修改窗体或控件的相关属性。根据设计需要,在窗体上添加一些常用如按钮、文本框等控件;然后保存为test.ui
实验步骤三 • 自动配置生成main.cpp文件:选中File菜单中的New菜单,双击C++ Main-File图标,Qt自动将当前窗体文件作为主界面,并自动生成main.cpp文件;然后再工程列表中删除test.ui;
实验步骤四 • 在嵌入式平台中无法对ui界面文件进行编译,因此Qt提供将ui文件转换成标准的C++头文件(.h)与实现文件(.cpp)的uic工具。uic工具还可以完成C++子类继承文件的转换和将图片文件转换成头文件的形式。现介绍利用uic工具将前面建立的test.ui文件转换成标准的C++头文件和实现文件(uic具体使用方法参考qt文档)。 • 生成C++头文件: uic –o test.h test.ui • 生成C++实现文件(.cpp文件) uic –o test.cpp –impl test.h test.ui
实验步骤六:编译 • qmake –o Makefile test.pro • make • ./test
实验步骤7:移植 对*.PRO工程文件进行修改 SOURCES += main.cpp \ test.cpp HEADERS += test.h TEMPLATE =app CONFIG += qtopia qt warn_on release LANGUAGE = C++ SOURCES += main.cpp \ test.cpp HEADERS += test.h unix { UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj } TEMPLATE =app CONFIG += qt warn_on release LANGUAGE = C++
实验步骤八:重新编译 • source setQTEenv.sh • tmake –o Makefile test.pro • Make • 然后通过串口将程序下载到开发板上的/usr/qpe/bin目录下 • 利用chmod命令修改test的属性:chmod 755 test