收藏 分销(赏)

嵌入式linux系统设计与开发实验指导书V1.5.doc

上传人:二*** 文档编号:4751770 上传时间:2024-10-11 格式:DOC 页数:95 大小:3.63MB
下载 相关 举报
嵌入式linux系统设计与开发实验指导书V1.5.doc_第1页
第1页 / 共95页
本文档共95页,全文阅读请下载到手机保存,查看更方便
资源描述
嵌入式Linux系统设计与开发 实验指导书 计算机学院 2010年4月 95 《嵌入式LINUX系统设计与开发》实验指导书纲要 1.目的 辅助《嵌入式linux系统设计与开发》理论教学,提高学生嵌入式方向的实验、实践操作能力及创新开发能力。 2.内容 章节 主要知识点 实验内容 实训目标及要求 学时 实验性质 实验级别 第一章 嵌入式linux开发基础 1. 开发平台简介 2. 开发流程 3. 构建嵌入式linux系统的环境 1. 熟悉嵌入式科研教学平台UP-Techpxa270s的使用 2. 构建嵌入式linxu系统开发环境 3. 通过minicom或超级终端进行宿主机及开发板的通讯并查看开发板系统目录 1. 掌握嵌入式LINXU系统开发流程 2. 掌握软硬件开发环境的建立及使用 2 验证性 必做 第二章 嵌入式linux系统基础 1. Makefile编写 2. Linux多线程库编程 3. 进程应用程序设计 1. Makefile与Helloworld 2. 生产者——消费者协议 3. 进程管理模拟实验 1. 熟练掌握makefile写法 2. 掌握linux c程序开发,具有使用多线程编程能力 3. 掌握进程应用程序的设计与实现 3 综合性 必做 第三章 嵌入式linux内核 1. Bootloader引导系统 2. Linux内核定制、裁剪及添加 3. 文件系统的构建 1. Blob的重新烧写 2. Linux内核裁剪及编译 3. 文件系统的构建 1. 理解ARM的初始化及引导过程 2. 熟练掌握内核定制、裁剪及添加 3. 掌握busybox构建文件系统 6 设计性 必做 第四章 嵌入式linux接口设计与驱动程序 1. 驱动程序结构 2. Framebuffer机制 3. 触摸屏 4. V4L 5. IDE_CF 6. Usb 1. 虚拟驱动模块实验 2. Lcd控制实验 3. Tslib移植和使用 4. Linux视频V4L驱动实验 5. CF模块、U盘接口实验 1. 熟练掌握驱动程序结构 2. 读懂并理解触摸屏、LCD、等驱动程序与测试程序的设计与编写 6 综合性 选做 第五章 嵌入式linux开源软件移植与应用 1. 嵌入式web服务器goahead 2. 嵌入式数据库SQLite 3. 嵌入式媒体播放器Mplayer 4. Web服务gSOAP 5. Web浏览器Konqueror 6. 开源软件移植的一般过程与注意事项 1. 嵌入式web服务器goahead实验 2. SQLite移植实验 3. Mplayer到ARM平台上的移植 4. Web服务gSOAP实验 5. Web浏览器Konqueror移植 1. 掌握开源软件移植的一般过程 2. 理解相关软件的版本与依赖关系,包括交叉编译器 6 综合性 选做 第六章 嵌入式linux下的通信应用 1. 串口通信 2. 网络通信 3. 蓝牙通信 4. Can总线通信 5. GPRS/GPS通信 1. 串口通信实验 2. socket相关程序设计 3. 蓝牙通信实验 4. Can总线实验 5. GPRS/GPS通信实验 1. 掌握四种常用的通信方式,理解相关的程序设计思路与实现方式 2. 透彻理解can总线原理,熟练掌握基于该总线下的程序设计 6 综合性 选做 第七章 嵌入式图形界面用户编程——QT 1. 嵌入式GUI 2. QT/QTE移植与程序设计 3. Qtopia平台的移植和编程操作 1. Qt图形界面相关程序设计 2. 电子点菜系统 1. 理解QT/QTE与Qtopia的移植过程和相应程序设计方法 2. 掌握qt与qtopia的程序设计 3 设计性 选做 第八章 综合项目实例 1. 嵌入式linux系统的一般设计与开发过程 2. 综合项目开发实践 1. 基于嵌入式平台的电梯监控系统 2. 基于蓝牙的无线点菜系统 3. 基于嵌入式与web service的智能家居系统 1. 掌握嵌入式linux系统一般设计与开发过程 2. 掌握按格式要求,撰写高质量的设计与开发报告,体会软件工程过程 3. 培养学生良好的团队协作精神 4. 培养学生对实际嵌入式项目良好的独立思考和解决问题的能力 - 设计性 选做 3.参考教材 l UP-TECHPXA270-S-LINUX实验指导书 博创科技 l 俞辉 嵌入式linux实验实例实例教程 机械工业出版社 目录 第一章 嵌入式LINUX开发基础 5 1. 开发平台简介 5 2. 嵌入式Linux 开发流程 7 实验1.1:建立嵌入式linux系统开发环境 8 第二章 嵌入式LINUX系统基础 19 实验2.1:Makefile和Hello world 19 实验2.2:多线程应用程序设计——生产者-消费者协议 22 第三章 嵌入式LINUX内核 26 实验3.1:引导装载程序(BOOTLOADER)移植实验-BLOB 26 实验3.2:Linux 内核移植与编译实验 33 实验3.3:文件系统实验 36 第四章 嵌入式LINUX接口设计与驱动程序 44 实验4.1:虚拟驱动模块实验 44 实验4.2:LCD控制实验 50 实验4.3:触摸屏驱动实验 58 实验4.4:IDE_CF卡模块读写实验 63 实验4.5:U盘接口实验 66 第五章 嵌入式LINUX开源软件移植与应用 70 实验5.1:嵌入式web服务器goahead实验 70 实验5.2: SQLite移植实验 71 实验5.3: Mplayer到ARM平台上的移植 72 实验5.4: Web服务gSOAP实验 72 实验5.5: Web浏览器Konqueror移植 73 第六章 嵌入式LINUX下的通信应用 75 实验6.1:串行端口程序设计 75 实验6.2:网络传输实验 77 实验6.3:蓝牙无线通讯实验 79 实验6.4:CAN总线实验 86 第七章 嵌入式图形界面用户编程——QT 88 实验7.1:Qt图形界面相关实验 88 实验7.2: 89 实验7.3: 91 第八章 综合项目实例 93 实验8.1: 93 实验8.2: 94 实验8.3: 94 第一章 嵌入式linux开发基础 1. 开发平台简介 嵌入式linux系统的实验实践教学中,使用的是pxa270平台。如图,图1-1为up-techpxa270s实验箱正视图。 基于Intel XSCALE 架构最新的PXA270 嵌入式微处理器最高主频可达624MHz,加入了Wireless MMX 技术,大大提升了多媒体处理能力;同时PXA270 还加入了Intel SpeedStep动态电源管理技术,在保证CPU 性能的情况下,最大限度地降低移动设备功耗。PXA270可以广泛应用于PDA、智能手机、PMP 产品中。 图1-1:Up-techpxa270-S实验箱正视图 博创科技的UP-TECHPXA270 教学科研平台主要是面向计算机、软件专业的高端平台,微处理器主频稳定运行在520MHz,可运行WinCE5.0 和Linux 2.6.x 操作系统,支持QT/E、miniGUI 等嵌入式图形界面,提供完整的驱动和应用程序。 UP-TECHPXA270 教学科研平台由处理器核心板、主板及LCD 三部份组成。 UP-TECHPXA270 核心模块资源: 􀂾 基于Intel XScale 架构内核的嵌入式处理器PXA270,内部集成iwmmx 指令,加速处理 器对多媒体数据的 处理速度。 n 系统稳定工作在520MHZ 主频 n 64MB SDRAM、16MB Nor Flash、64MB Nand Flash 库 n UP-TECHPXA270 主板资源: n 10M/100M 以太网 n AC97 音频接口 n 8”TFT LCD,分辩率为640x480 n VGA 接口 n USB 主(host)接口4 个,从(device)接口1 个 n CF 卡接口 n IDE 接口 n SD 卡接口 n PCMCIA 接口(可以扩展有线/无线网路接口等) n PS2 鼠标键盘接口 n CMOS 摄像头接口 n 触摸屏(四线电阻式) n 2 个RS232 标准串口 n JTAG 接口(包括14Pin 和20Pin 标准) n 32 位扩展总线接口,和UP-NetARM2410、UP-NetARM2410-S 平台兼容。 n irDA 接口 n 实时时钟 n IIC、SPI 接口 开箱指南 博创科技UP-TECHPXA270 教学科研平台包含以下部分:开发板、电源、网线、串口线、并口线、并口JTAG 转换线、随机附带光盘。 UP-TECHPXA270 软件资源: n bootloader:blob n 操作系统:linux 2.4.x 和linux 2.6.x 内核 UP-TECHPXA270 应用软件: n mplayer 媒体播放器,实现MPEG4、AVI、WMV 等多种媒体解码。 n GUI:QT/E、miniGUI n 摄像头视频采集 硬件连接 1.UP-TECHPXA270 外围端口说明 n 电源:电源输入插座,直流电9V-12V 输入。 n 串口1,对应了PXA270 处理器的Bluetooth 功能的串口,三线串口标准。 n 串口0,对应了PXA270 处理器的全功能串口,九线串口标准。 n VGA 接口,可以直接和显示器,投影仪等连接。DB19 阴性插座标准。 n USB 主控(host)端口4 个,包括过流保护和ESD 保护,支持热插拔。 n 主板上FPGA,使用Altera 公司的cyclone 系列EP1C3T144。 n USB 设备(device)端口 n 8、10/100M 自适应以太网接口 n 主板上FPGA 的编程接口 n pxa270 的JTAG 接口,包括14Pin 和20Pin 两种标准 n LCD 背光逆变器模块,注意高压! n 12、168Pin 扩展总线插座 n 13、6x6 键盘扫描接口 n 14、PS/2 鼠标键盘接口 n 15、触摸屏接口, n 16、CF 卡接口,此CF 卡工作在IDE 模式。和背面的IDE 硬盘接口公用一个IDE 通道。默认情况下CF 为主IDE 设备,IDE 硬盘为从IDE 设备。 n 17、扩展LCD 接口,支持TFT 、CSTN 等LCD 模式 n 18、MMC 卡接口。 n 19、板载MIC 接口。当音频插座连接以后,MIC 输入自动切换到音频插座。 n 20、音频输入输出插座。 n 21、音量调节电位器旋钮。 n 22、PCMCIA 接口,通过转接器可以支持CF 卡。 n 23、复位按钮。 n 24、电源按钮。其工作模式类似于ATX 电源。系统插上电源,按一下此轻触开关,系统上电。再按一下此轻触开关,系统电源关闭。当系统起来以后,可以通过控制FPGA 寄存器,死锁电源按钮(即,单击轻触开关,对系统没有影响)。但是,可以通过长按此开关3 秒钟,使系统电源关闭。 2.系统硬件资源分配 外设 说明 bank 物理地址范围 总线 中断数 Nor flash 系统启动,存储操做系统内核、参数等信息 0 0x0—0x1000000 16 位 0 Nand Flash 系统的海量存储 1 0x04000000-0x04000008 16 位 0 FPGA 管理系统中断等外设 2 0x08000000-0x08000400 32 位 注1 IDE 系统IDE 和CF 接口 2 0x08800000-0x08800040 32 位 1 PCMCIA 16 位PCMCIA 接口 (3) 0x20000000—0x30000000 16 位 2 网卡 SMC91c111,10/100M 网卡芯片 4 0x10000000—0x10010000 32 位 1 连接系统 首先,连接电源,将随机附带的一根电源线的一头插入到UP-TECHPXA270-S 的电源接口,将电源线的另外一端插入到电源插座中;然后连接串口线,一端连接PC 的串口,另一端连接到如图1所示的串口;最后连接网线,将随即附带的灰色的网线一端连接到UP-TECHPXA270 的网口(靠近电源的),另一端连接到本地的局域网中。 提示:a. UP-TECHPXA270-S 具有两个串口,分别为UART0 和UART1,在本手册中使用UART0,即 下方的串口。 b.随机附带的的网线用作直接连接UP-TECHPXA270-S 和PC c.FPGA 通过PAX270-S 处理器的GPIO0 扩展中断 2. 嵌入式Linux 开发流程 在一个嵌入式系统中使用linux 开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过如下的过程: ① 建立开发环境,操作系统一般使用REDHAT-LINUX,版本7 到9 都可以,选择定制安装或全部安装,通过网络下载相应的GCC 交叉编译器进行安装(比如arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译器。 ② 配置开发主机,配置MINICOM,一般的参数为波特率115200,数据位8 位,停止位1,无奇偶校验,软件硬件流控设为无。在WINDOWS 下的超级终端的配置也是这样。MINICOM 软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络,主要是配置NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。 ③ 建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT 等,根据自己具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如三星的ARM7、ARM9 系列芯片,这样就需要编写烧写开发板上FLASH 的烧写程序,网络上有免费下载的WINDOWS 下通过JTAG 并口简易仿真器烧写ARM 外围FLASH 芯片的烧写程序。也有LINUX 下的公开源代码的J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果你购买了厂家的仿真器当然比较容易烧写FLASH 了,这对于需要迅速开发自己的应用的人来说可以极大提高开发速度,但是其中的核心技术是无法了解的。 ④ 下载别人已经移植好的LINUX 操作系统,如UCLINUX、ARM-LINUX、PPC-LINUX 等,如果有专门针对你所使用的CPU 移植好的LINUX 操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带MMU 的CPU 可以使用模块方式调试驱动,对于UCLINUX 这样的系统好像只能编译进内核进行调试。 ⑤ 建立根文件系统,从 下载使用BUSYBOX 软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc 目录下,包括: /etc/init.d/rc.S 、/etc/profile 、/etc/.profile 等, 自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs genromfs 等工具产生烧写映象文件。 ⑥ 建立应用程序的FLASH 磁盘分区,一般使用JFFS2 或YAFFS 文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性FLASH(NOR 型)512K-32M,有的系统使用非线性FLASH(NAND 型)8-512M,有的两个同时使用,需要根据应用规划FLASH 的分区方案。 ⑦ 开发应用程序,可以放入根文件系统中,也可以放入YAFFS、JFFS2 文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于UCOS-II 的方式。 ⑧ 烧写内核、根文件系统、应用程序。 ⑨ 发布产品。 实验1.1:建立嵌入式linux系统开发环境 一、实验目标: 1.熟悉linux操作系统的使用。 2.掌握嵌入式系统开发环境的建立。 二、预备知识: 掌握linux的基本操作。 三、实验环境: 1.硬件:UP-TECHPXA270-S 嵌入式开发板、PC 机Pentumn500 以上, 硬盘10G 以上。 2.软件:PC 机操作系统REDHAT LINUX federal 8.0(或 REDHAT LINUX 9.0) +MINICOM + ARM-LINUX 开发环境 四、情景描述: 配置网络,配置FTP,配置NFS及使用超级终端。 五、实验步骤: 1. 配置网络 配置网络,包括配置IP 地址、NFS 服务、防火墙。网络配置主要是要安装好以太网卡,对于一般常见的RTL8139 网卡,REDHAT9.0 可以自动识别并自动安装好,完全不要用户参与,因此建议使用该网卡。然后配置宿主机IP 为192.168.0.121。如果是在有多台计算机使用的局域网环境使用此开发设备,IP 地址可以根据具体情况设置。如图1.4-1 所示: 图1.4-1 网络配置 双击设备eth0 的蓝色区域,进入以太网设置界面,如图1.4-2,1.4-3 所示: 图1.4-2 以太网常规设置界面 图1.4-3 以太网路由设置界面 对于REDHAT9.0,它默认的是打开了防火墙,因此对于外来的IP 访问它全部拒绝,这样其它网络设备根本无法访问它,即无法用NFS mount 它,许多网络功能都将无法使用。因此网络安装完毕后,应立即关闭防火墙。操作如下:点击红帽子开始菜单,选择安全级别设置,选中无防火墙。如图1.4-4 所示: 图1.4-4 安全级别设置 在系统设置菜单中选择服务器设置菜单,再选中服务菜单,将iptables 服务的勾去掉,并确保nfs 选项选中。 2. 配置NFS: 点击主菜单运行系统设置->服务器设置->NFS 服务器(英文为:SETUP->SYSTEM SERVICE->NFS),点击增加出现如下在界面,在目录(Drictory):中填入需要共享的路径,在主机(Hosts):中填入允许进行连接的主机IP 地址。并选择允许客户对共享目录的操作为只读(Read-only)或读写(Read/write)。如图1.4-5 所示: 图1.4-5 NFS 基本设置 下图1.4-6 是一些常规选项设置,可以作如下设置。 图1.4-6NFS 常规设置 下图1.4-7 是对客户端存取服务器的一些其他设置,按下图设置。 图1.4-7 NFS 用户访问设置 当将远程根用户当作本地根用户时, 对于操作比较方便,但是安全性较差。最后点确定退出时则完成NFS 配置。配置好后,界面应显示如下图1.4-8 所示: 图1.4-8 配置好的NFS 我们也可以手工编写/etc/exports 文件,其格式如下:共享目录 可以连接的主机(读写权限,其他参数)例如:/up-techpxa270 192.168.0.*(rw,sync)表示将本机的/up-techpxa270 目录共享给ip 地址为192.168.0.1-192.168.0.254 的所有计算机,可以读取和写入。修改好后保存,可以用以下命令开启nfs 服务:/etc/rc.d/init.d/nfs restart配置完成后,可用如下办法简单测试一下NFS 是否配置好了:在宿主机上自己mount 自己,看是否成功就可以判断NFS 是否配好了。例如在宿主机/目录下执行:mount 192.168.0.121:/ up-techpxa270 /mnt/nfs其中192.168.0.121 应修改为您自己主机的IP 地址。然后到/mnt/目录下看是否可以列出/up-techpxa270 目录下的所有文件和目录,可以则说明mount 成功,NFS 配置成功。 3. 配置主机的TFTP 服务 方法(一):用vi 打开“/etc/xinetd.d/tftp”,做相应的修改。 vi /etc/xinetd.d/tftp 如下图示: 图 1.4-9 方法(二) :键入setup ;选择“System services”; 启用相应的服务。 图 1.4-10 图 1.4-11 重启xinetd 服务: /etc/rc.d/init.d/xinetd restart Pxa270 板的配置: 4.设置PC 机minicom 1) 在linux 平台的X window 界面下建立一个终端(右键点击屏幕——>新建终端),在终端的命令行提示符后键入minicom,回车,您就会看到minicom 的启动画面(见图1.4-12)。若没有启动X window 则在命令行提示符后直接键入minicom。 图1.4-12 minicom 启动画面 2) minicom 启动后,先按Ctrl+A 键,再按Z 键(注意不是连续按,Ctrl+A 松开后才按Z),进入 主配置界面(见图1.4-13)。按”O”进入配置界面(见图1-17),按上下键选择Serial port setup, 进入端口设置界面,这里有几个重要选项改为如下值(见图1.4-14): (在Change which setting 后按哪个字母就进入哪项的配置,如按A 进行端口号配置。) A————Serial Device :/dev/ttyS0 (端口号使用串口1) E————BPS/par/bits :/115200 8N1 (波特率) F,E 硬件流,软件流都改为NO,若要使用PC 机的串口2 来接板子的串口1 做监控,改为: /dev/ttyS1 即可。 3) 选好后按ESC 键退出到图1.4-14 所示画面,选择Save setup as df1 保存退出,以后只要启动minicom 就是该配置,无需再做改动。 图1.4-13 主配置界面 图1.4-14 配置界面 图1.4-15 端口设置界面 2.通过minicom 终端对pxa270 板进行网络设置。 连接好开发板连线,上电,通过PC 机minicom 口,以root 身份登陆。 用ifconfig 命令查看当前开发板IP 的设置。修改/etc/rc.sysinit 文件中ifconfig eth0 192.168.0.102 为您自己想要的IP 地址。这里按照缺省的IP 设置值:192.168.0.102。 3.重启开发板,通过终端从PC 机ping 目标板的IP,确保网络连线通畅。 4.将主机中/up-techpxa270 挂载到开发板的/mnt/nfs. mount -o nolock 192.168.0.121:/ up-techpxa270 /mnt/nfs (其中的IP 是主机的, 依个人设置填写) n Windows平台下设置调试串口 首先需要连接PC 串口,进行PC串口设置。连接串口至PC 相应接口,另一端连接在硬件平台的Uart0 上。确认连接无误。打开超级终端软件,进入如下图1-13 所示界面: 图1-13 填入连接名,选择图标,点击“确定”,如下图1-14 所示。 图1-14 连接时选择通讯使用串口,有的PC 可能有两个串口,使用时请确认选择已连接到平台的串口。点击“确定”。 修改波特率为115200bps,数据流控制为“无”,结果如下图1-15 所示: 图1-15 之后点击“确定”。开启PXA270-S 硬件平台电源,监视超级终端输出,等待系统启动,表示配置完毕。如下图1-16 所示。 图1-16 ➔ 挂载RAMFS 分区 RamDisk 是把内存的一部分分配作为一个分区使用。换句话说,把用户的一部分内存,作为一 个硬盘驱动器使用,用户可以格式化,挂载,保存文件等等。RAMFS 就是用于RamDisk 的文件系统。 系统按照默认方式启动的时候,会挂载一个ramfs的文件系统:/tmp。使用者可以按照些下面的 做法,在其它的挂载点上挂载其它的ramfs文件系统: % mkdir -p /ram1 % mount -t ramfs none /ram1 文件传输命令ftp: 5.配置主机的ftp: 􀁶 1.键入setup,选择system services 选项,启用vsftpd 功能。 图 1.4-16 2.启用vsftpd 功能:/etc/rc.d/init.d/vsftpd restart 􀁶 重启机器。 􀁶 使用ftp 服务:(用命令行方式) 1. 用ftp 命令登陆开发板。(开发板的IP:192.168.0.102) 首先启动开发板的网络服务,启动后输入:inetd 然后宿主机端输入: ftp 192.168.0.102 2.以root 用户登陆,无密码. 3.常用命令: 􀁼 cd : 切换ftp 服务器的目录; 􀁼 bye :结束ftp 传输模式; 􀁼 dir (或ls): 显示目录中的文件及子目录列表; 􀁼 get : 下载单一文件; 􀁼 mget:下载多个文件; 􀁼 put: 上传单一文件; 􀁼 mput:上传多个文件; 􀁼 pwd:显示当前目录; 􀁼 mkdir:添加子目录; 􀁼 rmdir:删除子目录; 􀁼 ! :表示执行本机命令;(例如:!mkdir:表示在本机上建目录) 六、思考题: 第二章 嵌入式linux系统基础 实验2.1:Makefile和Hello world 一、实验目标: 1.学会使用makefile 管理项目 2.熟悉arm-linux-gcc交叉编译的使用 二、预备知识: C 语言的基础知识、程序调试的基础知识和方法,LINUX 的基本操作。 三、实验环境: 1.硬件:UP-TECHPXA270-S 嵌入式开发板、PC 机Pentumn500 以上, 硬盘10G 以上。 2.软件:PC 机操作系统REDHAT LINUX federal 8.0(或 REDHAT LINUX 9.0) +MINICOM + ARM-LINUX 开发环境 四、情景描述: 创建一个新目录,并且编写hello.c,start.c和Makefile等文件。之后将已经编写好的文件下载到开发板上运行。 五、实验步骤: 1. 建立工作目录 mkdir 01_hello cd 01_hello 2. 编写程序源代码 在LINUX 下的文本编辑器有许多,常用的是vim, Xwindow 界面下的gedit 等,我们在开发过程中推荐使用vim,用户需要学习vim 的操作方法,请参考相关书籍中的关于vim 的操作指南。 本实验是在终端上打印出一个菱形.一个三角形(由*号构成)及打印一行字符hello,my friends。 主函数文件为start.c: #include "starfun.h" #include "hello.h" #include <stdio.h> int main() { star1(); star2(); showhello(); return 0; } 其中所包含的头文件为:hello.h,starfun.h,stdio.h 在starfun.h 中定义了两个函数star1(),star2()打印两个三角形: #ifndef STARFUN_H #define STARFUN_H #define NUM 4 #define NUMBER 3 int star1() { int i,j,k; for(k=1;k<=NUM;++k) { for(i=1;i<=(NUM-k);++i) printf(" "); for(j=1;j<=(2*k-1);++j) printf("*"); printf("\n"); } return 0; } int star2() { int i,j,k; for(k=NUMBER;k>=0;--k) { for(i=1;i<=(NUMBER-k+1);++i) printf(" "); for(j=1;j<=(2*k-1);++j) printf("*"); printf("\n"); } return 0; } #endif 在hello.h 中定义了一个函数hello(),此函数中又调用了starfun()中的star1()函数用来打印一 个三角形. #ifndef HELLO_H #define HELLO_H void hello() { star1(); printf("hello,my friends\n"); } #endif 在hello.c 中对hello 函数进行了调用. void showhello() { hello(); } 3. 编写makefile 文件 由于交叉引用函数很复杂,因此编写了一个简单的makefile 来组合这些头文件及主程序,将此 makefile 命名为:amake。因为所编写的程序要在pxa270 板上运行,因此指定了交叉编译器。 具体的编写如下: #amake file CC= arm-linux-gcc #指定编译器 EXEC=myprog #定义目标文件名 OBJS=star.o hello.o #为生成目标所使用的.o 文件 $(EXEC):$(OBJS) #目标与.o 文件的依赖关系 $(CC) -o $(EXEC) $(OBJS) #生成可执行文件 star.o:starfun.h star.c #star.o 依赖starfun.h,star.c $(CC) -c star.c #生成star.o hello.o:starfun.h hello.h hello.c #hello.o 依赖starfun.h,hello.h,hello.c $(CC) -c hello.c #生成hello.o clean: #clean 伪目标 rm -f *.o $(EXEC) #执行make -f amake clean 时删除所有的.o 文件 4.编译应用程序 在终端上使用make -f amake 命令即可生成名为star 的可执行文件. 如果进行了修改,重新编译则运行: make clean –f amake make -f amake 注意编译、修改程序都是在开发计算机上进行,不要在MINICOM 的终端方式下进行。 5.下载调试 在宿主PC 计算机上启动NFS 服务,并设置好共享的目录,之后在开发板上运行: mount -o nolock 192.168.0.121:/ up-techpxa270 /mnt/nfs (实际IP 地址要根据实际情况修改,确保宿主机和开发板在同一网段)。挂接宿主机的根目录。成功之后在开发板上进入/mnt 目录,便相应进入宿主机的/up-techpxa270 目录,再进入开发程序目录运行刚刚编译好的hello 程序,查看运行结果。 开发板挂接宿主计算机目录只需要挂接一次便可,只要开发板没有重启,就可以一直保持连接。这样可以反复修改、编译、调试,不需要下载到开发板的过程,当然当调试好程序后,你也可以下载到开发板运行。 六、思考题: 分析01_hello 目录下的Makefile_rule 文件和上一级目录下的Rules.mak 文件,并查阅相关参考书,学习makefile 文件的编写,并尝试用make –f Makefile_rule 命令编译。查阅相关参考书,分析01_hello 目录下的makefile_03 文件的语法,尝试用make –f makefile_03 命令编译,并运行生成的myprog 应用程序,看是否和上边的运行结果一致,体会makefile 项目管理方式的优点。 实验2.2:多线程应用程序设计——生产者-消费者协议 一、实验目标: 1.了解多线程程序设计的基本原理。 2.学习pthread 库函数的使用。 二、预备知识: 1. 有C 语言基础。 2. 掌握在Linux 下常用编辑器的使用。 3. 掌握Makefile 的编写和使用。 4. 掌握Linux 下的程序编译与交叉编译过程 三、实验环境: 1.硬件:UP-TECHPXA270-S 嵌入式开发板、PC 机Pentumn500 以上, 硬盘10G 以上。 2.软件:PC 机操作系统REDHAT LINUX federal 8.0(或 REDHAT LINUX 9.0) +MINICOM + ARM-LINUX 开发环境 四、情景描述: 读懂pthread.c 的源代码,熟悉几个重要的PTHREAD 库函数的使用。掌握共享锁和信号量的使用方法。 五、实验步骤: 1.进入exp/basic/02_pthread 目录,使用vi 编辑器或其他编辑器阅读理解源代码。 2.运行make 产生pthread 可执行文件。 3.切换到minicom 终端窗口,使用NFS mount 开发主机的/up-techpxa270 到/mnt 目录。 4.进入/mnt/exp/basic/pthread 目录,运行./pthread,观察运行结果的正确性,若显示结果太快,可以用以下命令输出显示结果到pthread.txt 文件./pthread >pthread.txt,然后再用cat pthread.txt 察看文件内容,结合程序分析结果。 5.修改一些参数,再次运行调试,加深对多线程的理解。 6.参考源代码: #include <stdio.h> #include <stdlib.h> #include <time.h> #include "pthread.h" #define BUFFER_SIZE 16 /* Circular buffer of integers. */ struct prodcons { int buffer[BUFFER_SIZE]; /* the actual data */ pthread_mutex_t lock; /* mutex ensuring exclusive access to buffer */ int readpos, writepos; /* positions for reading and writing */ pthread_cond_t notempty; /* signaled when buffer is not empty */ pthread_cond_t notfull; /* signaled whe
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服