嵌入式实验指导书
更新时间:2023-03-08 05:15:08 阅读量: 综合文库 文档下载
3.安装交叉编译器并添加环境变量: a)将交叉编译器拷贝到/usr/local子目录 打开“我的电脑”,找到:
E:/软件/ arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz 将其进行复制,粘贴到Linux主文件夹下的/usr/local下 b) 建立文件目录“/arm”并查看 [root@localhost~]# cd /usr/local [root@localhost local]# mkdir arm [root@localhost local]# ls –l
在此窗口中会显示/usr/local中的信息。会看到arm和拷贝的文件。 c) 解压
[root@localhost local]#tar xvjf arm-2007q3-51-arm-none-linux-gnueabi-i686. tar.bz空格-C/usr/local/arm(回车) d) 添加环境变量 查看环境变量
[root@localhost local]# echo $PATH 添加环境变量方法:
[root@localhost local]#kwrite /root/.bashrc(回车), 在fi下一行添加
export PATH=/usr/local/arm/arm-2007q3/bin:$PATH
保存后退出,回到终端窗口“[root@localhost local]#”。下次启动系统就可以直接用这个编译器,而不需要输入绝对路径。
再次使用echo命令可以检查新的路径变量,操作步骤如下: 重启终端窗口: 点击红帽子->终端, 打开一个Linux终端: [root@localhost ~]# echo $PATH(回车),看到添加后的路径变量。
实验四 Linux开发环境的搭建
一、实验目的
1.搭建linux系统嵌入式开发环境。 2.了解linux开发环境的组成。
四、实验步骤
1首先需要虚添加拟机中串口设备 2.安装交叉编译器并添加环境变量 3.主机Linux环境网络防火墙设置
设置方法:在主机Linux终端窗口,输入setup命令并回车,然后在弹出的菜单中选择“防火墙配置”,回车。之后在弹出的界面中用光标移动键选择“禁用”防火墙,选择“确定”后回车,退出设置。 4.主机Linux环境和目标板IP地址设置 (1)修改主机IP地址
[root@localhost local]#ifconfig eth0 192.168.1.5(回车) 查看IP地址
[root@localhost local]#ifconfig(回车) (2)设置实验箱IP地址
[root@Techv_omap35xx:~]#ifconfig eth0 192.168.1.9(回车) 查看
[root@Techv_omap35xx:~]#ifconfig(回车)
注意:实验箱IP地址的前三段和主机IP地址的前三段必须一样,最有一段可以选择和主机不同的、小于255的一个任意值。 5.查看网络连接
(1)在主机linux minicom终端窗口
[root@localhost local]# ping 192.168.1.9(回车) 可以用Ctrl+c键去终止ping命令 (2)在实验箱终端
[root@Techv_omap35xx:~]# ping 192.168.1.5(回车),看看实验系统能否和主机连上。可以用Ctrl+c键去终止ping命令 6.配置NFS网络文件系统 a)设置主机Linux允许NFS服务 首先在LINUX 主机的终端上
[root@localhost local]#setup(回车)
在“系统服务“选项菜单选中 [*]nfs ,[ ]iptables,(用空格键切换*和 ),然后按F12键退出,再选择方向键,退出setup界面
b)主机终端窗口
[root@localhost local]#kwrite /etc/exports(回车),进入令一个界面,删除第一
行,输入:(注意中间有空格)
/ (rw) /home/nfs1 (rw) 然后,保存、退出。
c)新的设置重启NFS方法:
[root@localhost local]#/etc/init.d/nfs restart 终端内输出(有8个确定):
这样就一切OK了!主机linux下的NFS启动起来。 7挂接--将主机/home/nfs1目录挂接为目标板/tmp目录 ⑴ 挂接前主机建立/home/nfs1子目录 [root@localhost /]# mkdir /home/nfs1 [root@localhost /]# cd /home/nfs1 用kwrite建立一个文件,文件名为abc: [root@localhost nfs1]#kwrite abc
保存文件并退出。(注意;这里的abc是个空文件) [root@localhost nfs1]# ls –l ⑵ 在目标板对应终端窗口,执行挂接命令
[root@Techv_OMAP35xx:/]# mount -o soft,nolock,rsize=1024 -v 192.168.1.5 :/home/nfs1 /tmp
⑶ 挂接后目标板/tmp目录列表 [root@Techv_OMAP35xx:/]# cd /tmp
[root@Techv_OMAP35xx:/var/volatile/tmp]# ls –l
五、实验说明
关于arm-2007q3交叉编译器包:arm-2007q3是一个用于嵌入式Linux内核的交叉编译器包,它其中包括交叉编译、汇编、链接、二进制文件转换工具、所需要的库函数等等。所谓交叉编译器就是一种在Redhat Linux操作系统 + X86的体系结构下,编译经过移植的linux操作系统,生成内核,该内核能够在另外一种软硬件环境下运行的编译工具,如linux操作系统 + ARM的体系结构。交叉编译其实就是在一个平台上生成能够在另一个平台上运行的代码。注意这里的平台,实际上包含两个概念:体系结构(Architecture)和操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。如我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。由于ARM硬件上无法安装我们所需的编译器,只好借助于宿
主机,在宿主机上对即将运行在目标机上的应用程序进行编译,生成可在目标机上运行的代码格式,这就是安装交叉编译器真正意义所在。
实验五 Linux应用程序编写、编译、执行实验
四、linux的应用程序的编写、填加、调试
先搭建开发环境
helloworld 应用程序是最简单的应用程序,以它为例。 建立helloworld应用程序步骤如下: 创建一个文件夹,名称建议用hello 1.编写Helloworld程序
编写helloworld.c文件,在hello目录下,输入指令:vi helloworld.c,新建文件,在文件中录入如下代码:
#include
int main(int argc, char **argv) {
printf(\ return(0); }
2.编写Makefile文件
编写Makefile文件,输入指令:vi Makefile,新建文件。一定要注意格式,格式不正确,编译会出错。Makefile 文件同样放在hello目录下。
Makefile文件内容为
CC = /usr/local/arm/arm-2007q3/bin/arm-none-linux-gnueabi-gcc all:
$(CC) -o hello hello.c clean:
-rm -f *.o hello
? ?
输入上述代码后,保存文件并退出。 上述Makefile文件内容中:
· CC 表示主编译器 · all: 表示主入口
· clean:表示清除以前编译产生的结果
注意:语句“$(CC) -o hello hello.c”和“-rm -f *.o hello”,前面有一个制表符Tab,不是空格。
3.编译
在终端下,把目录切换到hello目录下,使用命令 make
然后,如果编译通过,则在hello 目录下生成可执行文件hello 4.运行
当需要动态调试时,通过linux环境下,启动nfs服务,之后把可执行文件hello 放到一个共享的文件夹内。在linux的终端下,利用 mount命令(具体见第1章的实验步骤的第4步)挂载linux下的共享文件夹。当把linux主机上的共享目录挂上之后,就可以使用命令 ./hello,来执行。观察终端的输出。
一般的步骤是,当应用程序的动态调试通过后,就把应用程序的可执行文件,拷贝到cpu板的文件系统目录的/usr/sbin或/usr/bin目录下,掉电不丢失,就可在相应的目录下,执行可执行程序。
实验六 Linux日期、时间编程实验
一、实验目的
四、实验步骤
1.查看时间
使用date命令可以查看时间,通常显示的是当地时区的时间。 2.设置时间
主机Linux设置时间后,会保留;目标板设置时间后,加电或RESET后不保留。以下是
主机显示、设置时间举例。
⑴ 使用参数u表示UTC时间 设置时间可以使用命令及参数: date –u MMDDhhmmYYYY.ss
其中u表示UTC,从MM开始的参数分别表示月、日、时、分、年和秒。 例如:
[root@localhost ~]# date -u 011016302013.30 2013年 01月 10日 星期四 16:30:30 UTC
系统会将设置的UTC时间,自动转换成CST时间显示,例如输入date命令后,会显示:
[root@localhost ~]# date
2013年 01月 11日 星期五 00:31:42 CST ⑵ 不使用参数u表示按当地时间设置 以下设置没有设置秒,缺省值为0: [root@localhost ~]# date 011016322013 2013年 01月 10日 星期四 16:32:00 CST [root@localhost ~]# date
2013年 01月 10日 星期四 16:32:11 CST
3.要求学生了解以下程序的含义,为程序加注释。在此基础上,在实验五helloword 程序中,增加显示日期和时间、以及自己名字的代码。 4.自己编写对应的Makefile文件。 5.程序部分
以程序中time()函数读取时间的秒值;gmtime()函数将这个秒值转换成一个结构,保 存在tm_ptr中;ctime()函数把秒值转换成一个字符串;printf()函数将秒值、结构、字符串输出。sleep(3)函数表示休眠3秒,然后重复读取秒值、转换成结构和字符串输出。
程序代码为: #include
struct tm *tm_ptr; time_t the_time; (void)time(&the_time);
tm_ptr=gmtime(&the_time);
printf(\
printf(\
printf(\tm_sec);
printf(\
sleep(3);
(void)time(&the_time); tm_ptr=gmtime(&the_time);
printf(\
printf(\->tm_mday);
printf(\
tm_ptr->tm_hour,tm_ptr->tm_min,tm_ptr->tm_sec);
printf(\
return 0; }
6.编写Makefile文件,执行程序,将试验结果写到报告中。 7.将目标板的时间改成当前时间,再次执行该程序。
-/-/-\\n\
实验七 串行端口及标准输入/输出/错误编程举例
四、实验原理
⒈ 系统调用、库函数和设备驱动程序
Linux中系统调用、库函数和设备驱动程序之间的关系,如图所示。
用户程序可以直接使用系统调用;也可以通过库函数(如标准I/O库函数对应的头文件是stdio.h),由库函数去调用系统调用。由系统调用去调用设备驱动程序,驱动硬件设备工作。
系统调用也是一些函数,它们由Linux直接提供,是通向操作系统本身的接口。 Linux系统把不同的设备,抽象成不同的文件;对设备的操作,抽象成对文件的open、read、write、close和ioctl等操作。
2.Linux标准输入/输出/错误系统调用
Linux标准输入/输出/错误这一术语的含义,是指标准输入设备/标准输出设备/标准错误输出设备。在一个用户程序运行时,系统已经打开了这3个设备,并且返回了相应的文件描述符。
Linux环境中,每个运行的程序被称为进程(process),每个进程有一些与之相关联的文件描述符。文件描述符是一些小数值的整数,通常由用户打开(open)一个文件或设备时产生的返回值得到。
当一个用户程序开始运行时,它一般可以使用3个已经打开设备返回的文件描述符,这3个描述符不是由用户程序中打开(open)操作返回的,而是由系统产生的。这3个文件描述符是:
0表示标准输入,例如read(0,&c,1);表示从标准输入读入一个字符保存在c中; · 1表示标准输出,例如write(1,&c,1);表示输出c中的一个字符到标准输出; · 2表示标准错误,例如write(2,&c,1);表示输出c中的一个字符到标准错误。 当一个程序运行结束时,也不用通过这3个文件描述符去关闭(close)对应的文件或设备。
3. 标准输入/输出/错误与串行端口及仿真终端
嵌入式开发系统目标板上运行的程序,通常把标准输入/输出/错误对应的文件,与目标板上第一个串行端口,即/dev/tts/0设备关联起来。对标准输入/输出/错误的操作,就是对该串行端口的读、写操作。由于目标板第一个串行端口通过电缆与主机串行端口连接,主机Linux系统启动minicom仿真终端程序后,目标板运行的程序中的标准输入系统调用,读入的是主机键盘输入内容,而标准输出和标准错误系统调用将输出的信息,通过串口送到主机仿真终端窗口。
使用标准输入/输出/错误系统调用时,不需要对串行端口重新设置波特率、帧格式、有无调制解调器等参数,默认使用目标板Linux内核已经设定的值。
五、实验步骤
1.程序部分
在目标板运行这个程序后,用户在主机minicom终端输入一个小写字母并回车,程序会自动输出全部小写字母,然后输出回车;继续输出全部小写字母,输出回车;直到用户按下Ctrl+c,程序终止;如果用户最初输入的不是小写字母,则程序直接退出。
程序代码如下: #include
/*--------------------------------------------------------*/ int main() {
char c; int STOP=FALSE;
write(2,\/*标准错误系统调用*/
write(1,\/*标准输出系统调用*/
write(1,\write (1,\while (1)
{
read(0,&c,1); /*标准输入系统调用*/ if ((c < 'a') || (c > 'z' )) { STOP=TRUE; break; }
write(1,\ write(1,&c,1);
write(1,\ c='a';
while (STOP==FALSE) {
write(1,&c,1); c++;
usleep(100000);
if (c=='z'+1) { c='\\n';write(1,&c,1);c='a';} } }
write(1,\exit(0); }
2. 要求学生了解以上程序的含义,为程序加注释。 3.自己编写对应的Makefile文件。 4.在目标板上执行上述程序,记录输出信息。
5.提示:假定上述程序代码、Makefile文件已经输入,保存在主机Linux的/home/nfs目录下,程序代码在目标板执行。 6.修改上述程序编程实现下述功能
(1)如果在仿真终端键盘输入为数字,则程序输出“0123456789”;
(2)如果在仿真终端键盘输入为小写字母,则程序输出“a~z”的26个小写字母; (3)如果在仿真终端键盘输入为大写字母,则程序输出“ ~z”的26个大写字母; (4)如果在仿真终端键盘输入其他字符,则程序终止。
七、注意事项
1. 自行编写Makefile文件。
2. 改写程序,使其在一个程序中实现如果在仿真终端键盘输入为数字,则程序输出“0123456789”;如果在仿真终端键盘输入为小写字母,则程序输出“a~z”的26个小写字母;如果在仿真终端键盘输入为大写字母,则程序输出“ ~z”的26个大写字母;如果在仿真终端键盘输入其他字符,则程序终止。
。
实验八 基于linux的键盘驱动和应用程序的编写
四、实验原理
本实验采用键盘显示控制芯片hd7279,hd7279是一片具有串行接口的,可同时控制8位数码管,64个按键的智能显示驱动芯片。芯片无需外围元件可直接驱动led,各位独立控制译码/不译码及消隐和闪烁属性;具有(循环)左移,(循环)右移指令;按键内含去抖电路。Hd7279芯片通过中断检测到有按键按下,给cpu发送一个中断信号,cpu检测到中断信号,读取hd7279寄存器,取回相应的键值,Cpu通过指令控制hd7279数码管显示按键值。
五、程的编写步骤
1.键盘驱动程序的编写
键盘的设备驱动程序属于字符设备的驱动,因此,按照字符设备的规则编写。驱动程序名为Arm7279.c,具体程序见Arm7279.c程序源码。
2.将设备驱动编译成驱动模块
使用同一个驱动程序的源代码,当然一定要如下定义某些函数 int __init device_init (void);void __exit device_exit(void);module_init(device _init);module_exit (device_exit);在E:\\软件\\基本实验\\linux3530\\kbd7279\\arm7279driver目录下,存放驱动程序的源码和Makefile文件以及驱动的目标代码,Makefile文件中已编写好交叉编译选项,在linux环境下,在终端里,切换到该目录下,使用make 命令,就能把arm7279.c编译成
arm7279.ko 动态驱动模块。它在
E:\\软件\\基本实验
\\linux3530\\kbd7279\\arm7279driver/arm7279.ko
当编译通过后,启动linux主机下的nfs网络文件系统。
把arm7279.ko文件放到一个主机的共享文件夹下,如/home/nfs下。
启动主机下的系统工具/终端,在终端下,启动minicom 程序,配置好参数,实验系统上电,此时主机下的终端有输出,当linux系统正常启动后,利用ifconfig eth0 命令改变实验系统的IP地址,并且和主机的前三段保持一致,最后一段不同,如:主机为192.168.1.1,则实验系统可为192.168.1.5(除1外的小于255的任意数)。之后,利用mount -o soft,nolock,rsize=1024 -v 192.168.1.5:/home/nfs /tmp命令把主机上存放驱动模块程序的共享的文件目录安装到实验系统的根文件系统下,之后,查看一下,/mnt/yaffs目录下是否加入了主机上的共享目录下的文件。
在目标板窗口,加载驱动程序,输入指令:
[root@Techv_OMAP35xx:/var/volatile/tmp]# insmod arm7279.ko 可通过如下指令查看驱动程序是否加载:
[root@Techv_OMAP35xx:/var/volatile/tmp]# lsmod 由于键盘使用的是中断方式,所以加入了中断请求。 当卸载驱动模块时,使用rmmod arm7279.ko即可。 3.将设备驱动编译进内核
把编好的驱动程序填加内核中去,编译通过后,则驱动程序就安装上了。注意该例在于说明驱动程序的编写步骤,一些头文件、主设备号、硬件的宏定义等均没有详细说明,所以,具体的驱动程序请参看
kernel/drivers/char/arm7279.c。 4. 键盘的应用程序的编写
应用程序名为kbd.c,详细代码说明 #include
打开键盘的驱动程序后,利用驱动程序读取键值。把读到的键值通过串口发送到超级终端上显示。
键盘的应用程序,应该在加入键盘驱动之后使用,否则,无法正常运行!
}; for (;;)
ioctl(fd, 0, 0);
printf(\exit(0); int fd;
if ((fd = open(\
close(fd);
六、实验步骤
1.本实验使用实验教学系统的CPU板,在进行本实验时,LCD电源开关应处在关闭状态。 2.在PC串口和实验箱的CPU之间,连接串口直连电缆,在PC网口和实验箱的CPU网口之间,连接网口交叉电缆。
3.搭建开发环境,注意以下操作在/home/nfs1下 4.目标板小键盘驱动程序 (1)位置:
E:\\软件\\基本实验\\linux3530\\kbd7279
a.将kbd7279、lcddriver拷贝到主机/home/nfs1子目录 b.小键盘驱动程序名字:
/home/nfs1/ kbd7279/arm7279driver/arm7279.ko 将arm7279.ko拷贝到主机/home/nfs1子目录 [root@localhost ~]# cd /home/nfs1 [root@localhost nfs1]# ls -l
-rw-r--r-- 1 root root 90953 04-18 10:56 arm7279.ko
(3)在目标板窗口,加载驱动程序 [root@Techv_OMAP35xx:] #cd /tmp [root@Techv_OMAP35xx:/var/volatile/tmp]# ls
arm7279.ko kbd7279
加载驱动程序root@Techv_OMAP35xx:/var/volatile/tmp# insmod arm7279.ko 显示:
k=11c011cRegistering Kbdboard Device on c8a5a000 ARM800 --- > [O] Initializing HD7279 Device --- > [OK] Kbd7279 Driver Installed. set_up Setup
则说明驱动模块正常加载。
root@Techv_OMAP35xx:/var/volatile/tmp# (4)列表驱动程序模块,检查
root@Techv_OMAP35xx:/var/volatile/tmp# lsmod
Module Size Used by Not tainted arm7279 5052 0 - Live 0xbf007000 (5)用chmod命令改变应用程序kbd权限 (在主机终端窗口)
[root@localhost ~]# cd /home/nfs1/kbd7279/app_key [root@localhost app_key]# ls –l
-rw-rw-rw- 1 root root 5427 2011-05-20 kbd -rw-rw-rw- 1 root root 318 2010-05-26 kbd.c -rw-rw-rw- 1 root root 126 2010-05-26 Makefile
设置权限
[root@localhost app_key]# chmod 777 kbd
(6)执行应用程序 (在目标板终端窗口)
root@Techv_OMAP35xx:#cd /tmp/kbd7279/app_key root@Techv_OMAP35xx:/var/volatile/tmp/kbd7279 # ./kbd
Open successful Get a Key:f Get a Key:b Get a Key:7 Get a Key:3
程序运行时,目标板小键盘输入一个字符,目标板终端窗口显示该字符,同时目标板LED显示该字符。
Ctrl+c,停止运行。
5.在目标板终端下,使用卸载驱动模块的命令 rmmod arm7279.ko 当终端上输出 You have uninstall The Kbd7279 Driver succesfully, if you want to install again,please use the insmod command
则说明驱动模块正常卸载。
实验九 基于linux的跑马灯应用程序的编写
四、实验原理
通过上位机键盘控制跑马灯循环的方向,循环的速度。
六、将应用程序动态调试
把user_led目录拷贝到/nfs1文件夹中,进入user_led文件夹内的driver和app文件夹,使用命令 make 命令编译驱动程序生成leddriver.ko和应用程序led。
按着提示要求输入控制命令,LED灯开始显示。
解释:在终端下,键入执行命令./led,则在终端中首先输出LED round show in the EL_ARM800,Please enter the number 1 or 2 or 3 or 4 and L or R then Enter !以及Such as 1L or 2L or 3L or 4L or 1R or 2R or 3R or 4R,then Enter !等输出。其中1,2,3,4,是选择led闪烁的时间间隔,数值越小,闪烁间隔越短。L(l)和R(r)则选择led闪烁的方向。L(l)则确定闪烁方向为向左,R(r)则确定闪烁方向向右。闪烁总是一次闪烁8下,即从一头到另一头,回车键敲一次,则闪烁8下。和时,如选择“1” 敲回车,输入选择时间间隔,之后,选择“L”,敲回车,输入选择方向等等。当需要改变方向和时间间隔时,需要先输入字符“q”,之后连续敲回车键两次次,则可以重新选择参数。当需要退出应用程序时,输入q,回车,再输入q,再回车,则退出应用程序。
七、将应用程序加入文件系统
编译成功后,把可执行文件led,放到存放home/nfs1目录下.之后,执行可执行程序。
在代码中,实现了8个led灯闪烁的时间间隔的设定,同时也实现了闪烁方向的设定。通过给数据缓存寄存器写入的值的不同来控制闪烁方向,通过给数据缓存器写入值的时间间隔来控制闪烁的时间间隔。以此达到控制8个LED灯的目的。
八、实验步骤
1.本实验使用实验教学系统,在进行本实验时,LCD电源开关应处在关闭状态。 2. 在PC串口和实验箱的CPU之间,连接串口直连电缆,在PC网口和实验箱的CPU网 口之间,连接网口交叉电缆。
3. 搭建Linux开发环境 4. 拷贝跑马灯程序
将E:\\软件\\基本实验\\linux3530\%user_led目录拷贝到nfs1。 [root@localhost ~]# cd /home/nfs1 [root@localhost nfs1]# cd user_led [root@localhost user_led]# cd app [root@localhost app]# ls –l
-rwxr-xr-x 1 root root 6325 04-23 10:48 led -rw-rw-rw- 1 root root 1379 2010-05-26 led.c -rw-rw-rw- 1 root root 117 2010-05-26 Makefile
5. 用chmod命令改变应用程序led权限 [root@localhost app]# chmod 777 led [root@localhost app]# ls –l
-rwxr-xr-x 1 root root 6325 04-23 10:48 led -rw-rw-rw- 1 root root 1379 2010-05-26 led.c -rw-rw-rw- 1 root root 117 2010-05-26 Makefile
看到可执行文件led变成绿色,将其拷贝,也就是将/home/nfs1/user_led/ app /led 拷贝到/home/nfs1 里
6. 加载驱动模块
把/home/nfs1 /user_led/driver/leddriver.ko文件拷贝到/home/nfs1文件夹里 root@Techv_OMAP35xx:~# cd /tmp
root@Techv_OMAP35xx:/var/volatile/tmp# ls
leddriver.ko user_led 加载驱动:
root@Techv_OMAP35xx:/var/volatile/tmp# insmod leddriver.ko 7. 加载驱动成功后,执行led
root@Techv_OMAP35xx:/var/volatile/tmp# ./led
在终端中首先输出LED round show in the EL_ARM860,Please enter the number 1 or 2 or 3 or 4 and L or R then Enter !以及Such as 1L or 2L or 3L or 4L or 1R or 2R or 3R or 4R,then Enter !等输出。其中1,2,3,4,是选择led闪烁的时间间隔,数值越小,闪烁间隔越短。L(l)和R(r)则选择led闪烁的方向。L(l)则确定闪烁方向为向左,R(r)则确定闪烁方向向右。闪烁总是一次闪烁8下,即从一头到另一头,回车键敲一次,则闪烁8下。和时,如选择“1” 敲回车,输入选择时间间隔,之后,选择“L”,敲回车,输入选择方向等等。当需要改变方向和时间间隔时,需要先输入字符“q”,之后连续敲回车键两次次,则可以重新选择参数。当需要退出应用程序时,输入q,回车,再输入q,再回车,则退出应用程序。 8. 卸载驱动
root@Techv_OMAP35xx:/var/volatile/tmp# rmmod leddriver.ko
实验十 基于linux的基本绘图应用程序的编写
四、实验原理
硬件接线原理见硬件实验介绍,而在linux操作系统下引入帧缓冲(framebuffer)概念。Framebuffer是linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都由帧缓冲设备驱动程序本身来完成。对于帧缓冲设备而言,只要在显示缓冲区中与显示点对应的区域写入颜色值,对应的颜色会自动在屏幕上显示。帧缓冲设备驱动特有的文件操作函数接口:fb_ops结构体,它定
义了我们编写framebuffer设备驱动需要编写的函数。
五、实验步骤
struct fb_ops { struct module *owner; int (*fb_open)(struct fb_info *info, int user); int (*fb_release)(struct fb_info *info, int user); ssize_t (*fb_read)(struct file *file, char __user *buf, size_t count, loff_t *ppos); ssize_t (*fb_write)(struct file *file, const char __user *buf, size_t count, loff_t *ppos); int (*fb_ioctl)(struct fb_info *info, unsigned int cmd, unsigned long arg); int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd, unsigned long arg); int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma); }; 驱动程序编写
具体驱动程序见/linux/driver/vedio文件夹,其中s3c2410fb.c我们需要去细看!
应用程序
本实验主要在LCD设备驱动运行后,怎样对液晶进行操作,编写我们需要的图形界面等,具体见lcddriver文件夹。
本次实验完成上述两项任务,实验步骤如下:
1.本实验使用实验教学系统的CPU板,LCD屏,在进行本实验时,打开LCD电源开关。 2.在PC串口和实验箱的CPU之间,连接串口直连电缆,在PC网口和实验箱的CPU网口之间,连接网口交叉电缆。
3.搭建linux环境。
4.打开LCD屏的电源开关。挂载成功后,在主机下E:\\软件\\基本实验\\linux3530\\ lcddriver里把app_lcd.c编译成执行文件app_lcd,之后,把app_lcd拷贝到/home/nfs共享文件夹里。
5.添加驱动把/home/nfs1 /user_led/driver/leddriver.ko文件拷贝到/home/nfs1文件夹里,并在目标板的终端加载驱动。
6.在终端下,进入/home/nfs文件夹,键入执行命令./app_lcd,则在液晶上显示各种颜色条纹。
7.输入”1”,”2”,”3”,”4”,”5”,”6”,”7”,来选择要进行绘画的颜色,1对应着红,2对应着绿,3对应着蓝,4对应着黄,5对应着白,6对应着黑,7对应着浅蓝。输入”a”,”b”,”c”,”d”,”e”,”f”,”g”,则显示要画的实体。a对应着画水平
线,ba对应着画竖直线,c对应着画圆,d对应着填充全屏,e对应着填充圆,f对应着清屏,g对应着填充矩形。“q”则退出应用程序。
8.程序启动后应先选择颜色,即先输入1,2,3,4,5,6,7,中的一个,然后回车。之后,再输入画实体的字符,回车,观察实验效果,然后输入改变颜色的字符,回车,再输入相同的画实体字符,观察颜色是否改变。输入字符“q”,则退出应用程序。
附录
1.启动虚拟机
双击Windows桌面WMware Workstation图标; 2.用交叉网线把主机和实验系统连接:
选择Resume this virtual machine,进入Linux界面。在虚拟机中打开一个Linux终端,需要点击:红帽子->终端, 打开一个Linux终端。
⒈) minicom仿真终端设置
在终端下输入minicom –s,选择serial port setup,回车。
按下A键,将对应参数设置为/dev/ttyS0并回车;按下E键,按下I键,将对应参数设置为115200 8N1,回车;按下F键,将对应参数设置为No;然后回车保存参数,选择save setup as df1。最后选择exit。 2.)添加串口设备
如果正在运行虚拟机、Linux,这时要添加串口设备,则必须先用power off方式退出虚拟机,然后再次启动虚拟机,点击“VM”,选择“settings” ,点击Add按钮选择“Serial Port”点击“Next”按钮,然后在出现的各个对话框中,依次点击“Next”、“Finish”,则在虚拟机中添加了串行端口
选择power on this virtual machine,进入Linux界面。用户名“root”,口令“123456”。在终端窗口[root@localhost~]#输入minicom并打开实验箱之后回车,则minicom仿真终端程序会将目标板输出到终端的信息,显示出来。
在该界面上会出现“Techv_omap35xx login:”输入“root”,点击回车,此窗口会出现“root@Techv_omap35xx:~#”表示目标板终端。 3.安装交叉编译器:
a)将交叉编译器拷贝到/usr/local子目录
打开“我的电脑”,找到E:/软件/ arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz 将其进行复制,粘贴到主文件夹下的/usr/local下 b) 建文件“arm”并查看 [root@localhost~]# cd /usr/local [root@localhost local]# mkdir arm [root@localhost local]# ls –l
在此窗口中会显示/usr/local中的信息。会看到arm和拷贝的文件。 c) 解压
[root@localhost local]#tar xvjf arm-2007q3-51-arm-none-linux-gnueabi-i686. tar.bz空格-C/usr/local/arm(回车) d) 添加环境变量
[root@localhost local]# echo $PATH 添加环境变量方法:
[root@localhost local]#kwrite /root/.bashrc(回车),
在fi下一行添加“export PATH=/usr/local/arm/arm-2007q3/bin:$PATH”,点击保存、退出,回到终端窗口“[root@localhost local]#”。关掉终端窗口“[root@localhost local]#”.重启终端窗口: 点击红帽子->终端, 打开一个Linux终端:[root@localhost local]# echo $PATH(回车),看到改后的路径。
4.主机Linux环境和目标板IP地址设置 主机终端修改IP地址
[root@localhost local]#ifconfig eth0 192.168.1.5(回车) 查看
[root@localhost local]# ifconfig(回车) 实验箱终端修改IP地址
root@Techv_omap35xx:~#ifconfig eth0 192.168.1.9(回车) 查看
root@Techv_omap35xx:~#ifconfig(回车) 5网络防火墙的设置 主机linux终端窗口
[root@localhost local]#setup(回车),光标移动找到“防火墙设置”,点击回车,用光标移动键选择“禁用”防火墙,用“TAB”选择“确定”后回车,退出设置.
6.连接
在主机linux minicom终端窗口
[root@localhost local]# ping 192.168.1.9(回车),可以用Ctrl+c键去终止ping命令 在实验箱中
root@Techv_omap35xx:~# ping 192.168.1.5(回车),看看实验系统能否和主机连上。可以用Ctrl+c键去终止ping命令 7.配置NFS网络文件系统 a)设置主机Linux允许NFS服务 首先在linux 主机的终端上 [root@localhost local]#setup(回车)
在“系统服务“选项菜单选中 [*]nfs ,[ ]iptables,(用空格键切换*和 ),然后按F12键退出,再选择方向键,退出setup界面 b)主机终端窗口
[root@localhost local]#kwrite /etc/exports(回车),进入令一个界面,删除第一行,输入:(注意中间有空格)
/ *(rw) /home/nfs1 *(rw) 然后,保存、退出。
c)新的设置重启NFS方法:
[root@localhost local]#/etc/init.d/nfs restart 终端内输出(有8个确定):
这样就一切OK了!主机linux下的NFS启动起来。 d)将主机/home/nfs1目录挂接为目标板/tmp目录 ⑴ 挂接前主机建立/home/nfs1子目录 [root@localhost /]# mkdir /home/nfs1 [root@localhost /]# cd /home/nfs1 用vi建立一个文件,文件名为abc: [root@localhost nfs1]# vi abc
保存文件并退出,语句ESC ESC :wq!(注意;这里的abc是个空文件) [root@localhost nfs1]# ls –l
⑵ 在目标板对应终端窗口,执行挂接命令
root@Techv_OMAP35xx:/# mount -o soft,nolock,rsize=1024 -v 192.168.1.5 :/home/nfs1 /tmp
⑶ 挂接后目标板/tmp目录列表 root@Techv_OMAP35xx:/# cd /tmp
root@Techv_OMAP35xx:/var/volatile/tmp# ls –l
1、输出字符串:heollo 学号,例如:heollo 110210128
2、显示日期和时间
3、如果在仿真终端键盘输入为数字,则程序输出“0123456789”;
4、如果在仿真终端键盘输入为小写字母,则程序输出“a~z”的26个小写字母;
5、如果在仿真终端键盘输入为大写字母,则程序输出“A~Z”的26个大写字母;
6、编写键盘驱动程序及应用程序,实现按下的键值发送到超级终端显示。
7、编写跑马灯驱动程序及应用程序,实现LED灯的轮流显示。
1、输出字符串:heollo 学号,例如:heollo 110210128
2、显示日期和时间
3、如果在仿真终端键盘输入为数字,则程序输出“0123456789”;
4、如果在仿真终端键盘输入为小写字母,则程序输出“a~z”的26个小写字母;
5、如果在仿真终端键盘输入为大写字母,则程序输出“A~Z”的26个大写字母;
6、编写键盘驱动程序及应用程序,实现按下的键值发送到超级终端显示。
7、编写跑马灯驱动程序及应用程序,实现LED灯的轮流显示。
1、输出字符串:heollo 学号,例如:heollo 110210128
2、显示日期和时间
3、如果在仿真终端键盘输入为数字,则程序输出“0123456789”;
4、如果在仿真终端键盘输入为小写字母,则程序输出“a~z”的26个小写字母;
5、如果在仿真终端键盘输入为大写字母,则程序输出“A~Z”的26个大写字母;
6、编写键盘驱动程序及应用程序,实现按下的键值发送到超级终端显示。
7、编写跑马灯驱动程序及应用程序,实现LED灯的轮流显示。
正在阅读:
嵌入式实验指导书03-08
银行团干部入党申请书范文07-19
人与动物给药剂量换算09-13
面部表情识别与面孔身份识别的独立加工与交互作用机制05-17
班级活动及总结06-29
中国识字卡行业分析研究报告目录09-13
有关保研考研的内容—学姐整理04-09
电大毕业登记表的自我鉴定范文优秀7篇03-25
政治经济学试题及答案4494605-19
1996年古代歌曲《关雎诗谱》研究07-01
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 指导书
- 嵌入式
- 实验
- 广告机项目可行性研究报告
- 关于公布2012年金太阳示范项目目录的通知
- 2017部编一年级下册《道德与法治》进度和教学设计
- 新学期第一次教研组长和备课组长会议上的讲话
- 教育从“心”起航
- 009 中学生学习心理咨询
- 文学常识
- 九年级物理(实用)教案1-22章
- 2010-2018高考真题理科数学分类汇编解析版第26讲 椭圆
- 2001年
- 财务部门岗位职责
- 在全镇城乡居民社会养老保险工作动员会上的讲话
- 露天煤矿安全规程题库 - 终极版
- 心理健康知识大赛复习资料(修订版)
- 教室LED日光灯节能控制设计
- 2016-2022年中国接触网作业车产业链发展现状深度调查及发展前景
- 冀教版八年级英语第42课导学案
- 金蝶K3RISE专业版V12.2升级指南
- Unit 4 My home第一课时学案
- 新审定人教版二年级上册数学期末检测卷32