收藏 分享(赏)

ARM9嵌入式技术及Linux实验指导.doc

上传人:dreamzhangning 文档编号:2722300 上传时间:2018-09-26 格式:DOC 页数:27 大小:546KB
下载 相关 举报
ARM9嵌入式技术及Linux实验指导.doc_第1页
第1页 / 共27页
ARM9嵌入式技术及Linux实验指导.doc_第2页
第2页 / 共27页
ARM9嵌入式技术及Linux实验指导.doc_第3页
第3页 / 共27页
ARM9嵌入式技术及Linux实验指导.doc_第4页
第4页 / 共27页
ARM9嵌入式技术及Linux实验指导.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、ARM9 嵌入式技术及 Linux 实验指导嵌入式开发流程1. 建立开发环境2. 配置开发主机3. 建立引导安装程 bootLoader4. 下载别人移植好的 Linux 操作系统5. 建立根文件系统6. 建立应用程序的磁盘分区7. 开发应用程序8. 烧写内核、根文件系统、应用程序9. 发布产品一建立嵌入式 Linux 开发环境1) 基于 PC 机的 windows 操作系统下的 CYGWIN2) 在 windows 下安装虚拟机后,再在虚拟机中安装 Linux 操作系统3) 直接安装 Linux 操作系统绝大多数的 Linux 软件开发都是以 native 方式进行的,即本机开发、调试、本机

2、运行的方式。而通常的嵌入式系统的软件采用一种交叉调试的方式进行开发。交叉编译调试环境建立在宿主机上,对应的开发板叫目标板。运行 Linux 的 PC 开发时使用宿主机上的交叉编译、汇编、及连接工具形成可执行的二进制代码,然后把可以执行的文件下载到目标机上运行。调试的方法很多,可以使用串口,以太网口等,至于具体使用何种调试方法可以根据目标处理器的提供的支持作出选择。进行嵌入式 Linux 开发的一般需要在主机上安装 Linux。嵌入式开发通常要求宿主机配置有网络,支持 NFS。二开发工具软件的安装与配置开发环境配置包括配置网络,NFS 服务器的配置基础实验实验一 Bootloader实验目的实验

3、目的熟悉 bootloader,学会基于 S3C2410 的 bootloader 配置与使用,串口方式或 Jtag的下载调试,了解嵌入式系统的启动过程。实验内容本次实验使用 Debian GNU/Linux 操作系统环境安装 minicom 以及使用相关传输工具烧写bootloader。学习 Linux 下的启动过程,以及 vivi 的使用。下载已经编译好的 vivi 镜像到嵌入式实验仪中运行。预备知识Linux 的基本操作。实验仪器硬件:armsys 嵌入式实验仪, PC 机(主频 500 以上)10G 以上硬盘软件:操作系统 Debian GNU/Linux,minicom ,lrzsz

4、实验步骤:1 安装 minicom 与 lrzszapt-get install minicomapt-get install lrzsz2 调整 minicom 的端口参数这是初始画面,按a z (这里按键顺序是 ctrl a,然后按 z)可以列出如下的帮助菜单。如帮助所示,配置串口的参数是a o,会有如下的显示现在需要配置的串口,选择 Serial port setup,进入串口设置画面现在需要把端口连接速度设置为:Bps/Par/Bits 115200Hardware Flow Control OFF而 Serial Device 根据实际使用情况去做设置。设置的方法是使用各选项之前的字

5、母去执行选择。选好之后会出现如下的画面设置完并确认无误后,按回车返回之前的画面,选择 Save setup as dfl 保存设置然后退出minicom 并重新启动 minicom。3 使用串口线连接目标板与宿主机,然后启动目标板启动目标板后,目标板的启动信息会通过串口在 minicom 上显示启动信息4 使用串口烧写 bootloader重新启动目标板,并按下任意键中断系统的运行。在 vivi 的提示符后输入 Load flash vivi x,会出现如下提示现在需要通过串口使用 xmodem 协议将 vivi 传输到目标板上,这里适应 a s 选 xmodem 选择需要传输的文件,在 1

6、分钟左右的等待后,vivi 就已经被烧入了。当提示烧写完成后就可以使用新下载的 bootloader 启动目标板了。实验二熟悉 Linux 开发环境实验目的实验目的熟悉 Linux 开发环境,学会基于 S3C2410 的 Linux 开发环境的配置与使用,使用NFS 方式的下载调试,了解嵌入式开发的基本过程。实验内容本次实验使用 Debian GNU/Linux 操作系统环境安装 ARMLinux 的开发库及编译器。新建一个目录,编写 hello.c 和 makefile 文件。学习 Linux 下的编程和编译的过程,以及 ARM实验板的使用和开发环境的设置。下载已经编译好的文件到嵌入式实验仪

7、中运行。预备知识掌握 C 语言的基础知识、程序调试的基础知识, Linux 的基本操作。实验仪器硬件:armsys 嵌入式实验仪, PC 机(主频 500 以上)10G 以上硬盘软件:操作系统 Debian GNU/Linux,minicom ,ARMLinux 开发环境实验步骤:1 建立工作目录mkdir hellocd hello2 编写程序源代码#includemain()printf(“hello worldn”)3 编写 makefileCC = arm-linux-gccCFLAGS +=all:hellohello: hello.o$(CC) $(CFLAGS) -o $ $=

8、0 printk(“hello world!n“);printk(“insmod !n“);3 退出函数static void _exit s3c2410_test_exit(void)unregister_chrdev(testMajor,DEVICE_NAME);printk(“rmmod!n“);4 fops结构体的定义static struct file_operations s3c2410_test_fops = owner: THIS_MODULE,open: s3c2410_test_open,read:s3c2410_test_read,release: s3c2410_tes

9、t_release,;5 open函数static int s3c2410_test_open(struct inode *inode, struct file *filp)MOD_INC_USE_COUNT;return 0;6 release函数static int s3c2410_test_release(struct inode *inode, struct file *filp)MOD_DEC_USE_COUNT;return 0;7 read函数static ssize_t s3c2410_test_read(struct file *filp, char *buffer, siz

10、e_t count, loff_t *ppos)char * test;int count = 20;test = testread;copy_to_user(buffer,test,count);return count;为了将此字符设备模块编译成模块需要编辑Config.in,Makefile这两个文件 在Config.in文件中字符设备部分添加dep_tristate Support S3C2410 Test CONFIG_S3C2410_TEST $CONFIG_ARCH_S3C2410 在Makefile 文件中添加obj-$(CONFIG_S3C2410_TEST) += s3c2

11、410-test.o 编辑修改之就可以开始进行模块的编译,当编译完成后需要通过网络或串口将编译好的模块通过insmod 命令插入到系统中,最后使用一个应用程序,通过字符设备驱动中读取其中的内容,下面附上测试应用程序代码。#include #include int main(void)int fd;char buffer20 = “this is test“;fd = open(“/dev/test“,O_RDONLY);if(fd = -1)printf(“unable to open the test devicen“);return 0;printf(“the fd is %d n“,fd

12、);while(1)read(fd,buffer,20);printf(“read from driver:%sn“,buffer);sleep(5);实验七WatchDog实验实验目的学习在Linux下驱动设计的原理掌握使用模块方式进行驱动开发调试的过程实验内容在pc机上编写简单的WatchDog程序并进行调试,了解watchDog工作原理预备知识有C语言的基础知识掌握在Linux下常用编辑器的使用掌握Makefile的编写和使用掌握Linux下的程序编译与交叉编译过程有驱动开发知识实验仪器硬件:armsys嵌入式实验仪, PC机(主频500以上)10G以上硬盘软件:操作系统Debian G

13、NU/Linux,minicom ,ARMLinux开发环境实验要求:设计一个 WatchDog 驱动与应用程序,每 10 秒去喂狗一次 ,watchdog timeout 时间小于 1 分钟实验步骤:1 WatchDog驱动程序需要的库文件#include #include #include #include #include #include #include #include #include #include #include #include 2 WatchDog初始参数的设置/WTCON#define S3C2410_WTCON_PRESCALER(x) (x 44)new_mar

14、gin = 44;/soft_margin = new_margin;return 0;case WDIOC_GETTIMEOUT:return put_user(soft_margin, (int *)arg);default:return -ENOTTY;6 Watchdog的open 函数static int s3c2410_wdt_open(struct inode *inode, struct file *file)int ret;if (timer_alive)return -EBUSY;ret = request_irq(IRQ_WDT, s3c2410_wdt_interrup

15、t, SA_INTERRUPT, “s3c2410-watchdog“, NULL);if (ret) printk(KERN_ERR “watchdog: cant request irq: %d n“, INT_WDOG);return ret;s3c2410_wdt_config();MOD_INC_USE_COUNT;timer_alive = 1;return 0;6 Watchdog的release 函数static int s3c2410_wdt_release(struct inode *inode, struct file *file)lock_kernel();free_i

16、rq(INT_WDOG, NULL);timer_alive = 0;unlock_kernel();MOD_DEC_USE_COUNT;return 0;7 Watchdog的fops 结构体 static struct file_operations s3c2410_wdt_fops = owner: THIS_MODULE,write: s3c2410_wdt_write,ioctl: s3c2410_wdt_ioctl,open: s3c2410_wdt_open,release: s3c2410_wdt_release,;8 Watchdog的init 函数static int _i

17、nit s3c2410_wdt_init(void)int ret;ret = misc_register(if (ret) printk(KERN_ERR “s3c2410_wdt_init: cant register on minor = %d n“, WATCHDOG_MINOR);return ret;printk(“s3c2410 wdt driver, reset after %d seconds n“, soft_margin);return 0;9 Watchdog的exit 函数static void _exit s3c2410_wdt_exit(void)misc_der

18、egister(实验八GPIO实验实验目的学习在Linux下驱动设计的原理掌握使用模块方式进行驱动开发调试的过程实验内容在pc机上编写简单的GPIO程序并进行调试,了解GPIO与中断工作原理预备知识有C语言的基础知识掌握在Linux下常用编辑器的使用掌握Makefile的编写和使用掌握Linux下的程序编译与交叉编译过程有驱动开发知识实验仪器硬件:armsys嵌入式实验仪, PC机(主频500以上)10G以上硬盘软件:操作系统Debian GNU/Linux,minicom ,ARMLinux开发环境实验要求:设计一个 GPIO 驱动,使用 PB7 作为中断提供开启/ 关闭 speaker 的

19、功能实验步骤:1 GPIO驱动程序需要的库文件#include #include #include #include #include #include #include #include 2 GPIO初始参数的设置#define PB7 0x00000080 /gpio PB7 to enable/disable speaker#define PF2 0x00000004 / headphone interrupt3 Speeker enablevoid s3c2410_speaker_enable(void)GPBDAT |= PB7; / set PB7 output 1, high t

20、o enable speakerg_speaker_status = 1; 4 Speeker disablevoid s3c2410_speaker_disable(void)GPBDAT / set PB7 output 0, low to disable speaker;g_speaker_status = 0; 5 中断服务函数static void headphone_interrupt(int irq, void *dev_id, struct pt_regs *regs)if (INTPND / mask EINT2 interrupt, make its unavailable

21、SRCPND |= PF2; / first clear this irqINTPND |= PF2; / clear pending irqif ( g_speaker_status = 1) printk(“headphone plug in!n“);s3c2410_speaker_disable();EXTINT0 /clear bit 8 - bit10EXTINT0 |= 0x00000100; / set high level irq, high to low when headphone removed. else printk(“headphone remove!n“);s3c

22、2410_speaker_enable();EXTINT0 / low level trigger, must be more than 40nsINTMSK / unmask EINT2 interrupt, make its service available实验九touchScreen 驱动实验实验目的学习在Linux下驱动设计的原理掌握使用模块方式进行驱动开发调试的过程实验内容在pc机上编写简单的touchScreen 驱动并进行调试,了解touchScreen 工作原理预备知识有C语言的基础知识掌握在Linux下常用编辑器的使用掌握Makefile的编写和使用掌握Linux下的程序编

23、译与交叉编译过程有驱动开发知识实验仪器硬件:armsys嵌入式实验仪, PC机(主频500以上)10G以上硬盘软件:操作系统Debian GNU/Linux,minicom ,ARMLinux开发环境实验要求:读懂 touchScreen 驱动代码实验步骤:1 touchScreen驱动需要的库#include #include #include #include #include #include #include #include #include #include #include #include 2 touchScreen的fopsstatic struct file_operati

24、ons s3c2410_fops = owner: THIS_MODULE,open: s3c2410_ts_open,read:s3c2410_ts_read,release: s3c2410_ts_release,poll: s3c2410_ts_poll,;3 touchScreen的open 函数static int s3c2410_ts_open(struct inode *inode, struct file *filp)tsdev.head = tsdev.tail = 0;tsdev.penStatus = PEN_UP;tsEvent = tsEvent_raw;init_w

25、aitqueue_head(MOD_INC_USE_COUNT;return 0;4 touchScreen的read函数static ssize_t s3c2410_ts_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)TS_RET ts_ret;retry: if (tsdev.head != tsdev.tail) int count;count = tsRead(if (count) copy_to_user(buffer, (char *)return count; else if (filp-f_fl

26、ags interruptible_sleep_on(if (signal_pending(current)return -ERESTARTSYS;goto retry;return sizeof(TS_RET);5 touchScreen的poll 函数static unsigned int s3c2410_ts_poll(struct file *filp, struct poll_table_struct *wait)poll_wait(filp, return (tsdev.head = tsdev.tail) ? 0 : (POLLIN | POLLRDNORM); static inline void start_ts_adc(void)adc_state = 0;mode_x_axis();start_adc_x();time = 0;6 touchScreen的release函数static int s3c2410_ts_release(struct inode *inode, struct file *filp)MOD_DEC_USE_COUNT;return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报