嵌入式Linux应用程序开发实验报告期末作业

嵌入式Linux应用程序开发实验报告期末作业
嵌入式Linux应用程序开发实验报告期末作业

软件学院大作业设计报告课程名称:

题目:专业:班级:姓名学号:

基于UP-CUP2440平台的驱动程序开发和QT程序开发

计算机软件

计算机软件111班

鲁飞8000611038 卢惠民8000611021 戚成林8000611032 慕一聪8000611018 刘备8000611006

李岚职称:副教授

2014年6月11日

嵌入式Linux应用程序开发

任课教师: 完成时间:

一、小组成员分工

二、实验任务

三、主要仪器设备及耗材

四、实验步骤

、驱动

1. 基本知识:

2. 实验原理:

3. 具体实现:

二、QT计算器

1.QT程序设计

2. 虚拟机下进行编译:

3. 下载到开发板上运行:

六、实验数据及处理结果10 15

17

18

七、思考讨论题或体会或对改进实验的建议18

19

八、参考资料:

、小组成员分工

分工:

鲁飞:QT设计与设计报告卢惠民:QT设计与设计报告戚成琳:驱动与设计报告慕一聪、刘备:设计报告

二、实验任务

1?编写基于UP-CUP2440硬件平台的GPIO驱动程序

必选功能:使中断按键按下后,开发板上的LED灯能作如下闪动:

a)连续性闪动,跑马灯:如:1-2-3-1-2-3…或3-2-1-3-2-1

b)间隔性闪动:如:1-3-2-1-3-2…或3-1-2-3-1-2…

进阶功能:改变中断按键的控制功能,使中断按键按下后,LED灯不断闪亮,再

次按下后,LED灯灭。

2.QT计算器

三、主要仪器设备及耗材

PC, Windows Xp , H-JTAG,H-Flasher,DNW,开发实验箱。

四、实验步骤

、驱动

思路:

前后台思想:

在中断模块中设置一个计数的变量,每一次中断计数器加一。

然后在GP10驱动模块的ioctIO函数中分情况使跑马灯按要求闪动或熄灭。

1. 基本知识:

(3)

(4)

间的关

联。

(5)打开设备和释放设备,没什么要特别注意的。

(6)读写设备:把内核空间的数据复制到用户空间去,或者从用户空间复制到内核空间。

read()里面使用copy_to_user()就可以将内核空间的值传到用户空间去。这一点在本实验的驱动程序的实现中起着至关重要的作用。

(7)ioctl()则是对10寄存器的控制,在本实验中就要用ioctl()来实现不同的跑马灯亮灭。

2. 实验原理:

UP-「liP2轴】开发平3个【iPM】悴制的l.HD.和I个町白搖产乍外帑砸件中啊的技犍?LEU 井别惶用

S3C24HySJC2440 (JPLS GPLb, GPC7 (PXA27O 的

T

itf

10

Regilbr Adcfrwt R/用OaicrvtiQn A?t?t Vilwa

GPCCON Q?56000020FVW S'lgwM lhe pins of CKjrtC iQjiO

GPCDAT it50OOOO£-i R/W fne dalfl reg ster fty nqrt C Uhdert,

GPCJP Q>i5a0G002B R/W Pull-J p diMtrtr iifugaler feir pad C mo

BEservod脚500000比———

GPC7[15:14]00 = Input

10 = LCD'LPCREVB 01 = Output 11 = Reserved

GPC6[13:12]00 = Input

10 = LCD LPCREV 01 = Output 11 = Reserved

[11:10]00 = Input

10 = LCD_LPCOE 01 = Output 11 = Reserved

设备驱动程序可以使用模块的方式动态加载到内核中去。

模块的必需组成部分:

模块加载函数,insmod时调用。

模块卸载函数,rmmod时调用

模块许可证LICENSE说明

数据结构file_operation 中定义驱动程序会使用的函数。

在获得了系统分配的设备号之后,必须要通过注册才能实现设备号和驱动程序之

Q'fll

IfU Q

3. 具体实现:

(一)中断驱动模块:

该模块只需在老师给的实例的基础上加以修改就行。

(1)模块初始化函数中,请求中断处理函数:

ret = request_irq(S3C2440_IRQ5, s3c2440_IRQ3_fu n, SA_INTERRU PT,

"S3C2440_IRQ5", NULL);

中断处理函数为:

s3c2440_IRQ3_fu n()

在此中断处理函数中,用一个全局变量cou nt在每一次中断的时候加1,由于我们的开发板按一次会处理两次,所以计数到7的时候,必须使count恢复到1。

具体实现如下:

int coun t=0;

irqreturn_t s3c2440_IRQ3_fu n (int irq, void *dev_id, struct pt_regs *reg)

{

prin tk("e nter interrupt 5 !\n ”);

coun t++;

if(co un t==7)

coun t=1;

}

(2)设备初始化:

static int __init s3c2440_interrupt_in it(void)

{

in t ret; int flags; local_irq_save(flags);

// by sprife

s3c2410_g pio_cfgpin( S3C2410_G PF5, S3C2410_G PF 5_EINT5);

s3c2410_g pio_pullu p(S3C2410_G PF5,1);

// end

set_irq_ty pe(S3C2440_IRQ5,/*IRQT_FALLING*/IRQT_LOW);

local_irq_restore(flags);

ret = request_irq(S3C2440_IRQ5, s3c2440_IRQ3_fu n, SA_INTERRU PT,

"S3C2440_IRQ5", NULL); if (ret)

{

printk("S3C2440_IRQ5 request_irq failure");

return ret;

} printk(DEVICE_NAME " int05 initialized\n"); return 0;

3)设备退出:static void __exit s3c2440_interrupt_exit(void)

{ free_irq(S3C2440_IRQ5,NULL); printk(DEVICE_NAME " unloaded\n");

}

module」nit ()注册设备

module_exit ()卸载设备还有

LICENSE 必须要设置:

( 4)

( 5)

( 6)

MODULE_LICENSE("GPL");

本模块最需要注意的地方:因为count 是要导出给其他模块用的,所以必须使用

EXPORT_SYMBOL_GPL(count);

这就是我出错的地方之一。

(二)GPIO 驱动:

( 1)结构体file_operation 的定义:struct file_operations gpio_fops = {

.owner = THIS_MODULE,

.open = gpio_open, .ioctl = gpio_ioctl, .read = gpio_read, .release = gpio_release, };

( 2) GPIO 的模块加载部分:必须完成字符设备的注册。

需要调用gpio_setup_cdev(),该函数用于字符设备的创建和注册函数。首先要定义结构体变量:static struct cdev gpio_cdev;

该函数的具体实现:

static void gpio_setup_cdev(struct cdev *dev, int minor, struct file_operations *fops) { int err, devno = MKDEV(major, minor); cdev_init(dev, fops);

dev->owner = THIS_MODULE;

dev->ops = fops;

err = cdev_add(dev, devno, 1); if(err) {

printk(KERN_NOTICE "Error %d adding gpio %d", err, minor);

}

}

( 3) int gpio_open(struct inode *inode, struct file *filp) 打开设备时,就要设置 GPIO 口的电平。 设置相应的 GPIO 口为输出模式。 具体代码如下:

int gpio_open(struct inode *inode, struct file *filp)

{

s3c2410_gpio_pullup(S3C2410_GPC5, 0);

s3c2410_gpio_pullup(S3C2410_GPC6, 0); s3c2410_gpio_pullup(S3C2410_GPC7, 0);

s3c2410_gpio_cfgpin(S3C2410_GPC5, S3C2410_GPC5_OUTP); s3c2410_gpio_cfgpin(S3C2410_GPC6, S3C2410_GPC6_OUTP); s3c2410_gpio_cfgpin(S3C2410_GPC7, S3C2410_GPC7_OUTP); return 0;

}

( 4) ssize_t s3c240_gpio_read(struct file *filp, char *buf, size_t cnt, loff_t *f_pos) 该函数要将

count 值传到用户空间去,在用户空间里调用ioctl()函数时就需要count 值。 具体实现: ssize_t s3c240_gpio_read(struct file *filp, char *buf, size_t cnt, loff_t *f_pos) {

int err;

if(err = put_user(count, buf) < 0) return err; return cnt;

}

(5)接下来就是实现跑

马灯控制的ioctl() 了, 如果count 为1时, 如果count 为3时, 如果count 为5时, 具体代码实现如下:

int gpio_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) {

switch(count)

{

case 1:

s3c2410_gpio_pullup(S3C2410_GPC5, 0); s3c2410_gpio_pullup(S3C2410_GPC6, 1); s3c2410_gpio_pullup(S3C2410_GPC7, 1); mdelay(200);

s3c2410_gpio_pullup(S3C2410_GPC5, 1); s3c2410_gpio_pullup(S3C2410_GPC6, 0); s3c2410_gpio_pullup(S3C2410_GPC7, 1); mdelay(200);

s3c2410_gpio_pullup(S3C2410_GPC5, 1); s3c2410_gpio_pullup(S3C2410_GPC6, 1); s3c2410_gpio_pullup(S3C2410_GPC7, 0); break;

则实现按 1,2,3 顺序不断亮灭。 则实现按 1,3,2 跳跃式不断亮灭。 则关闭所有 led 灯。

case 3:

s3c2410_gpio_pullup(S3C2410_GPC5, 0);

s3c2410_gpio_pullup(S3C2410_GPC6, 1);

s3c2410_gpio_pullup(S3C2410_GPC7, 1);

mdelay(200);

s3c2410_gpio_pullup(S3C2410_GPC5, 1);

s3c2410_gpio_pullup(S3C2410_GPC6, 1);

s3c2410_gpio_pullup(S3C2410_GPC7,0);

mdelay(200);

s3c2410_gpio_pullup(S3C2410_GPC5, 1);

s3c2410_gpio_pullup(S3C2410_GPC6, 0);

s3c2410_gpio_pullup(S3C2410_GPC7, 1);

break;

case 5:

s3c2410_gpio_pullup(S3C2410_GPC5, 1);

s3c2410_gpio_pullup(S3C2410_GPC6, 1);

s3c2410_gpio_pullup(S3C2410_GPC7, 1);

break;

default:

break;

卸载模块

LICENSE 设置

(三)测试代码的实现:打开GPIO 设备

若打开成功则在while(1)循环里调用read(),再调用ioctl(). 具体代码如下:#include

#include

#include

#include #include

#include int main(void)

{

fd=open("/dev/gpio",0_RDWR | 0_N0NBL0CK); if(fd<0)

{

perror("open /dev/gpio error!\n"); exit(1);

}

printf("open /dev/gpio sucessfully!\n"); while(1)

{

read(fd, &count, 1); ioctl(fd, 0, 0);

}

return 0;

}

(四)两个模块的 Makefile :

只需分别修改一下Targe ,生成的模块名,和可执行文件就行。 2.操作过程: (1) (2) (3) (4) (5) mknod /dev/gpio c 241 0

(6) 再回到 int 目录下,也生成结点。

mknod /dev/int c 240 0 (7) (8) (9)

QT 计算器

QT 计算器的开发环境主要是 VMware 下的编译、 xp 下的超级终端、以及 win7 下的 qt-creator 的

程序的编译和调试。

先 make 中断模块,生成 int.ko insmod int.ko

然后 make GP10,生成 gpio.ko

Insmod gpio.ko 然后分配一个设备号241 生成结点:

可以 lsmod /dev/XX 看是否成功安装设备驱动 交叉编译 test.c

运行驱动测试程序./test 按键进行测试。

1. Q T 程序设计

由于qt-creator 在win7下具有调试功能,编写程序相对比较容易 主要用到的软件是 qt-creator : 界面如下:

计算器界面设计如下:

为按钮添加槽函数: 在calculor.h

函数中自动生成相应的函数,如下:

Qt CTHI O I-

WWW

rrfll

Qt Creator

?!? IM JH

T^tortala

Fl 丰 qt fhtdtor LI 呂L Ir/^ifdKe SuUdnq jnd Rbrining n Ejumpla

C rearing □ 5 匚*十 Appic-jQon Cra^nq a Hiibria Alpine srtion

lEhptDr? Qt C++ Exbinphss

Did You

Know ;?

Itau Zin ciAbh b-atnann th? aEJtpuC psA by hUn^ Altin nils 巾? nhiwrJfgtM on e 陆 tucwns 对 r!> wlniKniA' hr-Tt- ni

■ 1 Huld i-iiuea ■ 2 n0Ei4t^

■■3 ■ Appleton OttpiX '* -

OKpuC

再在calculor.cpp 函数中为每个函数实现相应的代码功能:对于数字按键的处理类似,如下:

主要调用trans 函数:

对于符号的函数处理类似,如下:主要调用cal 函数进行计算:

清零函数:回退函数:

等号的处理函数:

正负号的处理函数:

优点:可以实现回退、正负号逻辑处理,保留两位小数精度、可以实现混合运算(连加、或连乘灯)在操作的过程中有一点需要注意,是按完数字键以后再按正负号。

2. 虚拟机下进行编译:

需要注意的是,一定要用QtEmbeddec下进行编译,否则在开发板端将不能运行。将可执行程序拷到NFS 共享目录下:

在test_QT 下修改批处理程序:

保存退出即可,在开发板端执行的时候就直接执行test.sh文件

3. 下载到开发板上运行:

首先需要对开发板进行初始化配置,即执行校准文件及其之后的一些配置, 具体见实验 九 执行校准文件:

?qLii ■+啊

版⑺ #軸5,

最后执行批处理程序:

tid 0 0 fi i I — cl pt p 」H - V - 3 y 蛊

PM

圖吋⑹蛇

:/iinl/lift/rrolleleLybiii Med . lU: 9幽阳&§ op&n III lb {Z04irig Pi l?: Ho such file or dirHstorv

ig : 1J l&gaL seek

ttirdf

:/nil I AbFs/ [rolleletrh Hcd ..

SHC

tiLXtd

a,out

helloL lty?l

k.c

ttVMf

六、实验数据及处理结果

见实验步骤

七、思考讨论题或体会或对改进实验的建议

本次实验经过反复进行, 最终还是有收获的, 从一开始什么都不懂, 到最后掌握了设备驱动程序的结构,以及实现过程中一些要注意的问题。

我们搜索了大量资料,并且通过同学的帮助,了解了许多额外的但必须要用到的知识:【

1. extern :引用其他文件里的变量必须使用。

2. put_user(),get_user() copy_to_user() copy_from_user()

在内核空间和用户空间交换数据时, get_user 和put_user 是两个两用的函数。相对于

copy_to_user和copy_from_user将在另一篇文中分析),这两个函数主要用于完成一些简单类型变量(char、int、long 等)的拷贝任务,对于一些复合类型的变量,比如数据结构或者数组类型,

get_user和put_user函数还是无法胜任 ,这两个函数内部将对指针指向的对象长度进行检查,在arm 平台上只支持长度为1, 2,4,8 的变量。

copy_to_user -- Copy a block of data into user space. copy_from_user -- Copy a block of data from user space. get_user -- Get a simple variable from user space. put_user -- Write a simple value into user space.

3. 系列函数的定义在arch/arm/mach-s3c2410/gpio.c,

相关的宏定义在include/asm-arm/arch-s3c2410/regs-gpio.h

(1)void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);

设置相应GPIO 口的输出值,例如:

pin=S3C2410_GPG2, to=0,则设置S3C2410_GPG2 的输出值为0; pin=S3C2410_GPG2, to=1,则设置S3C2410_GPG2 的输出值为1。

2) unsigned int s3c2410_gpio_getpin(unsigned int pin);

获取相应GPIO 口的值。

3) void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);

设置相应GPIO 口的工作模式,输入、输出、中断等。

4) unsigned int s3c2410_gpio_getcfg(unsigned int pin);

获取相应GPIO 口的工作模式,输入、输出、中断等。

4. //cdev结构体对设备的操作,该函数被模块加载程序调用

static void gpio_setup_cdev(struct gpio_dev *dev, int index) 模块卸载函数*/

/*

devno = MKDEV(gpio_major,index); //获得设备号,

cdev_ini〃初始化cdev成员,建立cdev与file_operations 之间的连接

cdev_add(…,.…,…);//向系统添加一个cdev,完成字符设备的注册

5. 由于在disable_irq中会调用synchronize_irq函数等待中断返回,所以在中断处理程序中不能使用disable_irq, 否则会导致cpu 被synchronize_irq 独占而发生系统崩溃. 在中断处理程序中应该使用disable_irq_nosy nc来关闭中断

6.

MKDEV(int major,int minor) major:主设备号minor: 从设备号

八、参考资料:

[1] 温尚书等从实践中学嵌入式Linux 应用程序开发电子工业出版社

[2] 实验文档

嵌入式linux基本操作实验一的实验报告

实验一linux基本操作实验的实验报告 一实验目的 1、熟悉嵌入式开发平台部件,了解宿主机/目标机开发模式; 2、熟悉和掌握常用Linux的命令和工具。 二实验步骤 1、连接主机和目标板;(三根线,网线直接连接实验箱和PC机,实验箱UART2连接主机的UART口)。 2、Linux命令的熟悉与操作 PC端:在PC机的桌面上打开虚拟机,并启动Linux系统,打开命令终端,操作Linux基本命令,如:查看:ls,进入目录:cd,创建文件:mkdir,删除文件:rmdir,配置网络:ifconfig,挂载:mount,设置权限:chmod,编辑器:vi,拷贝:cp等命令,要求能熟练操作。 使用方法: 1.查看:ls Ls列出文件和目录 Ls–a 显示隐藏文件 Ls–l 显示长列格式ls–al 其中:蓝:目录;绿:可执行文件;红:压缩文件;浅蓝:链接文件;灰:其他文件;红底白字:错误的链接文件 2.进入目录:cd 改变当前目录:cd 目录名(进入用户home目录:cd ~;进入上一级目录:cd -) 3.创建文件:mkdir 建立文件/目录:touch 文件名/mkdir目录名 4.删除文件:rmdir 删除空目录:rmdir目录名 5.配置网络:ifconfig 网络- (以太网和WIFI无线) ifconfig eth0 显示一个以太网卡的配置 6.挂载:mount mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘- 确定目录'/ mnt/hda2' 已经存在 umount /dev/hda2 卸载一个叫做hda2的盘- 先从挂载点'/ mnt/hda2' 退出fuser -km /mnt/hda2 当设备繁忙时强制卸载 umount -n /mnt/hda2 运行卸载操作而不写入/etc/mtab文件- 当文件为只读或当磁盘写满时非常有用 mount /dev/fd0 /mnt/floppy 挂载一个软盘 mount /dev/cdrom /mnt/cdrom挂载一个cdrom或dvdrom mount /dev/hdc /mnt/cdrecorder挂载一个cdrw或dvdrom mount /dev/hdb /mnt/cdrecorder挂载一个cdrw或dvdrom mount -o loop file.iso /mnt/cdrom挂载一个文件或ISO镜像文件

嵌入式系统设计大作业

嵌入式系统设计大作业 学号:14020520009 姓名:罗翔 1、叙述JTAG接口在嵌入式开发中的作用。 答: (1)用于烧写FLASH 烧写FLASH的软件有很多种包括jatg.exe fluted flashpgm等等,但是所有这些软件都是通过jtag接口来烧写flash的,由于pc机上是没有jtag接口的,所以利用并口来传递信息给目标板的jtag接口。所以就需要并口转jtag接口的电路。 (2)用于调试程序 同时应该注意到jtag接口还可以用来调试程序。而调试程序(如ARM开发组件中的AXD)为了通过jtag接口去调试目标板上的程序,同样是使用pc的并口转jtag接口来实现与目标板的通信。这样,并口转jtag接口的电路就有了两种作用。 (3)仿真器 根据(1)和(2)的总结,并口转jtag接口的电路是两种应用的关键,而这种电路在嵌入式开发中就叫仿真器。并口转jtag接口的电路有很多种,有简单有复杂的,常见的仿真器有Wigger,EasyJTAG,Multi-ICE等。这些所谓的仿真器的内部电路都是并口转jtag接口,区别只是电路不同或使用的技术不同而已。 2、叙述嵌入式平台的搭建过程,以linux为例。 答: 1) 一:建立宿主机开发环境 建立交叉编译的环境即在宿主机上安装与开发板相应的编译器及库函数,以便能够在宿主机上应用开发工具编译在目标板上运行的Linux引导程序,内核,文件系统和应用程序 交叉编译:在特殊的环境下,把嵌入式程序代码编译成不同的CPU所对应的机器代码。

开发时使用宿主机上的交叉编译,汇编及链接工具形成可执行的二进制代码(该代码只能在开发板上执行),然后下载到开发板上运行 2) 下载和安装arm-Linux-gcc编译工具链下载最新的arm-Linux-gcc并解压至当前目录下 在系统配置文件profile中设置环境变量方法:直接在profile文件中加入搜索路径立即使新的环境变量生效:运行source命令,检查是否将路径加入到path,测试是否安装成功, 编译程序,测试交叉工具链 3) 配置超级终端minicom minicom是宿主机与目标板进行通信的终端:在宿主机Linux终端中输入:minicom-s或输入minicom然后按ctrl+A+O对超级终端minicom进行配置,再选择串口并配置串口,最后保存即可 4) 建立数据共享服务:NFS服务是Linux系统中经常使用的数据文件共享服务 5) 编译嵌入式系统内核:内核配置,建立依存关系,建立内核 6) 制作文件系统 3、给出现今有哪些用于嵌入式开发的芯片名称,他们分别是哪些公司的产品? 体系结构是什么? S3C2410X基于ARM的Sumsang; XscalePXA255/PXA270基于ARM的Intel; 摩托罗拉MC基于68k; Power 601基于Power PC; MIPS32Kc基于MIPS 4、现今较流行的嵌入式操作系统有哪些? 答: (1) VxWorks (2)wince (3)linux (4)android

《嵌入式系统与开发》构建嵌入式Linux系统-实验报告

《嵌入式数据库sqlite移植及使用》 实验报告 学生姓名:陈彤 学号:13004405 专业班级:130044 指导教师:孙国梓 完成时间:2016.5.31 实验3 嵌入式数据库sqlite移植及使用 一.实验目的 理解嵌入式软件移植的基本方法,掌握sqlite数据库软件移植的步骤,掌握sqlite开发的两种方式—命令模式和C代码开发模式的使用方法,并编程实现简单通讯录查询实验。 二.实验内容 实验3.1 移植嵌入式数据库sqlite 实验3.2 简单通讯录查询实例设计和测试 三.预备知识 Linux使用、数据库相关知识等 四.实验设备及工具(包括软件调试工具) 硬件:ARM 嵌入式开发平台、PC 机Pentium100 以上、串口线。 软件:WinXP或UBUNTU开发环境。 五.实验步骤 5.1 移植嵌入式数据库sqlite 步骤【参看教材103页】: 第一步,解压缩sqlite源码,命令tar zxvf sqlite-autoconf-3080900.tar.gz,在解压后的文件夹下,可以看到源码文件有shell.c 和sqlite3.c文件,生成Makefile的配置脚本文件configure.ac ,并检查当前文件夹下__A__(A.存在 B.不存在)Makefile文件。 第二步利用configure脚本文件生成基于ARM实验台的Makefile,具体命令为./configure CC=arm-linux-gcc –prefix=/opt/sqlite –host=arm-linux(假设安装目录为/opt/sqlite),并检查当前文件夹下___A__(A.存在 B.不存在)Makefile文件。 第三步,编译sqlite,命令为_make_,编译过程中使用的编译器为_ arm-linux-gcc _。 第四步,安装sqlit,命令为_make install_。安装完成后到_/opt/sqlite_文件夹下去查看相关文件,可以看到该文件夹下有_bin_、_include_、__lib__和share文件夹,其中可执行文件sqlite3位于_./bin_文件夹,库位于_./lib_文件夹。 第五步,将sqlite3拷贝到开发板bin目录下,将库下的文件拷贝到开发板的lib目录下【注意链接文件的创建】 第六步,数据库的使用 方式1:命令操纵数据库 在超级终端环境下创建数据库stucomm.db,命令为_sqlite3 stucomm.db_; 创建数据表stutable,字段包括id 整型,name 字符型,phoneNum 字符型,具体命令为_sqlite> create table stutable (id int(20),name char(20),phoneNum char(20));_; 插入2条记录,记录信息如下 001,zhangsan,10086 002,lisi,10000

南邮嵌入式系统B实验报告2016年度-2017年度-2

_* 南京邮电大学通信学院 实验报告 实验名称:基于ADS开发环境的程序设计 嵌入式Linux交叉开发环境的建立 嵌入式Linux环境下的程序设计 多线程程序设计 课程名称嵌入式系统B 班级学号 姓名 开课学期2016/2017学年第2学期

实验一基于ADS开发环境的程序设计 一、实验目的 1、学习ADS开发环境的使用; 2、学习和掌握ADS环境下的汇编语言及C语言程序设计; 3、学习和掌握汇编语言及C语言的混合编程方法。 二、实验内容 1、编写和调试汇编语言程序; 2、编写和调试C语言程序; 3、编写和调试汇编语言及C语言的混合程序; 三、实验过程与结果 1、寄存器R0和R1中有两个正整数,求这两个数的最大公约数,结果保存在R3中。 代码1:使用C内嵌汇编 #include int find_gcd(int x,int y) { int gcdnum; __asm { MOV r0, x MOV r1, y LOOP: CMP r0, r1 SUBLT r1, r1, r0 SUBGT r0, r0, r1 BNE LOOP MOV r3, r0 MOV gcdnum,r3 //stop // B stop // END } return gcdnum; } int main() { int a; a = find_gcd(18,9);

printf("gcdnum:%d\n",a); return 0; } 代码2:使用纯汇编语言 AREA example1,CODE,readonly ENTRY MOV r0, #4 MOV r1, #9 start CMP r0, r1 SUBLT r1, r1, r0 SUBGT r0, r0, r1 BNE start MOV r3, r0 stop B stop END 2、寄存器R0 、R1和R2中有三个正整数,求出其中最大的数,并将其保存在R3中。 代码1:使用纯汇编语言 AREA examp,CODE,READONL Y ENTRY MOV R0,#10 MOV R1,#30 MOV R2,#20 Start CMP R0,R1 BLE lbl_a CMP R0,R2 MOVGT R3,R0 MOVLE R3,R2 B lbl_b lbl_a CMP R1,R2 MOVGT R3,R1 MOVLE R3,R2 lbl_b B . END 代码2:使用C内嵌汇编语言 #include int find_maxnum(int a,int b,int c)

嵌入式程序设计实验报告

实验一开发环境的搭建与配置 【实验目的】 1)熟悉嵌入式Linux开发平台。 2)掌握嵌入式Linux开发平台的开发环境搭建与配置。 3)了解minicom配置串口通信参数的过程。 4)了解嵌入式Linux的启动过程。 5)掌握程序交叉编译运行及调试的一般方法。 【实验内容】 1)连接实验开发板与宿主机。 2)在虚拟机中的CentOS(宿主机)搭建开发环境。 3)在宿主机中配置minicom。 4)分析嵌入式Linux的启动过程。 5)在宿主机上编写简单的C语言程序并用交叉编译工具进行编译,然后传输到目标机上运行。 6)在宿主机上编写简单的C语言程序并用交叉编译工具进行编译,用gdbserver进行远程调试。 【实验步骤】 连接实验开发板,对虚拟机进行设置 1)首先把实验开发板打开,用网线和串口线连接宿主机,并连接电源(注意这时不要拨动实验 开发板的开关按钮)。 2)在桌面上点击打开vmware 软件,选择“编辑虚拟机设置”,如下图所示:

图1 3)进入虚拟机配置界面后把网络连接方式设置为“桥接方式”,如图2所示: 图2

4)添加串口,如下图所示: 图3 5)完成串口的添加后,选择“OK”,完成对虚拟机的设置。如下图所示:

图4 6)选择虚拟机的“Edit”、“Virtual Network Editor...”,如下图所示:

图5 7)进入虚拟机网络参数设置界面后对VMnet0进行设置(注意这里桥接的网卡应选择与实验开 发板相连接的那块儿网卡),然后点击“Apply”、“OK”如下图所示:

图6 8)上述设置完成后启动CentOS(CentOS的用户名为“root”,密码为“xidianembed”)。 工具链的配置 1)在CentOS的根目录下创建一个名为“EELiod”的目录,把实验中要用到的文件(主要是一 些rpm包)拷贝到该目录下。(可以用U盘、WinSCP等工具进行,此处不再做详细说明)。 2)交叉编译工具链位于/opt/buildroot-2011.02/output/host/usr目录下,进入工具链的bin目录下, 可以看到一些编译工具,这些工具将会在之后的交叉编译过程中使用到。

上海交大---嵌入式第一次作业

题目1 完成 满分1.00 Flag question 题干 下列哪个不是嵌入式系统的特点:()选择一项: a. 专用性 b. 资源受限 c. 功耗约束 d. 常由外接交流电电源供电 题目2 完成 满分1.00 Flag question 题干 下列哪些不是嵌入式系统:()。 选择一项: a. 移动电话、手机 b. MP3 c. MID

d. 深蓝超级计算机 题目3 完成 满分1.00 Flag question 题干 指令和数据共享同一总线的体系结构是()。选择一项: a. 冯?诺依曼结构 b. 哈佛结构 c. RISC d. CISC 题目4 完成 满分1.00 Flag question 题干 下面不属于 ...嵌入式处理器的是:()。 选择一项: a. Intel Core(酷睿)处理器

b. Intel Atom处理器 c. MCS-51单片机 d. ARM处理器 题目5 完成 满分1.00 Flag question 题干 在嵌入式处理器与外部设备接口中,使用2根线实现多对多双向收发的是:()。 选择一项: a. UART b. I2C c. SPI d. USB 题目6 完成 满分1.00 Flag question 题干 假设使用奇偶校验位,UART发送一个字节的数据,从idle状态开始(及数据线为高),到允许进行下一次发送动作态为止,至少需要()个时钟节拍。

选择一项: a. 8 b. 9 c. 10 d. 11 题目7 完成 满分1.00 Flag question 题干 关于SIMD说法错误 ..的是:()。 选择一项: a. SIMD通过复制ALU和寄存器组,共享取值、译码单元来获得计算并行。 b. SIMD是通过增加寄存器个数来提高数据处理的宽度。 c. SIMD中多个运算单元运行的是相同的指令。 d. Intel Atom的SSE指令属于SIMD指令 题目8 完成 满分1.00 Flag question 题干

2016年下学期嵌入式系统设计大作业

嵌入式系统设计大作业 1、叙述嵌入式系统开发过程中所要解决的两个问题。 2、叙述嵌入式平台的搭建过程,以linux为例。 3、给出现今有哪些用于嵌入式开发的芯片名称,他们分别是哪些公司的产品? 体系结构是什么? 4、现今较流行的嵌入式操作系统有哪些? 5、PXA270嵌入式开发板的接口有哪些? 6、请写出Nor Flash和Nand Flash的区别。 7、冯。诺依曼架构与哈佛架构的区别。 8、单周期3级流水的情况下,第10个指令周期时,第几条指令执行结束? 9、下面是linux下的一个简单的设备驱动程序,写出linux设备驱动常用的数据结构,同时阅读下面代码,请给出测试程序中的每条语句加以注释。 设备驱动程序Keypad.c的源代码: #include #include #include #include #include #include #include #include #include #include #include #define LEDnKEY_MAJOR 251 #define KEYPAD_NAME "X-Hyper250 Keypad" #define KEYPAD_VERSION "Version 0.1" #define EXT_KEY_CS EXT_PORT2 #define EXT_LED_CS EXT_PORT3 #define LED_SHOW 10 /*EXT_KEY_CS 为向外部LED进行数值设定,它定义在其它头文件里*/ void led_off_on() /**/ { int i; EXT_LED_CS = 0xff; for(i =0 ; i<8;++i) { EXT_LED_CS = ~((1 << i) & 0xff); udelay(30000); } EXT_LED_CS = 0xff; }

嵌入式系统实验报告

郑州航空工业管理学院 嵌入式系统实验报告 (修订版) 20 – 20第学期 赵成,张克新 院系: 姓名: 专业: 学号: 电子通信工程系 2014年3月制

实验一ARM体系结构与编程方法 一、实验目的 了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。 二、实验内容 1.ADS1.2 IDE的安装、环境配置及工程项目的建立; 2.ARM汇编语言程序设计(参考附录A): (1)两个寄存器值相加; (2)LDR、STR指令操作; (3)使用多寄存器传送指令进行数据复制; (4)使用查表法实现程序跳转; (5)使用BX指令切换处理器状态; (6)微处理器工作模式切换; 三、预备知识 了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:ARM Developer Suite (ADS) 1.2。 五、实验分析 1.安装的ADS1.2 IDE中包括和两个软件组件。在ADS1.2中建立类型的工程,工程目标配置为;接着,还需要对工程进行、及链接器设置;最后,配置仿真环境为仿真方式。 2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。 ; 文件名:

linux嵌入式实验2

嵌入式实验报告(二) 姓名:董辰辰 学号:111180031 专业:电子信息与科学 一、 实验目的 1、 了解Linux 内核源代码的目录结构以及各个目录的相关内容。 2、 了解Linux 内核各配置选项内容和作用。 3、 掌握Linux 内核的编译过程。 4、 了解嵌入式操作系统中文件系统的类型和作用。 5、 了解JFFS2文件系统的优点以及在嵌入式系统中的作用。 6、 掌握利用busybox 软件制作嵌入式文件系统的方法。 7、 掌握嵌入式Linux 文件系统的挂载过程。 二、实验内容和要求 1、配置完整的内核,尽可能理解配置选项在操作系统中的作用。 2、以 Busybox 为基础,构建一个合适的文件系统。 3、制作ramdiak 文件系统映像。 4、将自己编译生成的内核和文件系统下载进开发板。 5、讨论自己的嵌入式系统所具备的的功能。 6、比较romfs 、ext2fs/ext3fs 、JFFS2等文件系统的优缺点。 三、实验设计和分析 实验分为两个部分:Linux 内核配置编译和文件系统构建。本次实验的目的 就是自己搞一个内核和文件系统。当然自己编写代码是不太可能啦,而是根据 linux 提供的源代码自己配置编译出一个自己的内核,在构建一个自己需要的文 件系统。实验室用的内核版本是2.6.35.7 实验室的开发板有了内核和文件系统 才能够对其进行开发。内核是操作系统最基本的部分,可以说是一个软件,实验 室的开发板有处理器、内存、Flash 闪存等硬件组成,可以说内核是调度它们的 软件,有了内核各种应用程序才能够调用硬件资源,总的来说内核文件是操作系 统的核心,负责系统的进程管理,内存管理,设备和文件管理等,决定着系统的 性能和稳定性。文件系统是操作系统的一个重要组成部分,通过对操作系统所管 理的存储空间的抽象,向用户提供统一的、对象化的访问接口,屏蔽对物理设备 的直接操作和资源管理。我觉得内核的本质其实是程序,而文件系统是设置一些 规则来用来管理存储的,在一个完整的操作系统中两者都是不可或缺的,内核在 加载的时候需要有很多的挂载指令,应该挂载的就是文件系统的文件夹,比如将 proc 文件系统挂载到proc 文件夹,这就是为什么在开发板启动时内核和文件系 本页已使用福昕阅读器进行编辑。福昕软件(C)2005-2009,版权所有,仅供试用。

嵌入式系统大作业

《嵌入式系统原理及应用》课 程论文 嵌入式数据库的现状和发展趋势 学生姓名 学号 专业 班级 授课教师 所属学院

嵌入式数据库的现状和发展趋势 摘要:随着计算机技术及相关技术的不断发展,嵌入式产品由于其智能化、小型化、便携式等特点,已经普遍应用于我们的生活。这些产品通常是在计算资源、存储资源等条件受限的情况下处理大量的数据,而传统的数据库一般都是运行在各种各样的服务器或大容量的存储器上,显然把传统的数据库直接移植到嵌入式设备上是不可行的。嵌入式数据库应运而生。本文从嵌入式系统结构入手,阐述了嵌入式数据库的发展现状,并具体介绍了当前主流嵌入式数据库的共性、基本特点、关键技术、构件、分类,并提出了发展趋势和进一步研究的技术突破点。 关键词:嵌入式数据库、复制、缓存技术、现状、趋势 引言 随着计算机技术及相关技术的不断发展,嵌入式产品由于其智能化、小型化、便携式等特点,已经普遍应用于我们的生活,比如智能手机、车载导航设备、数字移动电视、机顶盒、智能控制设备等。这些产品通常是在计算资源、存储资源等条件受限的情况下处理大量的数据,而传统的数据库一般都是运行在各种各样的服务器或大容量的存储器上,显然把传统的数据库直接移植到嵌入式设备上是不可行的。那么如何在苛刻的条件下,充分利用有限的资源便成为了人们研究的热点。嵌入式数据库也正是在此条件下,和嵌入式操作系统、嵌入式应用软件相伴而生的。 正文 1嵌入式系统的体系结构 嵌入式系统的英文叫做Embedded System, 是一种包括硬件和软件的完整的计算机系统, 但又跟通用计算机系统不同。嵌入式系统的定义是: / 嵌入式系统是以应用为中心, 以计算机技术为基础, 并且软硬件可剪裁, 适用于应用系统对功能、可靠性、成本、体积和功耗有严格要求的专用计算机系统。0嵌入式系统所用的计算机是嵌入到被控对象中的专用微处理器, 但是功能比通用计算机专门化, 具有通用计算机所不能具备的针对某个方面特别设计的、合适的运算速度、高可靠性和较低比较成本的专用计算机系统。 嵌入式数据库位于嵌入式系统的中间部分,下面有嵌入式操作系统层,当前主流的嵌入式操作系统有Windows CE;Palm OS。Linux,VXworks,SymbianOS等平台,硬件平台主要有Dragonball,Handspring,MIPS,Hitachi SH,Power PC以及ARM处理器。嵌入式应用软件位于嵌入式数据库之上,可以通过API函数接口,、ODBC,JDBC等与嵌入式数据库通信,来实现数据的检索、删除、添加等操作,更为重要的是要实现数据的完整性、一致性。当前主流的嵌入式数据库,具有支持多个平台、面向多种开发语言、具有多个灵活的接口等特点,主流的嵌入式数据库有:Oracle公司的Berkeley DB、Sysbase Adaptive ServerAnywhere、Linter以及SQLite等,国内的科研机构也积极开展这方面的研究并推出了自己的产品,主要有方舟公司的Noahbase人大金仓kingbase等。

淮阴工学院嵌入式系统开发与应用实验报告实验四嵌入式Linux开发环境的搭建

实验四嵌入式Linux开发环境的搭建 一、实验目的 1、了解嵌入式Linux开发环境的作用 2、掌握相关服务器的安装 二、实验准备 硬件:JXARM9-2410教学实验箱,PC机 软件:Windows XP操作系统,ADS集成开发工具 三、实验过程 1、tftp网络配置 (1) 虚拟机网络配置 a. 点击虚拟机-设置,将网络适配器设置为自定义,并 指定虚拟网络为VMnet0。 b. 点击编辑-虚拟机网络参数-主机虚拟网络映射,并 且指定其桥接的网卡

c. Red Hat IP配置 ●点击系统设置-网络,双击eth0配置IP信息如下: 地址:172.20.11.243 子网掩码:255.255.255.0 默认网关地址:172.20.11.254 DNS: 210.29.152.4 ●点击激活,在弹出的对话框点击是按钮 ●

测试网络连接是否正常 方法一:在linux下,点击系统工具-终端,输入命令ping 172.20.11.243 方法二:在主系统中打开命令提示符,输入ping 172.20.11.243 (2)修改tftp的配置文件 a.在终端下输入gedit /etc/xinetd.d/tftp b.修改”disable=yes”为”=no”,点击保存,关闭gedit

c.重启xinetd服务,使刚才的更改生效,在终端里输入, /etc/init.d/xinetd restart d.进入tftpboot文件夹创建一个测试文件testfile e.取得tftpboot文件夹的所有权限,命令chmod 777 /tftpboot f.启动tftp测试上传和下载 2配置NFS服务器 a.设置:开始->系统设置->服务器设置->NFS服务器打开配置对话 框 第一步:点击添加nfs共享 第二步:输入目录/tftpboot 第三步:输入主机172.20.11.243 第四步:基本权限为读/写

嵌入式系统大作业

嵌入式系统大作业-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

基于嵌入式系统的车载GPS导航系统的设计 1 设计目的与功能 1.1 设计目的 随着人们经济基础增强,安全意识增强的基础上,很多人都会选择车载GPS 导航设备,所以制造功能强大,价格低廉的车载GPS导航设备是有很大市场和发展前景的。由于导航仪投入小,外壳模块、芯片等材料市场供应量大,这也是我选择设计车载GPS导航设备的理由。为了满足不同用户的不同需求,我想设计一款内置四维地图系统。 1.2设计功能 1提供准确无误的全3D实景导航; 2附带全国沿途咨询; 3具有视频、音乐播放等娱乐功能。 2.需求分析调研 2.1 产品的硬件组成(型号、类型、电气特性、选择的理由等) (1)处理器:S3C2440A 400MHz,S3C2440A 是三星公司生产推出的基于ARM920T的32位RISC嵌入式微处理器,S3C2440A采用了ARM920T的内核,0.13um的CMOS标准宏单元和存储器单元。 采用ARM920T CPU内核支持ARM调试体系结构。 (2)储存模块:SDRAM , K4M561633-75 , 64MByte Nand FLASH, K9F1208G 64MByte同步动态随机存储器,工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;存储阵列需要不断的刷新来保证数据不丢失;数据不是线性依次存储,而是自由指定地址进行数据读写。 (3)音频模块:PHILIPS公司的UDA1341TS是一块功能强大的专用语音处理芯片。本设计使用的AT91RM9200处理器具有一个IIS音频接口,此接口

嵌入式linux实验指导书

目录 实验一 linux常用指令练习 (3) 1、在线帮助指令 (3) 2、linux开关机及注销指令。 (3) 重启指令: (3) 1)、reboot命令 (3) 2)、init 6命令 (3) 关机指令: (3) 1)、halt命令 (3) 2)、poweroff命令 (4) 3)、init 0命令 (4) 4)、shutdown命令 (4) 注销指令: (4) 3、用户管理命令 (4) 1)、用户切换su命令 (4) 2)、添加用户命令adduser/useradd (5) 3)、删除用户及更改用户属性 (5) 4)、设置用户密码 (6) 5)、查看用户信息 (6) 4、文件目录操作指令 (7) 1)、改变当前工作目录命令(cd) (7) 2)、显示当前路径pwd (7) 3)、查看当前目录下的文件命令ls (7) 4)、新建目录指令mkdir (8) 5)、删除目录命令rmdir (8) 6)、新建文件命令touch (8) 7)、删除文件指令rm (8) 8)、文件和目录的复制命令cp (8) 9)、文件和目录的移动命令mv (9) 10)、更改文件或目录的使用权限chmod (9) 11)、查看文件的命令cat (9) 12)、文件链接命令ln (9) 13)、文件压缩解压命令 (10) 5、网络相关命令 (11) 6、磁盘管理命令 (11) 7、挂载文件命令mount (12) 8、其他系统命令 (12) 练习1: (13) 练习2: (15) 练习3: (16) 练习4: (21) 实验二 VI文本编辑器的使用 (24) 1、练习使用VI指令 (24) 2、利用VI编写一个hello.c文件 (24)

嵌入式基础实验报告

嵌入式基础实验报告 ——Linux下编译环境的设置 姓名:张耀丹 学号:131012692 班级:13级网络工程二班

一、实验目的 1、熟悉嵌入式Linux 开发环境,学会基于UP-CUP IOT-4412-II 型网关部分平台的Linux 开 发环境的配置和使用 2、利用arm-none-linux-gnueabi-gcc 交叉编译器编译程序,使用基于NFS 的挂载方式进行 实验,了解嵌入式开发的基本过程 二、实验环境 1、硬件:UP-CUP IOT-4412-II 型网关部分嵌入式实验平台,PC 机Pentium 500 以上, 硬盘 40G 以上,内存大于256M 2、软件:Vmware Workstation + Fedora Core 14 + 超级终端/Xshell + ARM-LINUX 交叉编译开 发环境 三、实验内容 1、本次实验使用Fedora14 操作系统环境,安装ARM-Linux 的开发库及编译器。创建一个新 目录,并在其中编写hello.c 和Makefile 文件。 2、学习在Linux 下的编程和编译过程,以及ARM 开发板的使用和开发环境的设置。将已 经编译好的文件通过NFS 方式挂载到目标开发板上运行 四、实验步骤 实验目录:/UP-CUP4412/SRC/exp/basic/Cortex/ 1、编译源程序 (1)在宿主机端任意目录下建立工作目录CortexA9,实际光盘目录中已经给出本次实验所需全面文件及代码,存放在Cortex目录下。 [root@localhost ~]# mkdir CortexA9 [root@localhost ~]# cd CortexA9 (2)编写程序源代码 在Linux 下的文本编辑器有许多,常用的是vim 和Xwindow 界面下的gedit 等,我们在开发过程中推荐使用vim,用户需要学习vim 的操作方法,请参考相关书籍中的关于vim 的操作指南。Kdevelope、anjuta 软件的界面与vc6.0 类似,使用它们对于熟悉windows 环境下开发的用户更容易上手。 实际的CortexA9.c 源代码较简单,如下: #include main() { printf(“**********\n” ); printf(“CortexA9 \n”); printf(“**********\n” ); return 0; }

嵌入式系统大作业一

《嵌入式系统》课程ARM部分大作业 一、如何定义ARM寄存器列表,试举一个使用寄存器列表的例子,要求实现4个字的内存复制。 答:AREA EXAMPLE1,CODE,READONLY ENTRY LDR R0,=0XFF; //把地址0XFF赋给R0 LDR R5,=0X0F; //把地址0X0F赋给R5 START PBLOCK RLIST {R1-R4}; //把R1-R4定义为PBLOCK LDMIA R0,PBLOCK; //把R0为首地址的内存4个字单元装载至R1到R4中 STMIA R5,PBLOCK; //把R1到R4的值依次存至R5为首地址的内存字单元 STOP B STOP; //死循环 END 二、分析下面程序,写出下面程序遵循的规则,给出关键语句的注释,以及程序功能。 #include<stdio.h> extern void strcopy(char *d,const char *s); int main() { c onst cha r *srcstr=“First string - source”; c har dststr[]=“secon d string - destination”; p rintf(“Before copying:\n”); p rintf(“%S\n%S\n” srcstr,dststr); s trcopy(dststr,srcstr); printf(“After copying:\n”); P rintf(“%s\n%s\n”,srcstr,dststr); r eturn(0); } AREA scopy CODE,READONLY E XPORT strcopy ; Strcopy ;//R0指向目的字符串,R1指向源字符串 L DRB R2,[R1],#1;//加载字节和更新地址 S TRB R2,[R0],#1;//储存字节和更新地址 C MP R2,#0;//检查零终止符 B NE strcopy //如果不是零终止符则循环,否则继续执行 M OV PC,LR;//返回 E ND 答:功能:将r1指向的字符串拷贝到r0指向的地方,字符串以0作结束标志。 三、分析下面程序,写出下面程序遵循的规则,给出关键语句的注释,以及程序

嵌入式Linux系统开发教程实验报告

嵌入式实验报告 : 学号: 学院: 日期:

实验一熟悉嵌入式系统开发环境 一、实验目的 熟悉Linux 开发环境,学会基于S3C2410 的Linux 开发环境的配置和使用。使用Linux的armv4l-unknown-linux-gcc 编译,使用基于NFS 方式的下载调试,了解嵌入式开发的基本过程。 二、实验容 本次实验使用Redhat Linux 9.0 操作系统环境,安装ARM-Linux 的开发库及编译器。创建一个新目录,并在其中编写hello.c 和Makefile 文件。学习在Linux 下的编程和编译过程,以及ARM 开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。 三、实验设备及工具 硬件::UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G 以上。 软件:PC 机操作系统REDHAT LINUX 9.0+超级终端(或X-shell)+AMR-LINUX 开发环境。 四、实验步骤 1、建立工作目录 [rootlocalhost root]# mkdir hello [rootlocalhost root]# cd hello 2、编写程序源代码 我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码: [rootlocalhost hello]# vi hello.c 按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc 键进入

命令状态,再用命令“:wq!”保存并退出。这样我们便在当前目录下建立了一个名为hello.c的文件。 hello.c源程序: #include int main() { char name[20]; scanf(“%s”,name); printf(“hello %s”,name); return 0; } 3、编写Makefile 要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make”命令整个工程就可以实现自动编译。Makefile源程序: CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+= –static all: $(EXEC) $(EXEC): $(OBJS) $(CC) $(LDFLAGS) -o $ $(OBJS) clean: -rm -f $(EXEC) *.elf *.gdb *.o 下面我们来简单介绍这个Makefile 文件的几个主要部分: CC 指明编译器 EXEC 表示编译后生成的执行文件名称 OBJS 目标文件列表

嵌入式Linux应用程序开发实验报告期末作业

软件学院大作业设计报告课程名称: 题目:专业:班级:姓名学号: 基于UP-CUP2440平台的驱动程序开发和QT程序开发 计算机软件 计算机软件111班 鲁飞8000611038 卢惠民8000611021 戚成林8000611032 慕一聪8000611018 刘备8000611006 李岚职称:副教授 2014年6月11日 嵌入式Linux应用程序开发 任课教师: 完成时间:

一、小组成员分工 二、实验任务 三、主要仪器设备及耗材 四、实验步骤 、驱动 1. 基本知识: 2. 实验原理: 3. 具体实现: 二、QT计算器 1.QT程序设计 2. 虚拟机下进行编译: 3. 下载到开发板上运行: 六、实验数据及处理结果10 15 17 18 七、思考讨论题或体会或对改进实验的建议18 19 八、参考资料:

、小组成员分工 分工: 鲁飞:QT设计与设计报告卢惠民:QT设计与设计报告戚成琳:驱动与设计报告慕一聪、刘备:设计报告 二、实验任务 1?编写基于UP-CUP2440硬件平台的GPIO驱动程序 必选功能:使中断按键按下后,开发板上的LED灯能作如下闪动: a)连续性闪动,跑马灯:如:1-2-3-1-2-3…或3-2-1-3-2-1 b)间隔性闪动:如:1-3-2-1-3-2…或3-1-2-3-1-2… 进阶功能:改变中断按键的控制功能,使中断按键按下后,LED灯不断闪亮,再 次按下后,LED灯灭。 2.QT计算器 三、主要仪器设备及耗材 PC, Windows Xp , H-JTAG,H-Flasher,DNW,开发实验箱。 四、实验步骤 、驱动 思路: 前后台思想: 在中断模块中设置一个计数的变量,每一次中断计数器加一。 然后在GP10驱动模块的ioctIO函数中分情况使跑马灯按要求闪动或熄灭。

嵌入式系统实验内容(全)

实验一熟悉Linux开发环境 一、实验目的 1.熟悉Linux开发环境,学习Linux开发环境的配置和使用,掌握Minicom 串口终端的使用。 2.学习使用Vi编辑器设计C程序,学习Makefile文件的编写和 armv4l-unkonown-linux-gcc编译器的使用,以及NFS方式的下载调试方法。 3.了解UP-NETARM2410-S嵌入式实验平台的资源布局与使用方法。 4.初步掌握嵌入式Linux开发的基本过程。 二、实验内容 本次实验使用Redhat Linux 9.0操作系统环境,安装ARM-Linux的开发库及编译器。创建一个新目录,并在其中编写hello.c和Makefile文件。学习在Linux 下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。 三、预备知识 C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。 四、实验设备及工具(包括软件调试工具) 硬件:UP-NETARM2410-S嵌入式实验平台、PC机Pentium 500以上, 硬盘10G 以上。 软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境 五、实验步骤 1、建立工作目录 [root@zxt smile]# mkdir hello [root@zxt smile]# cd hello 2、编写程序源代码 在Linux下的文本编辑器有许多,常用的是vim和Xwindow界面下的gedit等,我们在开发过程中推荐使用vim,用户需要学习vim的操作方法,请参考相关书籍中的关于vim的操作指南。 Kdevelope、anjuta软件的界面与vc6.0 类似,使用它们对于熟悉windows环境下开发的用户更容易上手。 实际的hello.c源代码较简单,如下: #include main() {

LINUX实训心得体会

linux学习心得 我们这一代90后,从小接触的是windows98,家里条件好的自己有电脑装的是2000,后来又有了xp,上大学时又有了win7。说实话小时候没想过搞it,也计算机了解也只是一些皮毛,至于什么unix,linux,听过没见过,就更别说用过了。 以前觉得linux就跟dos一样,全是用命令窗口,相对于窗口界面来说多麻烦呀。直到学习linux这门课以后,我才知道,原来我错了。 一.为什么要学linux呢?每个人都有不同的看法,下面我说说自己的感想吧。 首先linux是开源的,这也是最主要的原因,想学windows,unix,对不起我们没源代码。也正是因为这样,linux才能够像滚雪球一样越滚越大,发展到现在这种规模。其中不乏很多it精英的心血。我们学透以后更可以做成自己的os! 其次,linux简单易学,因为我们初学者只是学的基础部分,linux的结构体系非常清晰,再加上老师循序渐进的教学以及耐心的讲解,使我们理解起来很快,短期内就基本掌握了操作和运行模式。对我们学习操作系统有很大的帮助,加深我们对os的理解。 再次,linux是用c语言编写的,我们有学习c语言的基础,读程序和编写代码方面存在的困难小一点,也是我们能较快掌握的原因之一。 二.学习情况 在学习的过程中,我们用的是vm虚拟机,开始时真的不真的该怎么去做,特别是我的是命令窗口界面,别人的是图形界面,我都不知道怎么调过来。后来通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟os程序。 老实说,第一个程序是在c中编译好的,调试好了才在linux下运行,感觉用vi比较麻烦,因为有错了不能调试,只是提示错误。但是一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在linux下调试了,因为有的头文件在vc里面说找不到。 就这样,我们一边上os理论课,一边上这个实验,这样挺互补的,老师讲课,一步一步地布置任务,我们自学,就这个循环的过程中,我们学习了基本操作,用vi,shell,模拟内存的分配过程等一些os管理。可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。 期间我阅读了不少关于linux的相关资料,其中也不乏一些有趣的小故事,这既丰富了我的课余生活,也让我加深了对一些术语的理解,比玩游戏强多了。 三.对linux未来的展望 众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户,甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的,这也正是有别的os得以存在的原因,每个系统都有其自身的优点。 linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一,随着it从业人员越来越多,理论上会有更多的人使用linux,可以肯定,linux在以后

相关文档
最新文档