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