1、mount o iocharset=gb2312 /dev/cdrom /mnt5进入光盘的Linux工具软件目录。执行该目录下的shell文件“install.sh,Linux工具软件会自动安装完成。对于S2410,会将程序安装在目录“arm2410cl下,穿插编译器安装在目录“/opt/host下。用户可以通过使用命令“armv41-unknown-linux-gcc运行穿插编译器。6启动mini超级终端程序,选择“Serial port setup进入串口配置界面进展串口配置。然后可以翻开下位机的电源,通过mini对下位机进展操作。7使用命令ifconfig分别查看上位机和下位机的IP地
2、址,判断上位机与下位机是否处于同一个网段。假设它们不在同一网段,使用命令ifconfig或者KDE桌面的工具,将它们配置在同一网段。使用命令ping查看上位机与下位机的网络连接是否正常,如不正常,请检查网线的连接、IP地址的配置、IP地址是否冲突等。8将上位机配置为NFS效劳器,设置共享目录为“/arm2410cl。9在上位机中启动NFS效劳,下位机使用命令mount挂载上位机的共享目录。mount t nfs 192.168.0.252:arm2410cl /mnt/nfs1.4给下位机烧写软件系统下位机的软件系统由Bootloader、系统内核、根文件系统和应用程序四局部组成。Bootlo
3、ader相当于PC机上的BIOS,在下位机加电时自动运行,执行硬件初始化和调用系统内核的功能。Bootloader分为U-boot、Vivi、Blob、ARMBoot、RedBoot等多种,本实验使用实验箱自带光盘中的vivi。系统内核就是运行在下位机上的操作系统内核,本实验使用实验箱自带光盘中的zImage,是ARM-Linux的内核,版本号为2.6。根文件系统是Linux系统必不可少的一局部,用来管理下位机中的文件。本实验使用实验箱自带光盘中的root.cramfs。Cramfs是专门针对Flash设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩,文件系统类型可以是EXT2
4、或EXT3,经常作为下位机的根文件系统。应用程序是需要烧写到下位机,在下位机中运行的程序,在上位机中以压缩文件包的形式保存,本实验使用实验箱自带光盘中的yaffs.tar.bz2。应用程序所的文件系统为YaffsYet Another Flash File System,Yaffs是一种专门为Flash设计的嵌入式文件系统,运行速度快、占用内存小,提供写均衡、垃圾收集等底层功能。给下位机烧写软件系统的步骤:1烧写Vivi到下位机;2在上位机的Windows XP中配置超级终端,连接下位机;3烧写系统内核到下位机;4烧写根文件系统到下位机;5烧写应用程序到下位机。二.根本原理2.1LED显示控制
5、原理LED是发光二极管英文Light Emitting Diode的缩写格式,LED器件种类繁多,早期的LED产品是单个发光管,随着数字化设备的出现,LED数码管和字符管得到了广泛的应用,LED点阵等显示器件的出现,适应了信息化社会开展的需要,成为了群众传媒的重要工具。 LED发光灯按类型可以分为单色发光灯、双色发光灯、三色发光灯、面发光灯、闪烁发光灯、电压型发光灯等;按发光强度可分为普通亮度发光灯、高亮度发光灯、超高亮度发光灯等。2.1.17段或8段LEDLED的7个字段分别称为a、b、c、d、e、f、g,有时还有一个小数点段h,图1(a)所示。通过7个或8个发光段的不同组合,显示09和AF
6、共16个字母数字,从而实现十六进制的显示。 为使7段显示器显示数字或字符,就需点亮相应的段,每个段分别由数据线进展控制,通常数据线D0D7顺序控制ah段,如图11-34(b)所示,所需的控制信号称为段码。 由于数字与段码之间没有规律性,因此必须进展数字与段码之间的转换以便显示数字。常用的转换方法是将要显示字形的段码列成一个表,称为段码表。显示时,根据字符查段码表,取出其对应的段码送到数据线上来控制显示。图1 8段LED 显示器外形及各段对应的数据线LED有两种不同的形式:一种是8个发光二极管的阳极都连在一起,称为共阳极,如图2a所示;另一种是8个发光二极管的阴极都连在一起,称为共阴极,如图2b
7、所示。图2 8段LED 显示器原理图 2.1.2点阵式LED点阵式LED的显示单元一般由8行8列LED组成,其外形及内部连接如图3所示,可以再由这8行8列的LED拼成更大的LED阵列。点阵式LED显示器能显示各种字符、汉字及图形、图像,并具有色彩。 点阵式LED中,每个LED表示一个像素,通过每个LED的亮与灭来构造出所需的图形,各种字符及汉字也是通过图形方式来显示的。对于单色点阵式LED,每个像素需要1位二进制数表示,1表示亮,0表示灭。对于彩色点阵式LED,那么每个像素需要更多的二进制位表示,通常需要一个字节。点阵式LED显示器的显示控制采用扫描方式,在数据存储器中开辟假设干个存储单元作为
8、显示缓冲区,缓冲区中存有所需显示图形的控制信息。显示时依次通过列信号驱动器输出一行所需所有列的信号,然后再驱动对应的行信号,控制该行显示。只要扫描速度适当,显示的图形就不会出现闪烁。2.274HC273在开发板上的连接2.2.17段或8段LED的连接开发板上设置了2个数码管,由74HC273控制,如图4所示。74HC273是同步串行转并行的锁存器,在此通过SPI总线和CPU连接,锁存数据后驱动数码管发光。图4 开发板上7段LED的连接2.2.2点阵式LED的连接点阵式LED在开发板上的连接如图5所示。点阵式LED 驱动器逻辑中设置了8 个字节的缓冲区,每个字节按位对应点阵式LED 模块上的一列
9、8个点。驱动器中的扫描电路会将缓冲区的内容不断输出到LED模块,CPU 可以读写此缓冲区,从而可以更新现实内容。图5 开发板上点阵式LED的连接点阵LED存放器组共8个字节存放器,地址A4A3A2A1=从0000 到0111,按地址递增顺序分别对应点阵LED模块从左到右的8个列。每个字节存放器对应一列,字节存放器内8 个位对应该列的8 个LED,从Bit0 到Bit7 分别对应从上到下的LED,如图6所示。图6 点阵式LED存放器组2.3LED编程本次实验中,利用 LED驱动程序“s3c2410-led.o提供的open、ioctl、write、release等函数控制LED显示。可在一样目录
10、下找到其源程序“s3c2410-led.c进展分析。2.3.17段LED的段码表由于开发板上两个数码管的连接是共阳极,分别显示“十位和“个位数字,中间是一个点号,总是让它置“1。所以当想要其中之一显示为“0时,那么其对应的段码应为“11000000,转化为十六进制即为0xc0。同理可以给出“1“9的段码,从而形成如下段码表:unsigned char LEDCODE11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;注意:前10个表示字符“0“9的段码,最后一个表示各段全灭,不显示。用户程序使用ioctl函数用来控制2个数码管的显
11、示: ioctl(fd,0x12,LEDWORD);由于两个8字数码管需要同时显示,故需要将“十位的段码左移8位,拼接上“个位的段码,形成一个16位的LEDWORD。2.3.2点阵式LED的显示缓冲区如要显示字符或图形,需要先给出对应点阵数据存储在缓冲区才能显示。图7所示的是字符“0和心形图的点阵,参照图6分别给出各自8个字节中的数据为: “0: 0x00,0x00,0x7c,0x82,0x82,0x82,0x7c,0x00心形图: 0x00,0x0c,0x12,0x22,0x44,0x22,0x12,0x0c 通过调用write函数控制点阵式LED显示对应字符或图形。图7 字符“0和心形图的
12、点阵三系统分析与设计3.1设计需求本次综合实训任务主要是基于Linux的LED驱动程序设计及完成相关的操作。大致分为两个阶段,第一阶段为环境搭建,第二局部是驱动程序设计。需要完成的任务是,由驱动程序驱动开发板的LED灯,并且经测试,能够正确的点亮或熄灭开发板上的LED灯,即为完本钱次实训任务。3.2 LED点阵显示与C语言编程3.2.1 LED点阵显示点阵的接法有共阴极和共阳极两种共阳极指的是对每一行LED来讲是共阳极的。显示的方法有两种:1、逐列扫描方式:亮的列从左向右扫描完8列相当于位码循环移位8次即显示出一帧完整的图像。uchar codeTAB=0x81,0xFD,0xFD,0xC1,
13、0xBF,0xBF,0xBD,0xC3;uchar i,t;delay(uchar t)while (t-);void main(void)while(1) P2=0x01; for(i=0;i8;i+) P1=TABi; delay(100); P2=P27; 2、逐行扫描方式:与逐列扫描调换,扫描完8行显示出一帧图像。本设计中图形显示的C语言程序的分析3.2.2 C语言编程利用嵌入式实验平台和LED的工作原理,在本设计中的C语言编程如下:1)调用系统库函数#include stdlib.hftl.hunistd.hsys/ioctl.hsys/mman.hlinux/delay.h#def
14、ine TUBE_IOCTROL 0x11#define DOT_IOCTROL 0x122子函数的设计void jmdelay(int n) int i,j,k; for (i=0;n; for (j=0;j100;j+) for (k=0;kk+);3主函数的设计int main() int fd; int i; unsigned int LEDWORD;unsignedchar LEDCODE11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; unsigned char man_data98=0x4c,0x92,0x92,
15、0x7c,0x0c,0x12,0x12,0x0c,0,0,0,0,0,0,0x0b,0xd3,0,0,0,0,0x0b,0xd3,0x3c,0x48,0,0,0x0b,0xd3,0x3c,0x4b,0x20,0,0,0,0x03,0x13,0xfc,0x08,0,0,0,0,0,0x0b,0xd3,0x3c,0x48,0,0,0x0b,0xd3,0x3c,0x48,0x20,0,0,0,0x08,0x93,0x4b,0x3c,0x24,0x48,0x20,0x48,0x20,0,0,0,0,0,0 ; fd=open(/dev/led/0raw,O_RDWR);if (fd =0;i-) LE
16、DWORD=(LEDCODEi8)|LEDCODEi;ioctl(fd,0x12,LEDWORD);jmdelay(1500);will enter DIG LED ,please waiting . nfor (i=0;9;i+) write(fd,man_datai,8); jmdelay(1000); close(fd); return 0;3.3 Makefile文件的编写在Makefile中可以使用函数来处理变量,从而让我们的命令或是规那么更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。makefile带来的
17、好处就是“自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比方:Delphi的make,VisualC+的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。Makefile文件的一般格式objects = main.o kbd.o mand.o display.o insert.o search.o files.o utils.oedit : $(objects)cc -o edit $(obj
18、ects)main.o : main.c defs.hcc -c main.ckbd.o : kbd.c defs.h mand.hcc -c kbd.cmand.o : mand.c defs.h mand.hcc -c mand.cdisplay.o : display.c defs.h buffer.hcc -c display.cinsert.o : insert.c defs.h buffer.hcc -c insert.csearch.o : search.c defs.h buffer.hcc -c search.cfiles.o : files.c defs.h buffer.
19、h mand.hcc -c files.cutils.o : utils.c defs.hcc -c utils.cclean :rm edit $(objects)Makefile文件编写的规那么:1如果这个工程没有编译过,那么我们的所有C文件都要编译并被。2如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并目标程序。3如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并目标程序。 利用Makefile文件的编写方法,编写本设计中的Makefile文件:KERNELDIR = /arm2410cl/kernel/linux-2.4.18-2410cl/
20、INCLUDEDIR = $(KERNELDIR)/includeCROSS_PILE=armv4l-unknown-linux-CC =$(CROSS_PILE)gccCFLAGS += -I.CFLAGS += -Wall -O -D_KERNEL_ -DMODULE -I$(INCLUDEDIR)TARGET = s3c2410-led.o led01all: $(TARGET)s3c2410-led.o:s3c2410-led.c $(CC) -c $(CFLAGS) $ -o $led01:led01.o$(CC) $ -o $clean:rm -f $(TARGET) *.o *
21、core .depend“$(CC) $ -o $和“rm -f $(TARGET) *.o * core .depend前面的空白有一个Tab制表符生成,不能单纯有空格代替。3.4实验环境的连接1)配置实验的环境。一、配置NFS效劳NFSNetwork File System指网络文件系统,是Linux 系统中经常使用的一种效劳,NFS是一个RPC service,很像windows 中的文件共享效劳。它的设计是为了在不同的系统间使用, 所以它的通讯协议设计与主机及作业系统无关。当使用者想用远端档案时只要用mount就可把remote档案系统挂接在自己的档案系统之下,使得远端的档案在使用上和
22、local 的档案没两样。在NFS 效劳中,宿主机Servers是被挂载mount端,为了远端客户机Clients如:S3C6410 目标板可以访问宿主PC机的文件,我们需要配置宿主机两方面内容:翻开NFS效劳,允许“指定用户访问宿主PC 机。A、在终端中输入命令安装NFS效劳:apt-get install nfs-kernel-serverB、输入以下命令以配置NFS效劳: sudo gedit /etc/exports 翻开文件后,在文件中添加如下内容:/temp/tftpboot/nfsroot *(insecure,rw,sync,no_root_squash) 添加完毕,保存文件并
23、退出,继续输入如下命令,为NFS效劳端所在目录授予权限:chmod 777 /temp/tftpboot/nfsrootC、重新启动NFS效劳sudo /etc/init.d/nfs-kernel-server restartsudo /etc/init.d/portmap restartD、测试NFS效劳:showmount emount 172.16.41.217:/temp/tftpboot/nfsroot /mntls -l /mnt二、配置超级终端A、在Windwos操作系统下,翻开超级终端,新建一个连接,步骤如下:首先为新建连接输入一个名称,然后选择我们所需要连接到的端口,最后配置
24、端口属性, 这里只需要修改两处:位/秒(B):115200,数据流控制(F):无。B、连接到开发板C、配置开发板仅仅连接到开发板还不够,要使用开发板进展开发测试工作,需要进展一定的配置后,才能正常工作,接下来准备在超级终端下对开发板进展配置按如下步骤在超级终端下分别输入如下命令:、setenv bootargs noinitrd init=/linuxrc console=ttySAC2,115200 mem=256M root=/dev/nfs nfsroot=172.16.41.217:/temp/tftpboot/nfsroot ip=172.16.41.35:172.16.41.217:172.16.41.1:255.255.255.0:eth0:off、set serverip 172.16.41.217、set ipaddr 172.16.41.35、save执行完以上命令后,开发板就配置完成了,可以使用print命令来查看开发板参数。2)根据要求编写C语言程序和Makefile文件,放到相应目录。3使用命令“cd /labs/La
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1