版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux驱动开发实验报告Linux驱动开发实验报告目录Linux驱动开发实验报告 1实验一、Linux内核移植实验 21.1资源 21.2解压源码包 31.3修改Makefile文件,支持交叉编译 31.1得到.config文件 31.5修改NandFlash分区 41.6添加LCD支持 51.7添加网卡驱动 61.8添加YAFFS文件系统支持 71.9内核配置(即内核裁剪) 71.10编译内核 91.11烧写内核 9实验二、ARMNorflash驱动实验 102.1、环境 102.2、目的 102.3、实验步骤 10实验三、嵌入式linux驱动实验 153.1、实验目的 153.2、实验原理 153.3、参考程序 163.4、实验步骤 243.5、实验结果 293.6、实验体会 29实验四、LCD驱动实验 294.1、实验目的 294.2、实验设备(环境)及要求 294.3、试验结果 314.4、实验总结 31实验五、DM9000网卡驱动 325.1、实验目的 325.2、实验设备(环境)及要求 325.3、实验内容与步骤 325.4、试验结果 345.5、实验总结 34实验一、Linux内核移植实验1.1资源linux-.tar.bz2 (Linux内核源码的压缩包,下载地址)yaffs2.tar.gz (yaffs文件系统源码的压缩包)dm9000.h和dm9000.c (dm9000网卡驱动程序)1.2解压源码包在XP中,把“01/下午/src”文件夹拷贝到“//2”的共享文件夹uptech内,并把uptech中的“src”更名为“01linux在Linux虚拟机中进入该文件夹“cd/home/uptech/01linux”ls可见1个文件:“linux-.tar.bz2”、“yaffs2.tar.gz”、“dm9000.h”、“dm9000.cbz2压缩包用“tarjxvf”解压gz压缩包用“tarzxvf”解压解压Linux源码压缩包,即输入命令“tarjxvflinux-.tar.bz2解压YAFFS源码压缩包,即输入命令“tarzxvfyaffs2.tar.gz”1.3修改Makefile文件,支持交叉编译cd/home/uptech/01linux/linux-,该目录下就是linux的内核源码修改Makefile文件,使之支持交叉编译,也就是在Linux上编译出ARM开发板上运行的内核程序。ARCH ?= arm (目标平台是arm)CROSS_COMPILE ?= arm-linux- (交叉编译器的前缀是arm-linux-)1.1得到.config文件得到.config文件将“/home/uptech/01linux/linux-/arch/arm/configs/s3c2110_defconfig”文件拷贝成“/home/uptech/01linux/linux-/.config”cp arch/arm/configs/s3c2110_defconfig .config对内核进行裁剪(此时暂时不做裁剪,仅是看看)makemenuconfig1.5修改NandFlash分区修改“/home/uptech/01linux/linux-/arch/arm/plat-s3c21xx/common-smdk.c”文件中的“structmtd-partitionsmdk_default_nand_part[]”这个结构体:第一个分区从0x00000000到0x00080000,大小为0.5M第二个分区从0x00080000到0x00280000,大小为2M第三个分区从0x00280000到0x00680000,大小为1M第四个分区从0x00680000到0x01000000,大小为57.5M具体做法:(1)viarch/arm/plat-s3c21xx/common-smdk.c(2)修改分区信息结构体staticstructmtd_partitionsmdk_default_nand_part[]={[0]={.name="Bootloader",.size=0x80000,.offset=0,},[1]={.name="LinuxKernel",.offset=0x80000,.size=SZ_2M,},[2]={.name="RootFileSystem",.offset=0x280000,.size=SZ_1M,},[3]={.name="UserSpace",.offset=0x680000,.size=0x3980000,},};1.6添加LCD支持修改“/home/uptech/01linux/linux-/arch/arm/mach-s3c2110/mach-smdk2110.c”。具体做法:(1)viarch/arm/mach-s3c2110/mach-smdk2110.c(2)在mach-smdk2110.c文件内添加两个头文件 #include<asm/arch/fb.h>#include<linux/platform_device.h>(3)在mach-smdk2110.c文件内添加两个结构体 staticstructs3c2110fb_displayup2110_fb[]__initdata={{.lcdcon5=(1<<12)|(1<<11)|(1<<9)|(1<<8)|(1<<0),.type=(3<<5),.width=610,.height=180,.pixclock=39721,.xres=610,.yres=180,.bpp=16,.left_margin=10,.right_margin=32,.hsync_len=32,.vsync_len=2,.upper_margin=35,.lower_margin=5,},};staticstructs3c2110fb_mach_infoup2110_fb_info__initdata={.displays=up2110_fb,.num_displays=1,.default_display=0,.gpcup=0xffffffff,.gpcup_mask=0x0,.gpccon=0xaaaaaaaa,.gpccon_mask=0x0,.gpdup=0xffffffff,.gpdup_mask=0x0,.gpdcon=0xaaaaaaaa,.gpdcon_mask=0x0,.lpcsel=0,};(1)在mach-smdk2110.c文件内,在“smdk2110_init”函数的末尾一行添加: s3c21xx_fb_set_platdata(&up2110_fb_info);1.7添加网卡驱动1、修改“/home/uptech/01linux/linux-/arch/arm/mach-s3c2110/mach-smdk2110.c”。具体做法:(1)viarch/arm/mach-s3c2110/mach-smdk2110.c(2)在mach-smdk2110.c文件添加两个结构体,用于定义端口地址和中断号等设备信息staticstructresources3c_dm9ks_resource[]={[0]={.start=0x10000000,.end=0x10000010,.flags=IORESOURCE_MEM,},[1]={.start=IRQ_EINT2,.end=IRQ_EINT2,.flags=IORESOURCE_IRQ,},};structplatform_devices3c_device_dm9ks={.name="s3c2110-dm9ks",.id=-1,.num_resources=ARRAY_SIZE(s3c_dm9ks_resource),.resource=s3c_dm9ks_resource,};(3)在“structplatform_device*smdk2110_devices[]__initdata”末尾加入网卡数据:&s3c_device_dm9ks,2、将新的“dm9000.c”和“dm9000.h”拷贝到“/home/uptech/01linux/linux-/drivers/net”文件夹内,替换旧的文件。 cp /home/uptech/01linux/dm9000.* drivers/net/ 在dm9000.c文件中增加了uptech_dm9k_init函数,并在dm9k_init_module(void)函数中调用了uptech_dm9k_init。1.8添加YAFFS文件系统支持1、进入yaffs解压后的文件夹cd/home/uptech/01linux/yaffs22、给Linux打补丁 ./patch-ker.shc../linux-/3、进入linux内核文件夹cd/home/uptech/01linux/linux-1.9内核配置(即内核裁剪)1、运行“makemenuconfig”,进入内核配置界面2、选择硬件系统 SystemTypeS3C2110Machines[*]SMDK2110/A9M2110 其他不要选,以免内核太大3、配置NandFlash驱动DeviceDrivers<*>MemoryTechnologyDevice(MTD)support<*>NANDDeviceSupport<*>NANDFlashsupportforS3C2110/S3C2110SoC1、配置LCD驱动DeviceDriversGraphicssupport<*>Supportforframebufferdevices<*>S3C2110LCDframebuffersupportDeviceDriversGraphicssupport[*]Bootuplogo[*]StandardblackandwhiteLinuxlogo[*]Standard16-colorLinuxlogo[*]Standard221-colorLinuxlogo5、配置网卡驱动 DeviceDrivers[*]Networkdevicesupport[*]Ethernet(10or100Mbit)-*-GenericMediaIndependentInterfacedevicesupport<>ASIXAX88796NE2021clonesupport[]ASIXAX88796external93CX6eepromsupport<>SMC91C9x/91C1xxxsupport<*>DM9000support<>Broadcom110x/17xxethernetsupport6、配置文件系统支持CRAMFS文件系统、YAFFS文件系统、NFS文件系统FilesystemsMiscellaneousfilesystems <*>YAFFS2filesystemsupport-*-512byte/pagedevices[]Useolder-styleon-NANDdataformatwithpageStatusbyte[]LetsYaffsdoitsownECC-*-2021byte(orlarger)/pagedevices[*]Autoselectyaffs2format[]Disablelazyloading[]Turnoffwidetnodes[]Forcechunkerasecheck[*]CacheshortnamesinRAM<>JournallingFlashFileSystemv2(JFFS2)support<*>CompressedROMfilesystemsupport(cramfs)Filesystems[*]NetworkFileSystems <*>NFSfilesystemsupport[*]ProvideNFSv3clientsupport[*]ProvideclientsupportfortheNFSv3ACLprotocolextension[]ProvideNFSv1clientsupport(EXPERIMENTAL)[*]AllowdirectI/OonNFSfiles<>NFSserversupport[*]RootfilesystemonNFS1.10编译内核在“/home/uptech/01linux/linux-”文件夹内运行:makecleanmake 之后会在“/home/uptech/01linux/linux-/arch/arm/boot/”内生成内核镜像文件zImage通过zImage生成uImage(1)新建文件夹“/home/uptech/image” mkdir/home/uptech/image cd /home/uptech/image(2)把“/home/uptech/03u-boot/u-boot-1.3.2/tools/mkimage”拷贝到“/home/uptech/image/” cp /home/uptech/03u-boot/u-boot-1.3.2/tools/mkimage .(3)把“/home/uptech/01linux/linux-/arch/arm/boot/zImage”拷贝到“/home/uptech/image/” cp /home/uptech/01linux/linux-/arch/arm/boot/zImage . (1)生成uImage ./mkimage–Aarm–Tkernel–Cnone–Olinux–a0x30008000–e0x30008010–dzImage–n‘Linux-2.6.21’uImage1.11烧写内核确认serverip是Linux虚拟机的IP地址(1)执行“printenv”,查看serverip是否与Linux虚拟机的IP地址一致(2)若不一致,执行“setenvserverip2”来指定tftp服务器的IP地址(3)执行“saveenv”保存设置。将生成的uImage文件拷贝到tftpboot目录下:cpuImage/tftpboot在ARM开发板上运行命令:tftp0x30008000uImage (把uImage文件下载到ARM开发板的SDRAM中0x30008000开始的空间中)nanderase0x800000x202100 (擦除NandFlash中起始地址为0x80000,大小为0x202100的空间)nandwrite0x300080000x800000x202100 (把SDRAM中0x30008000开始的内容写入NandFlash0x80000开始的空间内,大小为0x202100)重启ARM开发板,执行命令“bootm”,此时液晶屏左上角出现小企鹅图案。实验二、ARMNorflash驱动实验2.1、环境目标板:mini2440(S3C2440)交叉编译器:arm-linux-gcc-4.3.2操作系统:Linux(Ubuntu-11.10)2.2、目的移植mini2440板子上为2M的NorFlash(型号为SST39VF1601)驱动2.3、实验步骤(一).添加配置项
1、修改drivers/mtd/maps/Kconfig文件,在config_EDB7312配置项下添加如下内容:
configMTD_MINI2440
tristate"CFIFlashdevicemappedonMINI2440"
dependsonARM&&MTD_CFI
help
ThisenablesaccesstotheCFIFlashontheCogentMINI2440board.
Ifyouhavesuchaboard,say'Y'here.
2、修改drivers/mtd/maps/Makefile文件,在obj-$(CONFIG_MTD_EDB7312)+=edb7312.o下添加如下内容:
obj-$(CONFIG_MTD_MINI2440)+=mini2440.o
3、复制驱动文件mini2440.c到drivers/mtd/maps目录下
(二).配置编译内核
#makemenuconfig
以下内容必选:
MemoryTechnologyDevices(MTD)-->
<*>MemoryTechnologyDevice(MTD)support
[*]MTDpartitioningsupport
<*>DirectchardeviceaccesstoMTDdevices
<*>CachingblockdeviceaccesstoMTDdevices
RAM/ROM/Flashchipdrivers-->
<*>DetectflashchipsbyCommonFlashInterface(CFI)probe
<*>SupportforInter/Sharpflashchips
<*>SupportforAMD/Fujitsu/Spansionflashchips
<*>CFIflashdevicemappedonmini2440
下列内容(在flash上架fat16/fat32/ntfs/ext2等文件系统时才需要选上)不要选,否则会出现加载驱动模块时会出现ftl_cs:FTLheadernotfound.
DeviceDrivers->
MemoryTechnologyDevices(MTD)->
<>FTL(FlashTranslationLayer)support
<>NFTL(NANDFlashTranslationLayer)support
<>INFTL(InverseNANDFlashTranslationLayer)support(三).根据edb7312单板的norflash驱动(linux/mtd/maps/edb7312.c)来写mini2440的norflash驱动
代码在mini2440.c中(带详细注释)/*支持单板:mini2440
*支持内核:3.1.2版本
*模仿驱动:/linux/drivers/mtd/maps/edb7312.c
*/
#include<linux/module.h>
#include<linux/types.h>
#include<linux/kernel.h>
#include<linux/init.h>
#include<asm/io.h>
#include<linux/mtd/mtd.h>
#include<linux/mtd/map.h>
#include<linux/mtd/partitions.h>
#defineWINDOW_ADDR0x00000000/*NORFLASH物理地址*/
#defineWINDOW_SIZE0x00202100/*NORFLASH大小*/
#defineBUSWIDTH2/*估计是2Byte*/
/*探测的接口类型,可以是"cfi_probe","jedec_probe","map_rom",NULL};*/
#definePROBETYPES{"cfi_probe",NULL}
#defineMSG_PREFIX"MINI2440-NOR:"/*printk的前缀*/
#defineMTDID"mini2440-nor"/*MTD驱动*/
staticstructmtd_info*mymtd;
/*定义一个map_info,代表一块norflash*/
structmap_infomini2440nor_map=
{
.name="NORflashonMINI2440",
.size=WINDOW_SIZE,
.bankwidth=BUSWIDTH,
.phys=WINDOW_ADDR,
};
/*默认分区信息*/
staticstructmtd_partitionstatic_partitions[3]=
{
{
.name="bootloader",
.size=0x40000,//256K
.offset=0
},
{
.name="Kernel",
.size=0x100000,//1M
.offset=0x40000
},
{
.name="RootFS",
.size=0xC0000,//768K
.offset=0x140000
},
};
staticconstchar*probes[]={NULL};
staticintmtd_parts_nb=0;
staticstructmtd_partition*mtd_parts=0;
/*Norflash模型初始化函数
*<1>物理地址映射为虚拟地址:mini2440nor_map.virt=ioremap(WINDOW_ADDR,WINDOW_SIZE);
*<2>探测norflash芯片,得到map_info:do_map_probe();//应该是mtd_info,而不是map_info,转载者注释
*<3>探测分区信息,得到mtd_partition:parse_mtd_partitions();
*<4>利用map_info和mtd_partition注册设备:mtd_device_register();//应该是mtd_info,而不是map_info,转载者注释
*/
int__initinit_mini2440nor(void)
{
staticconstchar*rom_probe_types[]=PROBETYPES;
constchar**type;
constchar*part_type=0;
printk(KERN_NOTICEMSG_PREFIX"0x%08xat0x%08x\n",WINDOW_SIZE,WINDOW_ADDR);
/*物理地址映射为虚拟地址*/
mini2440nor_map.virt=ioremap(WINDOW_ADDR,WINDOW_SIZE);
if(!mini2440nor_map.virt)
{
printk(MSG_PREFIX"failedtoioremap\n");
return-EIO;
}
simple_map_init(&mini2440nor_map);
mymtd=0;
type=rom_probe_types;
for(;!mymtd&&*type;type++)
{
/*根据map_info探测norflash芯片,若成功则返回mtd_info*/
mymtd=do_map_probe(*type,&mini2440nor_map);
}
if(mymtd)
{
mymtd->owner=THIS_MODULE;
/*探测分区信息,若探测成功,则mtd_parts中保存了分区信息;若探测失败,使用数组定义的默认分区信息*/
mtd_parts_nb=parse_mtd_partitions(mymtd,probes,&mtd_parts,MTDID);
if(mtd_parts_nb>0)
part_type="detected";
if(mtd_parts_nb==0)
{
mtd_parts=static_partitions;
mtd_parts_nb=ARRAY_SIZE(static_partitions);
part_type="static";
}
if(mtd_parts_nb==0)
printk(KERN_NOTICEMSG_PREFIX"nopartitioninfoavailable\n");
else
printk(KERN_NOTICEMSG_PREFIX"using%spartitiondefinition\n",
part_type);
/*注册设备*/
mtd_device_register(mymtd,NULL,0);
mtd_device_register(mymtd,mtd_parts,mtd_parts_nb);
return0;
}
iounmap((void*)mini2440nor_map.virt);
return-ENXIO;
}
/*Norflash模块卸载函数
*<1>注销设备:mtd_device_unregister();
*<2>销毁map_info:map_destroy();
*<3>取消映射:iounmap();
*/
staticvoid__exitcleanup_mini2440nor(void)
{
if(mymtd)
{
/*注销设备*/
mtd_device_unregister(mymtd);
/*销毁map_info*/
map_destroy(mymtd);
}
if(mini2440nor_map.virt)
{
iounmap((void*)mini2440nor_map.virt);
mini2440nor_map.virt=0;
}
}
module_init(init_mini2440nor);
module_exit(cleanup_mini2440nor);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("WeiDongWu<625769020@>");
MODULE_DESCRIPTION("GenericconfigurableMTDmapdriver");实验三、嵌入式linux驱动实验3.1、实验目的安装linux-2.6.38让Makefile中的路径与linux-2.6.38保持一致。修改驱动.c文件,使得用pc0来控制红灯。通过交叉编译器进行交叉编译生成可执行文件通过tftp传送文件。实现驱动的加载和卸载。3.2、实验原理1)工作原理框图2)工作原理根据上图通过编写驱动程序可以控制pc0接口,当它高电平时,D9led灯熄灭;当它低电平时,D9led灯点亮。在编写适当的应用程序完成实验。3.3、参考程序Led_app.c(应用程序)#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/ipc.h>#include<sys/ioctl.h>#include<sys/mman.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#defineLED_DEVICE"/dev/led_cugb"#defineLED_ON0#defineLED_OFF1staticunsignedcharbuf_wr[10]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};staticunsignedcharbuf_rd[10];intmain(){intfd;intval=-1; inti,ret;if((fd=open(LED_DEVICE,O_RDWR))<0){printf("opendeviceerror!\r\n");exit(1);}while(1){printf("0:LEDON,1:LEDOFF,2:Writetest,3:Readtest,4:quit\r\n");scanf("%d",&val); switch(val) { case0: ioctl(fd,LED_ON,0); break; case1: ioctl(fd,LED_OFF,0); break; case2: ret=write(fd,buf_wr,sizeof(buf_wr)); if(ret<0) { printf("Writeerror!\r\n"); } break; case3: ret=read(fd,buf_rd,sizeof(buf_rd)); if(ret>=0) { printf("app:read%dbytes:",ret); for(i=0;i<ret;i++) { printf("0x%02x",buf_rd[i]); } printf("\r\n"); } else { printf("Readerror!\r\n"); } break; case4: close(fd); exit(1); break; default: printf("inputerror!\r\n"); }}}led_drv.c(驱动.c)#include<linux/init.h>#include<linux/module.h>#include<linux/fs.h>#include<linux/major.h>#include<linux/cdev.h>#include<linux/poll.h>#include<linux/ioctl.h>#include<asm/system.h>#include<asm/uaccess.h>#include<mach/hardware.h>#include<mach/at91rm9200.h>#include<mach/gpio.h>MODULE_LICENSE("GPL");MODULE_AUTHOR("Mr.Zeng");MODULE_VERSION("V1.0");MODULE_DESCRIPTION("LedDriverforAT91RM9200");#defineLED_MAJOR 231#defineDEVICE_NAME"led_cugb"#defineLED_ON0#defineLED_OFF1#defineBUF_SIZE64staticunsignedcharg_buf[BUF_SIZE];staticintled_open(structinode*inode,structfile*filp){intminor,i;minor=MINOR(inode->i_rdev); at91_set_gpio_output(AT91_PIN_PC2,1); for(i=0;i<BUF_SIZE;i++) { g_buf[i]=0x00; } printk("%sok\r\n",__FUNCTION__);return0;}staticssize_tled_read(structfile*filp,char__user*pbuf,size_tSize,loff_t*other){ size_tsize_local; size_local=Size; if(Size>BUF_SIZE) size_local=BUF_SIZE; copy_to_user(pbuf,g_buf,size_local); printk("driver:read%dbytes\r\n",size_local); printk("%sok\r\n",__FUNCTION__); returnsize_local;}staticssize_tled_write(structfile*filp,constchar__user*pbuf,size_tSize,loff_t*other){ inti; size_tsize_local; size_local=Size; if(Size>BUF_SIZE) size_local=BUF_SIZE; copy_from_user(g_buf,pbuf,size_local); printk("driver:write%dbyte:",size_local); for(i=0;i<size_local;i++) { printk("0x%02x",g_buf[i]); } printk("\r\n"); printk("%sok\r\n",__FUNCTION__);return0;}staticintled_release(structinode*inode,structfile*filp){ printk("%sok\r\n",__FUNCTION__);return0;}staticlongled_ctl_ioctl(structfile*filp,unsignedintcommand,unsignedlongarg){interr=0;switch(command){caseLED_OFF:err=at91_set_gpio_value(AT91_PIN_PC2,1);break;caseLED_ON:err=at91_set_gpio_value(AT91_PIN_PC2,0);break; } printk("%sok\r\n",__FUNCTION__);returnerr;}staticstructfile_operationsled_ctl_fops={ .owner=THIS_MODULE, .open=led_open, .write =led_write, .read =led_read, .unlocked_ioctl=led_ctl_ioctl,//.ioctl-->.unlocked_ioctl.release=led_release,};staticint__initled_init(void){ intret;ret=register_chrdev(LED_MAJOR,DEVICE_NAME,&led_ctl_fops); if(ret<0) { printk(DEVICE_NAME"registerfailed\r\n"); } else { printk(DEVICE_NAME"registerok\r\n"); } returnret;}staticvoid__exitled_exit(void){ unregister_chrdev(LED_MAJOR,DEVICE_NAME); printk(DEVICE_NAME"unregisterok\r\n");}module_init(led_init);module_exit(led_exit);3.4、实验步骤1、解压linux-2.6.38.tar.bz2到/home/at9200/kernel/linux-2.6.38/的目录下;2、交叉编译生成可执行文件led_app指令:arm-linux-gcc–oled_appled_app.c3、用make指令生成led_drv.ko(文件目录下包含led_drv.c和Makefile)4、用tftp传送led_app,led_drv.ko两个文件到目标板上(1)启动tftp,设置好共享目录,并将led_app,led_drv.ko置于目录下。(2)启动超级终端,建立好连接(3)设置好目标板的Ip地址(4)进入到jffs2的目录下(5)用tftp传送文件(6)加载驱动(7)chmod777led_app(8)设定主设备号(9)运行(10)卸载3.5、实验结果在开发板上会发现在超级终端界面上输入0时红灯亮;输入1时红灯灭。3.6、实验体会通过这次的实验我初步了解到了嵌入式系统中驱动程序的编写,以及如何加载和卸载。也让我认识到了驱动程序与应用程序之间的区别,驱动程序中是不含有main函数的,而应用程序中是含有main函数的,此外我通过这次实验完成了用软件实时操作硬件,引起了我的兴趣和求知欲,我想这会有利于我以后对嵌入式系统的学习。实验四、LCD驱动实验4.1、实验目的1.了解LCD基本概念与原理。2.了解Linux下LCD的Framebuffer结构原理3.了解用总线方式驱动LCD模块。4.熟悉用ARM内置的LCD控制器驱动LCD。4.2、实验设备(环境)及要求硬件:嵌入式开发板、PC机Pentumn500以上,硬盘10G以上。软件:PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境4.3、实验内容与步骤1打开一个命令终端,并切换到内核目录树的最顶层(linux-2.6.9)运行makemenuconfigMakemenuconfig->Graphicssupport,修改为M,即编译成模块,保存退出后,makezImage编译成内核镜像2把/up-techpxa270/exp/kernel/linux-2.6.9/drivers/video目录下的几个关于lcd的文件拷贝到我们自己建立的工作目录下(/up-techpxa270/exp/drivers/lcd)3进入Makefile修改Makefile如下(makefile使用上节课/up-techpxa270/exp/drivers/dm9000里的makefile)保存后make编译生成下述文件4首先,动pxa270开发板,进入minicom按任意键进入blob下载内核镜像并启动可以发现开发板上的lcd无显示挂载后切换到我们的工作目录下逐个加载模块文件可以看到lcd正常显示运行Udevstart命令更新设备节点:显示我们事先准备好的一张图像进行测试显示成功4.3、试验结果4.4、实验总结在设计过程中,通过本次实验,我了解LCD显示器的结构特点,了解S3C2410的LCD驱动模块工作原理,掌握用简单LCD驱动程序设计等,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作。课程设计是我们专业课程知识综合应用的实践训练,从事职业工作前一个必不少的过程.在这次设计过程中,体现出设计ARM驱动程序的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。实验五、DM9000网卡驱动5.1、实验目的1.学习在LINUX下进行网卡驱动设计的原理、理解网卡驱动的体系结构和接口实现过程。2.掌握DM9000网卡驱动的工作原理和流程。5.2、实验设备(环境)及要求硬件:PC机pentumn500以上,硬盘40G以上,内存大于128M。软件:PC机操作系统REDHATLINUX9.0+MINICOM+AMRLINUX开发环境5.3、实验内容与步骤1)进入/up-techpxa270/exp/kernel/linux-2.6.9MakemenuconfigNetworkingsupportEthernet(10or100Mbit)DM9000support选择编译成模块2)makezImage并拷贝到/tftpboot目录下3)在/up-techpxa270/exp/drivers/目录下新建一个目录dm9000,拷贝/up-techpxa270/exp/kernel/linux-2.6.9/drivers/net/目录下的dm9000x.c,dm9000x.h以及/up-techpxa270/exp/drivers/01_moddriver/目录下的Makefile文件。编译dm9000x模块生成.ko文件4)修改Makefile文件编译DM9000相关源文件5)启动目标机,先挂载到宿主机上把dm9000x.ko文件下载到目标机的root目录下重启目标机,进入blob模式下载修改过后的内核镜像并启动6)测试网卡是否工作5.4、试验结果5.5、实验总结在设计过程中,必须小心谨慎,稍有一点错误就会使实验失败,这里包括程序的编写,也包括实际的具体操作步骤。软件的规范开启关闭,实验箱的模块开启先后,各个软件打开的先后顺序等。通过对硬件的设计和软件的编写以及系统的调试,该设计基本上已经达到了设计的预期目的。开发了DM9000驱动程序,并成功应用于基于ARM核的嵌入式系统中,说明该设计可以正常运行在相应的环境之中,为系统提供了便捷的人机接口,提高了仪器的性能。
论大学生写作能力写作能力是对自己所积累的信息进行选择、提取、加工、改造并将之形成为书面文字的能力。积累是写作的基础,积累越厚实,写作就越有基础,文章就能根深叶茂开奇葩。没有积累,胸无点墨,怎么也不会写出作文来的。写作能力是每个大学生必须具备的能力。从目前高校整体情况上看,大学生的写作能力较为欠缺。一、大学生应用文写作能力的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三位数的读写课件
- 内部合作协议书(2篇)
- 2024年05月广东2024届中国民生银行广州分行毕业生“未来银行家”暑期管培生校园招考笔试历年参考题库附带答案详解
- 2024年05月安徽中国工商银行安徽省分行星令营暑期实习项目笔试历年参考题库附带答案详解
- 2025年外研版三年级起点九年级科学下册阶段测试试卷
- 2025年湘教版第二册生物下册阶段测试试卷
- 《电机拖动学》课件
- 2025年冀教新版八年级历史下册月考试卷
- 2024年晋江市光明医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年沪科新版选修4地理下册阶段测试试卷含答案
- 2025年1月广西2025届高三调研考试语文试卷(含答案详解)
- 劳动合同范本(2025年)
- 辽宁2025年高中学业水平合格性考试物理试卷试题(含答案详解)
- 工厂食堂安全卫生管理方案
- 中药硬膏热贴敷治疗
- 2024年人教版三年级上数学教学计划和进度安排
- 《电能计量知识介绍》课件
- 2023-2024学年山东省潍坊市高新区六年级(上)期末数学试卷(含答案)
- 弹性模量自动生成记录
- 2024年教师师德师风工作计划(2篇)
- 物流行业服务质量保障制度
评论
0/150
提交评论