实验四 IO接口LED灯驱动的静态编译 刘绍康 310127 电子信息工程1201.docx
《实验四 IO接口LED灯驱动的静态编译 刘绍康 310127 电子信息工程1201.docx》由会员分享,可在线阅读,更多相关《实验四 IO接口LED灯驱动的静态编译 刘绍康 310127 电子信息工程1201.docx(10页珍藏版)》请在冰豆网上搜索。
实验四IO接口LED灯驱动的静态编译刘绍康310127电子信息工程1201
实验四I/O接口---LED灯驱动的静态编译
刘绍康
3120210127
电子信息工程1201
一、实验目的
通过实验学习如何将一个驱动添加到Kconfig,编译到内核;
通过实验掌握在Linux下驱动程序的编写方法。
通过实验掌握在Linux下如何将驱动静态编译进内核的方法
二、实验环境
硬件:
TQ2440开发板、PC机;
软件:
WindowsXP、CentOS、Linux2.6.30.4内核、EABI4.3.3工具、LED源代码
三、完成实验时间:
90分钟
四、实验原理:
驱动程序加载进内核的方法有两种:
静态编译进内核、动态加载进内核;
所谓静态编译进内核:
驱动的静态加载指的是直接把驱动程序编译进内核,在系统启动后可直接调用,不需要任何加载卸载命令。
静态编译的主要步骤:
●编写驱动程序源代码
●修改内核目录下的configure文件---添加某驱动选项
●修改内核目录下的makefile文件---添加编译该驱动设备的目标文件
●进行内核配置---加入该设备模块的支持
●编译内核
●下载内核到开发板
●编译测试程序
●准备好开发板
●下载测试程序到开发板
●运行测试程序
五、实验步骤
(一)代码准备
1.实验所需要的源代码的路径:
●内核源代码:
linux2.6.30.4.tar.gz在/mnt/hgfs/D/TQ2440/Linux源码/linux2.6.30.4/linux2.6.30.4.tar.gz
●LED灯驱动源代码:
EmbedSky_gpio.c在内核目录解压后(即linux2.6.30.4/drivers/char下)
●LED灯测试程序源代码:
测试程序leds_test.c在/mnt/hgfs/D/app/leds/(如未发现请另向教师咨询)
(二)静态编译
2.修改$linux-2.6.30.4/drivers/char目录下的Kconfig文件,在图中黑底位置加入如下内容修改并保存;
这样当makemenuconfig时,将会出现EmbedSkySKY2440/TQ2440BoardGPIOTest
(ControlLED)选项;
3.修改$linux-2.6.30.4/drivers/char目录下的Makefile文档,在文件的适当位置按照如下内容修改并保存:
4.终端命令行输入以下命令配置裁剪内核:
[fjut@fjut-virtual-machine~]#su
Password:
[root@fjut-virtual-machine~]#cd/opt/EmbedSky/linux2.6.30.4(前提是你已经将linux2.6.30.4.tar.gz解压到/目录下了)
[root@fjut-virtual-machinelinux2.6.30.4]#makemenuconfig(进行内核剪裁)
稍后将弹出以下菜单:
选择LoadanAlternateConfigurationFile,将弹出配置文件选择对话框,在文本框中输入配置文件config_EmbedSky_A70_256MB,如下图,选择“OK”按回车键完成配置文件的选择:
5.完成配置文件的选择后,菜单将进入到初始界面,接下来将根据下面的步骤来完成对LED驱动的支持,通过计算机键盘上下键选择DeviceDrivers并按回车,将出现以下菜单:
6.按上下键选择Characterdevices并按回车,将出现以下菜单:
7.按上下键选择EmbedSkySKY2440/TQ2440BoardGPIOTest(ControlLED)并按y键,前面的<>内将有*号,表明选中Led驱动,如下图:
按左右键选择Exit回到上一级菜单,依次,当最后一次选择Exit时,会弹出以下对话框提示是否保存配置:
8..执行以下命令编译内核
[root@fjut-virtual-machinelinux2.6.30.4]#makezImage
编译完成之后将在路径$linux-2.6.30.4/arch/arm/boot下生成zImage镜象,请按照实验三所述的方法将镜像文件烧写到开发板上。
到此,驱动GPIO模块已经静态编译进内核,开发板上电后所运行的内核就支持LED模块。
(三)测试阶段
1.将驱动测试程序的源代码编译成执行文件
[root@fjut-virtual-machinelinux2.6.30.4]#cp/mnt/hgfs/D/app/leds/home/fjut将共享目录下的源代码复制到用户主目录下
[root@fjut-virtual-machinelinux2.6.30.4]#cd/home/fjut/app/leds进入到测试程序源代码目录中
[root@fjut-virtual-machine/home/fjut/app/leds]#make编译生成执行文件leds_test
2.将该执行文件传送到开发板上:
利用minicom或者超级终端即可
3.杀死开发板自动运行的LED流水灯进程
在开发板终端[root@Embed/]#ps查找当前正在运行的流水灯led_player的进程号
如486rootled_player
[root@Embed/]#kill-9486杀死486号进程,关闭LED流水灯
4.运行执行文件
[root@Embed/]#./leds_test11点亮第1盏灯
1、修改$linux-2.6.30.4/drivers/char目录下的Kconfig文件,并保存
2.makemenuconfig
3.选择LoadanAlternateConfigurationFile,将弹出配置文件选择对话框,在文本框中输入配置文件config_Embe4.通过计算机键盘上下键选择DeviceDrivers并按回车,将出现以下菜单
5.按上下键选择Characterdevices并按回车,将出现以下菜单:
6、按上下键选择EmbedSkySKY2440/TQ2440BoardGPIOTest(ControlLED)并按y键,前面的<>内将有*号,表明选中Led驱动
7编译内核(zImage)
9.编译测试程序,发到开发板上
10.将驱动文件名改为一致:
11.用DNW把内核烧到开发板上
12.测试程序使12灯亮其他灯灭