




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二 linux内核的编译与内核模块基础实验:linux内核的编译与内核模块实验目的与意义配置编译linux内核,配置编译hello world内核模块 实验环境Ubuntu 10.04+PC平台;目标机:友善之臂MINI2440实验内容配置编译linux内核,在开发板上运行该内核,基于内核树编译hello world内核模块,并动态加载该模块。实验内容及步骤目标板一般已经烧写缺省的linux系统,本实验需要编译定制的linux内核,并在构建好的内核树基础上编译简单的内核模块编译内核注意:编译内核需要设置交叉编译环境为 4.4.3 版本的编译器解压内核源代码Linux 内核的源代码包位于光盘
2、的 linux 目录,您在该目录下还会看到类似 linux-2.6.32.2-mini2440_20110413.tar.gz 的文件。把内核源代码包复制到某一个目录,进入该目录,运行以下命令:(将该文件放置在D:share文件夹下)rootlocalhost root# cd /mnt/hgfs/share/ rootlocalhost share# tar xvzf linux-2.6.32.2-mini2440-20110413.tar.gz -C /opt/FriendlyARM/mini2440/ 按照缺省配置文件编译内核进入内核源代码目录,然后执行“make menuconfig”
3、 ,rootlocalhost share# cd /opt/FriendlyARM/mini2440/ linux-2.6.32.2/rootlocalhost kernel-2.6.13# make menuconfig出现配置内核界面,选择进入“Load an Alternate Configuration File”配置栏:输入配置文件名如 config_mini2440_x35 并回车,再选择进入Save an Alternate Configuration File,保存文件名为.config,在主菜单里选择退出并保存设置。输入以下命令,开始编译内核: #make zImage编译
4、结束后,会在 arch/arm/boot 目录下生成 linux 内核映象文件:zImage注意:剩下的实验过程需要编译定制的内核才能进行编译定制内核在选定缺省配置文件编译内核的基础上,可以对默认的配置进行修改。对每一个配置选项,用户有三种选择,它们分别代表的含义如下:或*将该功能编译进内核不将该功能编译进内核M将该功能编译成可以在需要时动态插入到内核中的代码例如:取消新内核中的对LED的驱动支持执行“make menuconfig” ,在Device Drivers菜单中,选择进入 Character devices - - -,找到并选中 LEDs 驱动,支持,如图取消掉选项前的*号即可。
5、这里我们选择M:将LED驱动编译成可以在需要时动态插入到内核中的代码例如置Mini2440 LEDs Driver选项前为M此时在内核根目录 kernel-2.6.32.2下输入 make modules 命令将在drivers/char/ 目录下生成可动态加载的内核模块mini2440_leds.ko此时在内核根目录 kernel-2.6.32.2下输入 make zImage,生成新的zImage加载新内核把要下载的zImage拷贝到共享文件夹share下:将在drivers/char/ 目录下生成可动态加载的内核模块mini2440_leds.ko也拷贝到共享文件夹share下:注意将上
6、图的qq2440_leds.ko改为mini2440_leds.ko(或找到linux中找到该文件,将其复制粘贴到windows环境中)(1)连接好串口,打开超级终端,上电启动开发板,进入BIOS 功能菜单:(2)接上 USB 电缆,在windows平台工具dnw下打开dnw.exe程序。(3)将开发板上的S2 接到Nor Flash 标识一侧,启动开发板(4)在BIOS 主菜单中选择功能号k,开始下载 linux 内核zImage(5) 点击“USB Port-Transmit”选项,并选择打开相应的编译好的内核文件 zImage(6)下载完毕,BIOS 会自动烧写内核到Nand Flash
7、 分区中,并返回到主菜单,选择功能号b,引导系统,或者将S2 接到Nand Flash一侧,启动开发板本开发板的启动模式选择,是通过拨动开关 S2 来决定的:根据目标板提示:S2 接到Nor Flash 标识一侧时,系统将从Nor Flash 启动;新内核取消掉LED驱动支持后,开发板上的LED指示灯将不再闪烁。启动时的命令行提示#open device leds: No such file or directory这是因为应用程序不知道该设备已经不再支持,在超级终端中输入:vi /etc/init.d/rcS将文件/etc/init.d/rcS中的“/etc/rc.d/init.d/leds
8、 start”前加“#”注释掉(请备份,实验结束后恢复该文件)接下来的实验需要将文件/etc/init.d/rcS中的“/etc/rc.d/init.d/leds start”注释掉构造并运行简单的内核模块本节演示了如何将qq2440_leds模块编译并装载到内核中。mini2440_leds.c文件#define DEVICE_NAME ledsstatic unsigned long led_table = S3C2410_GPB(5),S3C2410_GPB(6),S3C2410_GPB(7),S3C2410_GPB(8),;static unsigned int led_cfg_tab
9、le = S3C2410_GPIO_OUTPUT,S3C2410_GPIO_OUTPUT,S3C2410_GPIO_OUTPUT,S3C2410_GPIO_OUTPUT,; module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE(GPL);MODULE_AUTHOR(FriendlyARM Inc.);下面我们来演示如何加载led灯模块。为了将文件/kernel-2.6.32.2/drivers/char下的.o文件转化成.ko可执行模块,须在终端/opt/FriendlyARM/mini2440/kernel-2.6.32.2下,
10、输入下述命令:显示下图结果:再将生成的qq2440_leds.ko模块拷贝到共享文件夹下:rootlocalhost kernel-2.6.13# cp drivers/char/ mini2440_leds.ko /mnt/hgfs/share/然后在超级终端输入rz命令,发送share文件夹下的mini2440_leds.ko模块到开发板。超级终端输入:Insmod mini2440_leds.ko之后,就可以控制小灯了 接下来我们对开发板led灯进行测试:(指令led X Y可以控制小灯的明灭,X表示小灯的次序;Y取值为0时,小灯熄灭,取1时,小灯亮起)首先在超级终端界面输入命令led
11、0 0, led 1 0, led 2 0, led 3 0, 使小灯按由内而外的顺序依次熄灭。再输入led 3 1,led 2 1,led 1 1,led 0 1,使小灯按由外而内的顺序依次亮起。最后使第一,三个小灯亮起,举手等待老师检查。选作实验:编写内核模块的makefile并实现内核对驱动的支持实验目的与意义配置编译linux内核,配置编译hello world内核模块 实验环境Ubuntu 10.04.4+PC平台;目标机:友善之臂MINI2440实验内容配置编译linux内核,在开发板上运行该内核,基于内核树编译hello world内核模块,并动态加载该模块。实验内容及步骤目标板
12、一般已经烧写缺省的linux系统,本实验需要编译定制的linux内核,并在构建好的内核树基础上编译简单的内核模块编译内核注意:编译内核需要设置交叉编译环境为 4.4.3 版本的编译器解压内核源代码Linux 内核的源代码包位于光盘的 linux 目录,您在该目录下还会看到类似 linux-2.6.32.2-mini2440_20110413.tar.gz 的文件。 把内核源代码包复制到某一个目录,进入该目录,运行以下命令:t #tar xvzf linux-2.6.32.2-mini2440-20110413.tar.gz C /opt/FriendlyARM/mini2440按照缺省配置文件
13、编译内核进入内核源代码目录,然后执行“make menuconfig” ,出现配置内核界面,选择“Load an Alternate Configuration File”配置栏:在主菜单里选择退出并保存设置。输入以下命令,开始编译内核: #make zImage编译结束后,会在 arch/arm/boot 目录下生成 linux 内核映象文件:zImage注意:剩下的实验过程需要编译定制的内核才能进行编译定制内核在选定缺省配置文件编译内核的基础上,可以对默认的配置进行修改。对每一个配置选项,用户有三种选择,它们分别代表的含义如下:或*将该功能编译进内核不将该功能编译进内核M将该功能编译成可以
14、在需要时动态插入到内核中的代码例如:取消新内核中的对LED的驱动支持在Device Drivers菜单中,选择进入 Character devices - - -,找到并选中 LEDs 驱动,支持,如图取消掉选项前的*号即可。这里我们选择M:将LED驱动编译成可以在需要时动态插入到内核中的代码例如置MINI2440 LEDs Driver选项前为M此时在内核根目录 kernel-2.6.32.2下输入 make modules 命令将在drivers/char/ 目录下生成可动态加载的内核模块mini2440_ mini2440_leds.ko加载新内核(1)连接好串口,打开超级终端,上电启动
15、开发板,进入BIOS 功能菜单:(2)接上 USB 电缆,在windows平台工具dnw下打开dnw.exe程序。(3)将开发板上的S2 接到Nor Flash 标识一侧,启动开发板(4)在BIOS 主菜单中选择功能号k,开始下载 linux 内核zImage(5) 点击“USB Port-Transmit”选项,并选择打开相应的编译好的内核文件 zImage(6)下载完毕,BIOS 会自动烧写内核到Nand Flash 分区中,并返回到主菜单,选择功能号b,引导系统,或者将S2 接到Nand Flash一侧,启动开发板本开发板的启动模式选择,是通过拨动开关 S2 来决定的:根据目标板提示:S
16、2 接到Nor Flash 标识一侧时,系统将从Nor Flash 启动;新内核取消掉LED驱动支持后,开发板上的LED指示灯将不再闪烁。启动时的命令行提示#open device leds: No such file or directory这是因为应用程序不知道该设备已经不再支持,在超级终端中输入:vi /etc/init.d/rcS将文件/etc/init.d/rcS中的“/etc/rc.d/init.d/leds start”前加“#”注释掉(请备份,实验结束后恢复该文件)接下来的实验需要将文件/etc/init.d/rcS中的“/etc/rc.d/init.d/leds start”
17、注释掉构造并运行简单的内核模块本节演示了如何将mini2440_leds模块编译并装载到内核中。mini2440_leds.c文件#define DEVICE_NAME ledsstatic unsigned long led_table = S3C2410_GPB(5),S3C2410_GPB(6),S3C2410_GPB(7),S3C2410_GPB(8),;static unsigned int led_cfg_table = S3C2410_GPIO_OUTPUT,S3C2410_GPIO_OUTPUT,S3C2410_GPIO_OUTPUT,S3C2410_GPIO_OUTPUT,;
18、 module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE(GPL);MODULE_AUTHOR(FriendlyARM Inc.);下面我们来演示如何加载led灯模块。为了将文件/kernel-2.6.32.2/drivers/char下的.o文件转化成.ko可执行模块,须在终端/opt/FriendlyARM/mini2440/kernel-2.6.32.2下,输入下述命令:make modules显示下图结果: 再将生成的mini2440_leds.ko模块拷贝到共享文件夹下:cp /kernel-2.6.32.2/mini24
19、40_leds.ko C /mnt/hgfs/share然后在超级终端输入rz命令,发送mini2440_leds.ko模块到开发板。 接下来我们对开发板led灯进行测试:(指令led X Y可以控制小灯的明灭,X表示小灯的次序;Y取值为0时,小灯熄灭,取1时,小灯亮起)首先在超级终端界面输入命令led 0 0, led 1 0, led 2 0, led 3 0, 使小灯按由内而外的顺序依次熄灭。再输入led 3 1,led 2 1,led 1 1,led 0 1,使小灯按由外而内的顺序依次亮起。最后使第一,三个小灯亮起,举手等待老师检查。选作实验:编写内核模块的makefile并实现内核对
20、驱动的支持实验目的与意义学习针对内核模块的makefile的编写实验环境Ubuntu 10.04.4+PC平台;目标机:友善之臂MINI2440实验内容编写新加驱动程序的makefile文件,并编写Kconfig文件。把Led Module 加入内核代码树,并编译。实验内容及步骤编译并测试LED驱动程序编译LED驱动一个大型的驱动程序的源文件和头文件往往放在内核树驱动目录中的一个子目录中,本实验尝试将LED驱动程序的源文件放入一个目录中进行编译。打开/kernel-2.6.32.2/drivers/char目录下的Kconfig文件编辑配置文件Kconfig,加入驱动选项使之在 make me
21、nuconfig的时候出现Mini2440内核中该目录下的Kconfig文件中已经添加了LED驱动的配置选项,这里不再直接选中该选项进行配置,而是将LED驱动的选项放入一个目录下,所以将这里的配置注释掉,并在下方添加语句source drivers/char/test/Kconfig:在kernel-2.6.32.2/drivers/char/目录下建立test目录,并在其中建立Kconfig文件,编辑“Kconfig文件并在其中添加以下命令(可以把刚才注释的语句复制过来):当配置好后运行make menuconfig,进入字符驱动配置目录,会发现配置好的目录:输入回车进入目录,可见到配置好的
22、目录选项到这里,虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini2440_leds.c编译进去的,还需要在 Makefile中把内核配置选项和真正的源代码联系起来。将kernel-2.6.32.2/drivers/char/mini2440_leds.c复制入test目录中。打开kernel-2.6.32.2/drivers/char/Makefile文件,在语句obj-$(CONFIG_MINI2440_LEDS) += mini2440_leds.o前加#注释掉该语句。在该文件中添加obj-$(CONFIG_MINI2440_ADC) += test/语句。在test目录下创建空文档Makefile,编辑Makefile,在Makefile中添加语句obj-$(CONFIG_MY_LEDS) += mini2440_leds.o,保存退出。按照第1节中编译定制的内核的步骤将LED驱动程序编译为可动态加载的模块。运行make modules后在/drivers/char/test中可找到编译好的驱动模块mini2440_leds.ko测试LED驱动驱动程序是操作系统中的特定模块,作为中间层负责计算机硬件和用户程序之间的交互。所以有了LED的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论