第四章 基于Linux的嵌入式系统开发流程_第1页
第四章 基于Linux的嵌入式系统开发流程_第2页
第四章 基于Linux的嵌入式系统开发流程_第3页
第四章 基于Linux的嵌入式系统开发流程_第4页
第四章 基于Linux的嵌入式系统开发流程_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、4 c h a p t e r 基于基于linux的嵌入式系统开发流程的嵌入式系统开发流程 主要内容 开发环境的建立开发环境的建立 嵌入式嵌入式linux2.4平台构建平台构建 镜像文件的烧写镜像文件的烧写 嵌入式嵌入式linux2.6平台构建平台构建 一、虚拟机 n虚拟机是运行在pc机上的应用软件,可以在一 台物理计算机上模拟出一台或多台虚拟的计算 机,这些计算机就像真正的计算机一样工作 nvmware workstation 是vmware公司设计的专 业虚拟机,可以在windows平台上为几乎任何 其他操作系统提供虚拟运行环境 n它的安装与一般软件没有区别,安装好之后需 要进行一些配置,

2、以便在此基础上安装linux 二、cygwin模拟环境 ncygwin是一个运行于windows平台上的linux模 拟环境,由cygnus solutions公司开发 ncygwin提供了一组linux工具,这组工具中包 含bash shell,可以使用各种linux命令 n开发人员也可以在cygwin环境下使用gnu工具 链进行嵌入式程序开发,相比运行于虚拟机上 的linux系统来说速度更快 ncygwin可以从网站http:/下 载到本地磁盘,然后安装 三、超级终端 n嵌入式系统开发的程序只能在对应的嵌入式硬 件平台上运行,烧写过程中需要通过串口输入 操作选项,并且利用串口作为信息输出

3、n在windows和linux中都有许多串口通信软件, 可以很方便地对串口进行配置,其中最主要的 配置参数是波特率、数据位、停止位、奇偶校 验位和数据流控制位等 nwindows中典型的串口通信软件超级终端 四、tftp服务器 n简单文件传输协议tftp(trivial file transfer protocol)可以看做是ftp协议的简 化版本 n与ftp协议相比,最大区别在于没有用户管理 的功能 n它传输速度快,适合小型文件传输,比较小并 且容易实现 n同ftp一样,tftp分为客户端和服务器端两种 tftp服务器 n在windows环境中,首先在宿主机上运行tftp 服务器程序tftp

4、d32.exe,设置好tftp的本地 工作目录,即含有要下载文件的目录,可通过 点击“browse”按钮修改,或者点击 “settings”按钮设置,例如修改为指向 dapp。服务器地址设为宿主机的ip地址 ntftp服务器设置完毕后,使用交叉网线连接目 标板的以太网口和宿主机网口,或者用直连网 线分别把目标板的以太网口和宿主机网口连接 到同一个交换机上,再使用串口线连接目标板 和宿主机的串口,运行超级终端 tftp服务器 n启动已移植linux系统的目标板,执行 ifconfig命令将目标板的网络地址设置成跟宿 主机在同一个网段内 例如:ifconfig eth0 t

5、ftp服务器 n要使用tftp命令发送目标板上的文件到tftp服 务器,或者从tftp服务器获取文件,可以用命 令: tftp 选项 tftp服务器地址 n例如:tftp -g -l ./test1 -r ./test 65 执行该命令可以将宿主机上的dapp目 录下的名为test的文件下载到目标板上,起 名为test1 五、交叉工具链 n建立gnu交叉开发工具链有两种途径: n源码编译方式 n直接安装二进制文件方式 其中,前者需要下载编译器源代码,进 行配置、编译及安装,过程较复杂 后者安装过程简单,但缺点是对编译器 集合中各个组成部分的版本号要求比较苛刻, 必须采用经

6、实践检验可以协调运行的一系列 组件 交叉工具链 1.cygwin下安装2.95.3版本交叉编译工具链: n首先打开cygwin模拟环境,将交叉工具链 cross-armtools-linux-edukit2410.tar.bz2 复制到/tmp目录下 n正确解压后,执行命令:ls /usr n接下来还需要对环境变量及一些编译开关进 行设置。将set_env_linux.sh脚本文件复制 到/tmp目录下 交叉工具链 n这样cygwin下的交叉编译工具链安装就完成了 n执行命令: arm-linux-gcc -v 可以看到它的版本号,如图4-13所示 交叉工具链 图4-13 cygwin下安装交

7、叉编译工具链 交叉工具链 2.vmware下安装gcc3.4.5版本交叉编译工具链: n首先在/tmp目录下新建目录mysrc、mydest, 权限改为777 n将工具代码包放到mysrc目录下,解压 crosstool-0.43,其他不用解压 n进入crosstool-0.43目录,修改配置文件 : 交叉工具链 (1)仿照demo-arm-softfloat.sh文件,复制后命 名为“myarm.sh” n用vi编辑器对它进行编辑 n把“tables_dir=”后面的目录修改成存放自 己的目录:/tmp/mysrc n把“result_top=”后面的目录修改成自己要 存放的最终结果的目录:

8、/tmp/mydest 交叉工具链 n把“gcc_languages=”后面的语言修改成自己 需要的语言,比如c,c+,java等 n最后把倒数第二行“eval cat arm- softfloat.dat ”中的“arm-softfloat.dat” 修改为“myarm.dat”,保存退出 交叉工具链 (2)仿照arm-softfloat.dat文件,复制后命名为 “myarm.dat” n用vi编辑器对它进行编辑 n把“target=”后面修改成“arm-linux” (3)用vi编辑器编辑gcc-3.4.5-glibc-2.3.6.dat 文件; n把“linux_dir=”后面的版本修

9、改成自己想要 编译的linux内核版本 n配置文件修改后,执行自己构建的脚本 myarm.sh./myarm.sh 交叉工具链 (4)生成后用命令:arm-linux-gcc v,可以查 看当前交叉编译工具链版本,如图4-14所示: 开发环境的建立开发环境的建立 嵌入式嵌入式linux2.4平台构建平台构建 镜像文件的烧写镜像文件的烧写 嵌入式嵌入式linux2.6平台构建平台构建 一、制作bootloader nbootloader是启动引导程序,又叫引导加载程 序,是在嵌入式操作系统内核运行之前执行的 一段程序,通过它可以初始化硬件设备,建立 内存空间,为最终调用操作系统内核准备环境 nv

10、ivi是由韩国mizi公司为arm处理器系列设计的 一个bootloader,本书以vivi为例介绍 bootloader的制作和移植 制作bootloader n复制开发板的bootloader文件vivi- 20030929.tar.bz2和patch文件夹到 $sourcedir目录下,运行cygwin n先执行命令设置linux编译环境变量: source /tmp/ set_env_linux.sh n然后执行命令: cd $workdir tar -xvjf /tmp/edukit-2410/vivi- 20030929.tar.bz2 制作bootloader n解压缩后可以看到

11、$workdir目录下多了一个 vivi目录,即vivi源代码的安装目录,后面的 vivi配置已经编译都得进入vivi目录进行 n然后打入源代码补丁文件: cd vivi patch p1/tmp/edukit-2410/patch/vivi- 20030929.kit2410.patch 制作bootloader n整个源代码包就安装完成了 n然后执行命令: source /tmp/edukit-2410/set_env_linux.sh cd $workdir/vivi make clean make menuconfig n执行命令后弹出配置窗口,如图4-15所示:

12、 制作bootloader 图4-15 编译vivi选择配置文件 制作bootloader n选择“load an alternate configuration file”,可以根据需要选择以下两种加载配置 文件: narch/arm/def-configs/edukit2410-amd: 在nor flash中运行 narch/arm/def-configs/edukit2410-nand: 在nand flash中运行 n配置完成后执行命令“make”进行编译,生成 vivi启动加载程序 二、配置和编译内核 linux提供了方便灵活的方法来定制内核 主要步骤包括: 1.下载安装内核源代码

13、 2.配置内核 3.编译内核 配置和编译内核 1.下载安装内核源代码 n首先复制linux内核源码包linux-2.4.18- rmk7-pxa1-mz5.tar.bz2文件和patch文件夹到 $sourcedir目录下,运行cygwin n执行以下命令完成linux源代码的安装: source /tmp/edukit- 2410/set_env_linux.sh cd $workdir tar -xvjf /tmp/edukit-2410/linux- 2.4.18-rmk7- pxa1-mz5.tar.bz2 配置和编译内核 n正确解压后可以看到$workdir目录下多了一个 kerne

14、l目录,即kernel源代码的安装目录,后 面的linux配置及编译都得以进入kernel目录 进行。 n接着执行以下命令打入linux源代码的补丁文 件: cd kernel patch -p1/tmp/edukit- 2410/patch/linux-2.4.18-rmk7- pxa1- kit2 410.patch 配置和编译内核 2.配置内核 n源代码包安装好以后,再使用linux提供的三 个不同命令配置linux,效果完全一样,只是 视觉效果不同,这三个命令分别是: make config 控制台命令方式配置命令 make menucnofig 文本菜单

15、方式配置命令 make xconfig x窗口图形界面方式配置命令 n执行make xconfig命令后弹出窗口,如图4-16 所示: 配置和编译内核 图4-16 内核定制界面 配置和编译内核 n用户可以手动定制上图所示的各项,也可以直 接加载配置文件。 n在edukit2410可以选择以下配置文件 edukit2410-amd内核镜像在norflash中运行 edukit2410-nand内核镜像在nandflash中运行 n点击“load configuration from file”,输 入文件路径点击“ok”返回后,选择“save and exit”项保存退出,完成了内核及用户程 序

16、配置 配置和编译内核 3.编译内核 n依次执行以下命令完成linux的编译过程: nsource /tmp/edukit- 2410/set_env_linux.sh nmake mrproper 清除旧配置和编译目标文件 nmake xconfig在图形界面下对内核进行配置 nmake dep 生成依赖文件 nmake clean 清除目标、模块和临时文件 nmake zimage 生成压缩的内核镜像文件 三、制作文件系统 n最终在kernel/arch/arm/boot/目录下生成内 核2.4.18的压缩方式可执行镜像文件zimage n根文件系统是操作系统的重要组成部分,包含 系统使用的

17、软件和库,负责存储器空间的组织 和分配,控制文件的存储、保护和检索 nlinux系统启动时,首先完成内核安装及环境 初始化,最后会寻找一个文件系统作为根文件 系统加载 制作文件系统 n嵌入式系统中通常可以选择的根文件系统有 romfs、jffs2、nfs、ext2、ramdisk、cramfs 等 n文件系统的生成实际上就是对文件系统进行打 包,制作方法如下: n首先复制root.cramfs.tar.bz2和 mkcramfs.exe文件到$sourcedir目录下,运 行cygwin n执行以下命令完成cramfs文件系统源代码的 安装: 制作文件系统 n解压后多了一个root目录,即cr

18、amfs文件系统目录 及文件的安装目录 n然后执行以下命令产生cramfs文件系统镜像: source /tmp/edukit-2410/set_env_linux.sh cd $sourcedir ./mkcramfs $workdir/root root.cramfs n编译后生成的文件系统镜像名为root.cramfs 开发环境的建立开发环境的建立 嵌入式嵌入式linux2.4平台构建平台构建 镜像文件的烧写镜像文件的烧写 嵌入式嵌入式linux2.6平台构建平台构建 嵌入式linux2.6平台构建 n由于前面介绍的linux2.4平台构建方法,是为 了让读者先熟悉平台构建的基本流程,在

19、下面 介绍的linux2.6平台构建中,对有些根据实际 需要进行修改的地方,进行了比较详细的说明 编译vivi 1、编译vivi n编译vivi时要用gcc-2.95.3工具链,如果用 高版本,会出现许多问题 n安装gcc-2.95.3版本的交叉编译工具链 n在mysrc目录下解压vivi安装源代码包vivi- 20030929.tar.bz2 编译vivi n用vi编辑器修改 /tmp/mysrc/vivi/arch/s3c2410/smdk.c文 件设置mtd默认分区 n再修改默认启动参数 char linux_cmd=“noinitrd root=/dev/mtdblock3 init=

20、/linuxrc console=ttysac0”,也可以在启动后用命令 param set linux_cmd_line “noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttysac0” n修改完这个文件后保存 编译vivi n接着修改同一目录下的head.s文件,关闭蜂鸣器: 在#ifdef config_s3c2410_smdk all led on 段最后加上 buzzer off ldr r1, =0 x56000010 gpbcon ldr r2, =0 x155559 str r2, r1 ldr r2, =0 x7ff s

21、tr r2, r1, #8 orr r2, r2, #0 x01 buzzer off when high voltage(pwm1) str r2, r1, #4 编译vivi n接下来按照如下方法修改makefile文件: arch := arm linux_include_dir=/usr/local/arm/2.95.3/incl ude/ cross_compile = arm-linux- arm-gcc_libs=/usr/local/arm/2.95.3/lib/gcc- lib/arm-linux/2.95.3/ 表示编译vivi时用2.95.3交叉编译工具链。 编译vivi

22、 nmakefile修改完成后,就可以执行命令“make menuconfig”进行编译了。 选择“load an altenate configuration file”, 输入要加载的配置文件:arch/def- configs/smdk2410,点击“ok”返回后,保存退出, 完成配置。 配置完成后就可以进行编译了,执行命令 make clean make 生成一个大小为69k左右的vivi启动代码。 编译内核镜像 2、编译内核镜像 嵌入式linux往往要通过以太网向目标板 下载程序,因此在编译内核镜像时,往往要把 网卡驱动加入,使得内核支持以太网通信,因 此在编译linux2.6.24

23、内核时加入网卡驱动是 一个重点。 编译内核镜像 n下面介绍如何编译带有cs8900网卡驱动的内核 n首先,编译内核时需要用gcc-3.4.5交叉编 译工具链,而之前编译vivi时用的是2.95.3 版本的,需要修改环境变量$path,或者执 行命令: ln /tmp/mydest/gcc-3.4.5-glibc- 2.3.6/bin/arm-linux-* /usr/bin n接下来在mysrc目录下解压linux- 2.6.24.tar.bz2内核源码,修改以下文件: 编译内核镜像 (1)修改arch/arm/plat-s3c24xx/common- smdk.c中的分 区信息,改为: st

24、atic struct ntd_partition smdk_default_nand_part= 0= .name=“vivi”, .size =sz_512k, .offset=0, , 1= .name =“param”, .offset =sz_512k, .size =sz_512k, , 编译内核镜像 2= .name = “kernel”, .offset =sz_1m, .size =sz_2m, , 3= .name = “root”, .offset =sz_1m*3, .size =sz_1m*56, ; 编译内核镜像 (2)修改drivers/mtd/nand/s3c2

25、410.c,去 掉ecc支持,把s3c2410_nand_init_chip函 数中的nand_ecc_soft改为nand_ecc_none (3)修改makefile文件,在第193行修改为: arch?= arm cross_compile?= arm-linux- (4)复制配置文件 arch/arm/configs/s3c2410_defconfig到 linux-2.6.24目录下,改名为.config 编译内核镜像 (5)把网卡驱动源文件cs8900.c和头文件cs8900.h 复制到linux-2.6.24/drivers/net/arm目录下: n在cs8900.c中添加头文

26、件 #include #include n在cs8900.c中的cs8900_probe()函数中,memset (函数之后添加如 下两条语句: _raw_writel(0 x2211d110,s3c2410_bwscon); _raw_writel(0 x1f7c,s3c2410_bankcon3); 编译内核镜像 (6)在linux-2.6.24/include/asm- arm/arch-s3c2410目录下新建smdk2410.h文 件,添加如下代码: #define psmdk2410_eth_io _phys_to_pfn(0 x19000000) #define vsmdk241

27、0_eth_io 0 xe0000000 #define smdk2410_eth_irq irq_eint9 编译内核镜像 (7)修改/linux-2.6.24/arch/arm/mach- s3c2410中的mach- smdk2410.c. 添加头文件: #include 在map_desc smdk2410_iodesc中添加cs8900 对应的io 空 间映射: static struct map_desc smdk2410_iodesc _initdata = /* nothing here yet */ vsmdk2410_eth_io , psmdk2410_eth_io, s

28、z_1m, mt_device , ; 编译内核镜像 (8)编辑linux- 2.6.24/drivers/net/arm/kconfig文件 在文件尾添加menuconfig中cs8900编译选项: config arm_cs8900 tristate cs8900 support depends on net_ethernet & arm & arch_smdk2410 help support for cs8900a chipset based ethernet cards. if you have a network (ethernet) card of this type, say

29、y and read the ethernet-howto,available from as wellas. to compile this driver as a module,choose m here and read. the module will be called cs8900.o. 编译内核镜像 (9)在linux- 2.6.24/drivers/net/arm/makefile 中添加 obj-$(config_arm_cs8900) += cs8900.o n以上文件修改完成后, 执行“make menuconfig”命令,对内核进 行如下配置: file systems

30、-(最重要的) pseudo filesystems - *virtual memory file system support(former shmfs) *tmpfs posix access control list miscellanneous file system - compressed rom file system support(cramfs) network file systems - 编译内核镜像 nfs file system support *provide nfsv3 client support *root file system on nfs smb fil

31、e system support (to mount windows shares etc.) cifs support (advanced network filesystem for samba,window and other cifs *cifs statistics device drivers - * network device support - ethernet (10 or 100mbit) - cs8900 support networking - networking options - packet socket *ip:dhcp support *network p

32、acket filtering framework(netfilter) 编译内核镜像 n完成以上配置后保存退出,执行命令“make zimage”编译,在arch/arm/boot/下生成内 核镜像zimage 用busybox制作ramdisk根文件系统 3、用busybox制作ramdisk根文件系统 nbusybox是一个unix工具集,可以提供一百多 种gnu常用工具、shell脚本工具等,甚至还集 成了一个http服务器和一个telnet服务器 nbusybox制作的根文件系统:短小精悍且运行 效率高,busybox仅需几百kb的空间就可以运 行,这使得busybox很适合嵌入式系

33、统使用 用busybox制作ramdisk根文件系统 nramdisk是通过使用软件将ram模拟当做硬盘来 使用的一种技术,使用ramdisk根文件系统, 可以极大地提高在其上进行的文件访问的速度 n下面介绍如何用busybox来制作ramdisk根文件 系统 n首先将busybox源码包busybox-1.7.0.tar.tar复制到 mysrc目录下, n解压缩后进入busybox-1.7.0目录, n修改makefile,把第175、176行改为: arch?= arm cross_compile?= arm-linux- n修改后保存退出, n执行命令“make defconfig”

34、做缺省配置,生成包含 全部默认选项的.config文件 用busybox制作ramdisk根文件系统 用busybox制作ramdisk根文件系统 n再执行命令“make menuconfig”,进行以 下配置: busybox settings - build options - * build busybox as a static binary (no shared libs) installation options - * dont use /usr busybox library tuning - *tab completion linux system utilities - *

35、 mdev * support /etc/mdev.conf * support command execution at device addition/removal shells - choose your default shell (msh) - 用busybox制作ramdisk根文件系统 n配置完后保存退出,修改文件 applets/applets.c 第 21 行, 将#error aborting compilation.注释掉: 执行“make install prefix=路径”即可在指 定目录下生成“_install”目录 n进入_install目录,可以看到bin、s

36、bin目录以 及linuxrc文件 n在_install目录下执行命令创建文件夹: mkdir proc mnt tmp sys root etc etc/init.d dev lib var 用busybox制作ramdisk根文件系统 n用vi新建etc/inittab文件,权限为644, 内容如下: :sysinit:/etc/init.d/rcs s3c2410_serial0:askfirst:-/bin/sh :shutdown:/bin/umount -a -r n新建etc/init.d/rcs文件,权限为755, 内容如下: mount -a mkdir /dev/pts m

37、ount -t devpts devpts /dev/pts echo /sbin/mdev /proc/sys/kernel/hotplug mdev -s 用busybox制作ramdisk根文件系统 n新建etc/fstab文件,内容如下: proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 nmdev通过init启动,在mdev创建/dev之前, init要用到/dev/console,/dev/nul

38、l,因此需 要执行命令创建它们: cd dev mknod console c 5 1 mknod null c 1 3 用busybox制作ramdisk根文件系统 n接下来复制/tmp/mydest/gcc-3.4.5-glibc- 2.3.6/arm-linux/arm-linux/lib目录下的4 个库和4个链接ld-2.3.6.so、ld- linux.so.2、libc-2.3.6.so、libc.so.6、 libcrypt-2.3.6.so、libcrypt.so.1、 libm-2.3.6.so、libm.so.6放到 _install/lib目录下 用busybox制作ra

39、mdisk根文件系统 n进入/root目录,执行以下命令:mkdir initrd dd if=/dev/zero of=initrd.img bs=1k count=8192 n设置分页大小为1k,一共8192页,即8m,大 小可以按照实际的 ram大小进行修改 /sbin/mke2fs -f -v -m0 initrd.img n在ramdisk上建立ext2文件系统。 mount -o loop initrd.img initrd n将已格式化的ramdisk挂载至目录initrd。 cp -av /tmp/mysrc/busybox-1.7.0/_install/* initrd n将

40、文件结构复制至ramdisk。 umount initrd 开发环境的建立开发环境的建立 嵌入式嵌入式linux2.4平台构建平台构建 镜像文件的烧写镜像文件的烧写 嵌入式嵌入式linux2.6平台构建平台构建 一、烧写nor flash n烧写前,需要先设置开发板的跳线,要烧写到 nor flash中,需要断开sw104跳线 n可以使用embest online flash programmer for arm烧写启动文件、内核镜像和文件系统到 nor flash中 烧写nor flash nflash programmer的使用方法是: n点击settings菜单中的configure来配

41、置 用于烧写的embest jtag仿真器参数 例如使用unetice仿真器,在configuration窗 口中remote device选择”unetice”, debug speed选择”full speed”, communication type选择”usb”。如图4- 17所示: 烧写nor flash 图4-17 配置仿真器参数 烧写nor flash n点击file菜单中的“open”菜单项,选择配置 文件。 例如烧写nor flash使用的配置文件为 edukit2410&am29lv160db.cfg,如图4-18所示: 烧写nor flash 图4-18 打开配置文件 烧写nor flash n选择program页,找到要烧写的文件, 例如要烧写vivi.nor,如图4-19所示。 烧写nor flash 图4-19 选择烧写文件 烧写nor flash n选择flash页,修改待烧写文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论