编译Linux内核时向内核2.6.30添加新驱动方法
设备驱动加到Linux内核中
7.2.3 设备驱动加到Linux内核中设备驱动程序编写完后将该驱动程序加到内核中。
这需要修改Linux 的源代码,然后重新编译内核。
①将设备驱动程序文件(比如mydriver.c)复制到/Linux/drivers/char目录下。
该目录保存了Linux下字符设备的设备驱动程序。
修改该目录下mem.c 文件,在int chr_dev_init()函数中增加如下代码:#ifdef CONFIG_MYDRIVERdevice_init();#endif其中CONFIG_MYDRIVER是在配置Linux内核时赋值。
②在/linux/drivers/char目录下Makefile中增加如下代码:ifeq ($(CONFIG_MYDRIVER),y)L_OBJ + = mydriver.oendif如果在配置Linux内核时选择了支持新定义的设备,则在编译内核时会编译mydriver.c生成mydriver.o文件。
③修改/linux/drivers/char目录下config.in文件,在comment Character devices语句下面加上bool suppot for mydriver CONFIG_MYDRIVER这样,若编译内核,运行make config,make menuconfig或make xconfig,那么在配置字符设备时就会有选项:Support for mydriver当选中这个设备时,设备驱动就加到了内核中了。
重新编译内核,在shell中将当前目录cd 到Linux目录下,然后执行以下代码:# make menuconfig# make dep# make在配置选项时要注意选择支持用户添加的设备。
这样得到的内核就包含用户的设备驱动程序。
Linux通过设备文件来提供应用程序和设备驱动的接口,应用程序通过标准的文件操作函数来打开、关闭、读取和控制设备。
查看Linux文件系统下的/proc/devices,可以看到当前的设备信息。
如何在嵌入式LINUX中增加自己的设备驱动
如何在嵌入式LINUX中增加自己的设备驱动程序北京邮电大学电子工程学院强磊--------------------------------------------------------------------------------驱动程序的使用可以按照两种方式编译,一种是静态编译进内核,另一种是编译成模块以供动态加载。
由于uClinux不支持模块动态加载,而且嵌入式LINUX不能够象桌面LINUX那样灵活的使用insmod/rmmod加载卸载设备驱动程序,因而这里只介绍将设备驱动程序静态编译进uClinux内核的方法。
下面以UCLINUX为例,介绍在一个以模块方式出现的驱动程序test.c基础之上,将其编译进内核的一系列步骤:(1)改动test.c源带代码第一步,将原来的:#include <linux/module.h>#include <linux/version.h>char kernel_version[]=UTS_RELEASE;改动为:#ifdef MODULE#include <linux/module.h>#include <linux/version.h>char kernel_version[]=UTS_RELEASE;#else#define MOD_INC_USE_COUNT#define MOD_DEC_USE_COUNT#endif第二步,新建函数int init_test(void)将设备注册写在此处:result=register_chrdev(254,"test",&test_fops);(2)将test.c复制到/uclinux/linux/drivers/char目录下,并且在/uclinux/linux/drivers/char目录下mem.c中,int chr_dev_init( )函数中增加如下代码:#ifdef CONFIG_TESTDRIVEinit_test();#endif(3)在/uclinux/linux/drivers/char目录下Makefile中增加如下代码:ifeq($(CONFIG_TESTDRIVE),y)L_OBJS+=test.oEndif(4)在/uclinux/linux/arch/m68knommu目录下config.in中字符设备段里增加如下代码:bool 'support for testdrive' CONFIG_TESTDRIVE y(5)运行make menuconfig(在menuconfig的字符设备选项里你可以看见我们刚刚添加的'support for testdrive'选项,并且已经被选中);make dep;make linux;make linux.text;make linux.data;cat linux.text linux.data > linux.bin。
5(g)内核操作Linux2.6内核驱动移植参考
内核操作Linux2.6内核驱动移植参考随着Linux2.6的发布,由于2.6内核做了教的改动,各个设备的驱动程序在不同程度上要进行改写。
为了方便各位Linux爱好者我把自己整理的这分文档share出来。
该文当列举了2.6内核同以前版本的绝大多数变化,可惜的是由于时间和精力有限没有详细列出各个函数的用法。
特别声明:该文档中的内容来自,该网也上也有各个函数的较为详细的说明可供各位参考。
1、使用新的入口必须包含<linux/init.h>module_init(your_init_func);module_exit(your_exit_func);老版本:int init_module(void);void cleanup_module(voi);2.4中两种都可以用,对如后面的入口函数不必要显示包含任何头文件。
2、GPLMODULE_LICENSE("Dual BSD/GPL");老版本:MODULE_LICENSE("GPL");3、模块参数必须显式包含<linux/moduleparam.h>module_param(name, type, perm);module_param_named(name, value, type, perm);参数定义module_param_string(name, string, len, perm);module_param_array(name, type, num, perm);老版本:MODULE_PARM(variable,type);MODULE_PARM_DESC(variable,type);4、模块别名MODULE_ALIAS("alias-name");这是新增的,在老版本中需在/etc/modules.conf配置,现在在代码中就可以实现。
5、模块计数int try_module_get(&module);module_put();老版本:MOD_INC_USE_COUNT 和MOD_DEC_USE_COUNT6、符号导出只有显示的导出符号才能被其他模块使用,默认不导出所有的符号,不必使用EXPORT_NO_SYMBOLS老板本:默认导出所有的符号,除非使用EXPORT_NO_SYMBOLS7、内核版本检查需要在多个文件中包含<linux/module.h>时,不必定义__NO_VERSION__老版本:在多个文件中包含<linux/module.h>时,除在主文件外的其他文件中必须定义__NO_VERSION__,防止版本重复定义。
编译Linux2.6内核并添加一个系统调用
1. 0 让新 内核和 旧内核 都可 以加载 的配置 的步骤 :
my. r h i 8 / o t z ma e/ o t / c /3 6 b o / l g b o a b mv. y t m. p/ o t / s e ma b o S
mv/ o t zma e/o t mln z 261 ..5 3 b / l g b b / i u - ..510 0 v
2 1 年第 4期 0 1
福
建 电
脑
19 4
编 译 iu26内 并 添 加 一 个 系统调 用 Ln x . 核
张 伟 华 .王 海 英 。高 静
(河南 财经政 法 大学成 功 学院 河 南 郑 州 4 10 5 2 0)
【 摘 要 】 本 文 以实例 来详 细描 述 了从 准备 一直 到使 用新 内核 的 Lnx 。 : iu 26内核 编译过 程 , 然后介 绍 了
轻 易地 对它进 行修 改 .使 我们 能够 根据 自己的要 求 度 身 定制 一个更 高效 、 更稳 定 的 内核 。
系统调 用【 用户 进程 与 系统之 间 的接 口, 们在 2 ] 是 它 内核 中实 现 .其 主要 目的是 使得 用户 可 以使 用操 作 系 统提 供 的操作底 层设 备 的功 能 用 户 程序 肯定 要 操作
mv/ o t y tm. p/ o ' y t m. p 2 6 1 .. 5 b / se ma b oJ s e ma - .. 5 10 03 S , S mk n td/ o g n td 2.. 5 10 0 . 6.5 1 ii b r i i - 6 1 . . 5 3 i 2. 1 r mg v / o t rbgu e n ib / u / r b.o f g
将驱动程序添加到Linux内核
一,概述在Linux内核中增加程序需要完成以下三项工作:1.将编写的源代码复制到Linux内核源代码的相应目录2.在目录的Kconfig文件中增加新源代码对应项目的编译配置选项3.在目录的Makefile文件中增加对新源代码的编译条目二,实例1,把驱动代码usbtmc(文件夹)复制到/usr/src/linux-headers-2.6.32-31-generic/drivers/char下。
注意:(1),设备驱动程序存放在内核源码树根目录drivers/的子目录下,在其内部,设备驱动文件进一步按照类别,类型等有序地组织起来。
a,字符设备存在于drivers/char/目录下b,块设备存放在drivers/block/目录下c,USB设备则存放在drivers/usb/目录下。
(2),此处的文件组织规则并非绝对不变,例如:USB设备也属于字符设备,也可以存放在drivers/usb/目录下。
(3),例如我们把驱动程序usbtmc(文件夹)存放在drivers/char/目录下,那么你要注意,在该目录下同时会存在大量的C源代码文件和许多其他目录。
所有对于仅仅只有一两个源文件的设备驱动程序,可以直接存放在该目录下,但如果驱动程序包含许多源文件和其他辅助文件,那么可以创建一个新子目录。
2,修改char目录下的Kconfig和Makefile(1),修改Kconfig,添加一句:source “drivers/char/usbtmc/Kconfig”它表示将usbtmc目录下的Kconfig挂载到char目录下的Kconfig里面(为了使本层的Kconfig文件能起作用,我们需要修改父目录的Kconfig文件,加入source语句)a,对驱动程序而言,Kconfig通常和源代码处于同一目录。
b,如果你建立了一个新子目录,而且也希望Kconfig文件存在于该目录中的话,那么就必须在一个已存在的Kconfig文件中将它引入,需要用上面的语句将其挂接在drivers/char 目录中的Kconfig中。
内核驱动环境搭建方案
内核驱动环境搭建方案兄弟,下面就是一个内核驱动环境搭建的超简单方案啦。
一、准备工作。
1. 硬件基础。
2. 操作系统选择。
3. 软件工具安装。
在Linux下,比如说Ubuntu,你得先把编译工具链装上。
这个就像厨师的锅碗瓢盆一样重要。
对于C语言编写的内核驱动,那GCC编译器是必须的。
你可以在终端里敲上“sudo apt get install gcc”,就这么简单,等它安装完就行。
还有,内核头文件也不能少。
在Ubuntu下,可以通过“sudo apt get install linux headers $(uname r)”来安装。
这个内核头文件就像是地图,告诉编译器内核里面的各种结构和函数是咋回事儿。
如果是在Windows下呢,你需要安装Visual Studio。
这是个大工程,安装的时候要有耐心。
而且,你得选择安装Windows驱动开发工具包(WDK),它就像是专门为Windows内核驱动开发打造的魔法盒,里面有各种工具和库。
二、创建开发环境。
1. Linux下的环境创建。
咱们可以创建一个专门的工作目录,就像你在地上画个圈,说这是我搞内核驱动开发的地盘。
在终端里敲“mkdir kernel driver dev”,然后“cd kernel driver dev”就进入这个目录了。
然后呢,你可以用文本编辑器来写你的内核驱动代码。
Vim或者Emacs都是大神们爱用的,不过如果你觉得它们有点难搞,像gedit这种简单的图形化文本编辑器也能胜任。
2. Windows下的环境创建。
在Visual Studio安装好并且WDK也安装好之后,打开Visual Studio。
就像打开一个装满宝藏的宝箱一样。
你可以创建一个新的项目,在项目模板里选择“Windows Driver”相关的模板。
然后呢,按照向导一步一步来,设置好项目的名称、保存路径之类的东西。
三、测试环境搭建。
1. Linux下的测试。
当你写好内核驱动代码之后,你需要把它编译成内核模块。
实验五 linux-2.6.35内核添加网卡驱动
实验五linux-2.6.35内核移植—网卡驱动的添加【实验目的】本实验通过在上个实验结果的linux2.6.35内核上移植CS89900A网卡驱动,使其可以通过网络nfs的方式挂载在ubantu主机环境上的文件系统,从而实现linux系统的完全启动。
【实验环境】1、Ubuntu 10.10发行版2、u-boot-2010.033、FS2410平台4、交叉编译器arm-none-linux-gnueabi-gcc-4.3.2【实验步骤】linux-2.6.35内核中有cs8900的驱动,但是这个驱动需要我们修改,这也是第一种支持我们的网卡的方法。
另外我们可以移植一个可以使用的cs8900网卡驱动到我们的内核中,这里我们使用第二种方法。
实验步骤中前3步已经做过的,就不要再重复了。
1、解压内核$ tar xvf linux.2.6.35.tar.bz22、修改顶层Makefile修改linux-2.6.35 目录下的Makefile,找到ARCH ?= $(SUBARCH)CROSS_COMPILE ?=改为ARCH ?= armCROSS_COMPILE ?= arm-none-linux-gnueabi-3、拷贝配置文件$ cd linux-2.6.35$ cp arch/arm/configs/s3c2410_defconfig .config4、将cs8900.c和cs8900.h两个文件拷贝到linux-2.6.35/drivers/net/arm/下5、修改Kconfig添加cs8900内核配置项修改linux-2.6.35/drivers/net/arm/Kconfig添加如下内容:config S3C2410_CS8900tristate “CS8900 support”depends on NET_ETHERNET && ARM && ARCH_SMDK2410---help---support for cs8900 chipset base Ethernet cards, if you have a network card of this type.6、修改Makefile添加内核编译配置修改linux-2.6.35/drivers/net/arm/Makefile添加如下内容:obj-$(CONFIG_S3C2410_CS8900) += cs8900.o7、添加地址映射定义修改arch/arm/mach-s3c2410/include/mach/map. h文件,找到文件末尾#define S3C_PA_NAND S3C24XX_PA_NAND在这行之后添加如下内容:/* CS8900a */#define pSMDK2410_ETH_IO __phys_to_pfn(0x19000000)#define vSMDK2410_ETH_IO 0xE0000000#define SMDK2410_ETH_IRQ IRQ_EINT98、添加平台代码修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,找到下面的结构:static struct map_desc smdk2410_iodesc[] __initdata = {/* nothing here yet */};修改为:static struct map_desc smdk2410_iodesc[] __initdata = {/* nothing here yet */{vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE}};9、配置内核,使之支持cs8900网卡$ make menuconfigKernel Features ---> //使用EABI工具链这两项是必须选择的[*] Use the ARM EABI to compile the kernel[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW) Device Drivers --->[*] Network device support --->[*] Ethernet (10 or 100Mbit) ---><*> CS8900a support10、重新编译内核$ make zImage11、拷贝zImage到tftpboot目录下并重新启动开发板$ cp arch/arm/boot/zImage /tftpboot。
linux 驱动移植流程
linux 驱动移植流程【中英文实用版】Title: Linux Driver Porting Process标题:Linux驱动移植流程1.Introduction1.简介The Linux kernel is an open-source operating system that is widely used in various devices such as servers, embedded systems, and desktop computers.To develop a Linux driver, it is essential to understand the process of driver porting, which involves modifying the existing driver code to make it compatible with a different kernel version or hardware platform.Linux内核是一个开源的操作系统,广泛应用于服务器、嵌入式系统和桌面计算机等各种设备中。
为了开发Linux驱动程序,了解驱动移植过程至关重要,该过程涉及修改现有驱动代码,使其与不同内核版本或硬件平台兼容。
2.Preparing the Development Environment2.准备开发环境Before starting the driver porting process, ensure that you have a suitable development environment.This includes setting up the Linux kernel source, compiling the kernel, and installing the required tools and libraries.Once the environment is ready, you can proceed with the driver porting process.在开始驱动移植过程之前,请确保您有一个合适的开发环境。
9linux-2.6.35内核移植—SD卡驱动的添加
linux-2.6.35内核移植—SD卡驱动的添加分类:嵌入式2011-11-15 19:17 284人阅读评论(0) 收藏举报【实验目的】SD卡是嵌入式系统中最常用到的外部存储单元,现在的手机,相机等等消费电子及其它设备都在使用SD卡来弥补系统本身存储较小的缺点.这里我们在我们的系统中也添加SD卡的功能.【实验环境】1、Ubuntu 10.10发行版2、u-boot-2010.033、FS2410平台4、交叉编译器arm-none-linux-gnueabi-gcc-4.3.2【实验步骤】1、配置内核Device Drivers ---><*> MMC/SD/SDIO card support ---><*> MMC block device Drivers<*> Samsung S3C SD/MMC Card Interface support2、修改平台代码修改arch/arm/mach-s3c2410/mach-smdk2410.c 添加如下内容:static struct platform_device *smdk2410_devices[] __initdata = {&s3c_device_ohci,&s3c_device_lcd,&s3c_device_wdt,&s3c_device_i2c0,&s3c_device_iis,&s3c_device_sdi, //添加内容&s3c_device_adc,&s3c_device_ts,};3、添加SD卡热插拔功能按照上面两个步骤就能够是我们的SD卡正常工作了,只是不能实现热插拔的功能,必须在系统启动的时候就把卡插上,这样才能是SD卡正常的工作,否则就无法识别SD卡.查看FS2410原理图,发现SD卡的nCS_SD脚接在GPG10上,这个管脚用来监测SD卡插拔,于是我们添加如下代码修改arch/arm/mach-s3c2410/mach-smdk2410.c 添加如下内容:#include <mach/gpio.h>#include <linux/mmc/host.h>#include <plat/mci.h>/*SDI Support*/static struct s3c24xx_mci_pdata smdk2410_mmc_cfg __initdata = { .gpio_detect = S3C2410_GPG(10),.set_power = NULL,.ocr_avail = MMC_VDD_32_33,};在smdk2410_init中添加s3c24xx_mci_set_platdata(&smdk2410_mmc_cfg);4、重新编译内核$ make zImage5、拷贝内核到tftpboot目录下$ cp arch/arm/boot/zImage /tftpboot6、启动系统后插上SD卡s3c-sdi s3c2410-sdi: running at 0kHz (requested: 0kHz).s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).s3c-sdi s3c2410-sdi: running at 12675kHz (requested: 25000kHz). s3c-sdi s3c2410-sdi: running at 12675kHz (requested: 25000kHz). mmc0: new SDHC card at address aaaammcblk0: mmc0:aaaa SD04G 3.69 GiBmmcblk0: p1这说明我们有一个4G的SD卡被发现了,它有一个分区7、创建设备节点# mknod mmcblk0p1 b 179 18、挂载SD卡# mount -t vfat /dev/mmcblkp1 /mnt9、查看SD卡内容# ls /mnt分享到:∙上一篇:linux-2.6.35内核移植—USB驱动的添加∙下一篇:linux-2.6.35内核移植—yaffs2文件系统的支持。
Linux下安装显卡驱动的方法步骤
Linux下安装显卡驱动的方法步骤
Linux下安装显卡驱动
第一步:下载一个for Linux版的显卡驱动,我下的NVIDIA-Linux-x86-173.08-pkg1.run我的内核是2.6.18-53.el5
第二步:如果查出你的内核中存在xen字样,说时你正处在虚拟机平台。
在虚拟机平台不能安装显卡驱动,也不是说一定不能,但是显卡驱动对虚拟机的支持不好,反正我是一次也没安起过。
要退出虚拟机平台就要重起电脑后选择没有xen的内核版本进入,如果没有我也没有办法了,你Googel一下,我是重装一下系统时不选虚拟机就是了。
第三步:如上第二步进入系统后按Ctrl+Alt+BackSpace进入字符界面用root登陆,如果还是图形界面,就进入图形界面后在shell 下输入命令init 3进入字符界面。
第四步:在字符界面进入显卡驱动的目录后用./NVIDIA-Linux-x86-173.08-pkg1.run开始安装弹出第一个画面选择Accept允许安装,再弹出第二个画面选择否不通过网络更新后就开始安装了,最后选择启用驱动自带的配置软件。
第五步:输入命令init 5进入图形界面,如果图形界面报错就rboot系统。
好了你的显卡驱动就安装好了,是不是发觉机子跑的快多了,看着也舒服了。
LINUX-2[1].6.32内核移植学习笔记
Linux-2.6.30内核的移植及调试运行【开发的软件、硬件交代】内核:linux-2.6.32.tar.gz 下载网址:/pub/linux/kernel/v2.6/补丁:2.6.32-at91.patch.gz 下载地址:.za/at91_26.html开发硬件平台:AT91RM9200 同为嵌入式开发板【内核移植过程】step1:下载内核极其补丁;我的内核及补丁压缩包是放在了LINUX操作系统主文件夹flymz/myprog/core文件下;(郑重声明:下载的内核必须要和补丁是配套的)step2:解压内核,打补丁;在DZ中输入:tar -zxvf myprog/core/linux-2.6.32.tar.gz进行内核解压然后进入内核:cd linux-2.6.32接着,打补丁:zcat ../myprog/core/2.6.32-at91rm.patch.gz | patch -p1(附:若linux系统没有安装patch命令时,这里就会提示出错。
所以要先安装个patch命令包,在ZD:sudo apt-get install patch 安装好了就不会报错了)step3:内核配置;(1)修改makefile文件将linux-2.6.32文件夹下的makefile修改如下:183:ARCH ?= $(SUBARCH)184:CROSS_COMPILE ?=修改为183:ARCH ?= arm184:CROSS_COMPILE ?= /usr/local/arm/gcc-3.4.5/bin/arm-linux- 因为我采用的编译器为gcc-3.4.5,并且放在了文件系统/usr/local/arm/gcc-3.4.5/bin(2)在ZD(以下都是在linux-2.6.32路径):make clean(3)然后:make at91rm9200dk_defconfig 进行默认配置(附:若出现一些报错(这里错误就不列举出来了),可能是有些命令包有没有预先装好:在ZD中(主文件夹路径)sudo apt-get install libncurse5 -dev 及sudo apt-get install ncurses-devel)问题1:(本人)xyz@ubuntu:~/Desktop/linux-2.6.32$ make menuconfig*** Unable to find the ncurses libraries or the*** required header files.*** 'make menuconfig' requires the ncurses libraries.****** Install ncurses (ncurses-devel) and try again.***make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1make: *** [menuconfig] Error 2解决方法如下:sudo apt-get install libncurses5-dev如何解决Install ncurses(ncurses-devel) and try again2010年11月20日星期六 17:32因为工作需要,打算着手编译嵌入式Linux内核。
内核-添加驱动部分笔记
内核---添加驱动怎样修改kconfig第一步:在对应的设备驱动目录下将kconfig打开,然后修改:/999/linux-2.6.32.2/drivers/char中的kconfig打开:修改后然后保存。
在linux目录下终端中输入make menuconfig如下所示:范例1说明:config LEDS_MINI2440tristate "LED Support for Mini2440 GPIO LEDs" //tristate表示有三种选择*或m或不选//如果tristate换成bool,表示只有两种选择,选中*和不选中depends on MACH_MINI2440//依赖于MACH_MINI2440宏,如果定义了改MACH_MINI2440宏,那么上面一行菜单才会出现。
default y if MACH_MINI2440 //即如果选中了MACH_MINI2440才能编译进内核helpThis option enables support for LEDs connected to GPIO lineson Mini2440 boards.一般可以不用配置依赖的宏:即如下:config LEDS_MINI2440tristate "LED Support for Mini2440 GPIO LEDs" //tristate表示有三种选择default y // 如果是y就默认编译进内核,如果为m默认选项选择编译进模块。
如是n//表示默认不选。
Help //帮助信息This option enables support for LEDs connected to GPIO lineson Mini2440 boards.第二步:在linux根目录下输入make menuconfig即可看到。
第三步:修改makefile(在驱动对应的目下的makefile)说明obj-$(CONFIG_LEDS_MINI2440) += mini2440_leds.o根据CONFIG_LEDS_MINI2440来决定后面mini2440_leds.o代码的编译方式(有的编译成模块有的编译进内核或者不编译)第四步:写mini2440_leds.c对应的驱动程序第五步:如果编译进内核就在make menuconfig中对应选项选择为*,如果编译为模块就选为m。
如何把驱动代码加入到Linux Kernel
如何把驱动代码加入到Linux Kernel,你需要知道怎么修改这两个文件Kconfig*Makefile1. Kconfig文件的作用”内核源码树的目录下都有两个文件Kconfig(2.4版本是Config.in)和Makefile。
分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig 分别描述了所属目录源文件相关的内核配置菜单。
在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文件中。
在内核编译时,主Makefile调用这个.config,就知道了用户的选择。
*上面的内容说明了,Kconfig就是对应着内核的配置菜单。
如果要想添加新的驱动到内核的源码中,可以修改Kconfig,这样就可以选择这个驱动,如果想使这个驱动被编译,要修改Makefileso添加新的驱动时需要修改的文件有两种(注意不只是两个)*Kconfig*Makefile要想知道怎么修改这两种文件,就要知道两种文件的语法结构2. Kconfig”每个菜单都有一个关键字标识,最常见的就是config语法:configsymbol是一个新的标记的菜单项,options是在这个新的菜单项下的属性和选项其中options部分有:1) 类型定义:每个config菜单项都要有类型定义,bool布尔类型、tristate三态:内建、模块、移除string字符串、hex十六进制、integer整型例如config HELLO_MODULEbool "hello test module"bool类型的只能选中或不选中,tristate类型的菜单项多了编译成内核模块的选项,如果选择编译成内核模块,则会在.config中生成一个CONFIG_HELLO_MODULE=m的配置,如果选择内建,就会直接编译成内,则在.config中生成一个CONFIG_HELLO_MODULE=y的配置.2) 依赖型定义depends on或requires指此菜单的出现与否依赖于另一个定义config HELLO_MODULEbool "hello test module"depends on ARCH_PXA这个例子表明HELLO_MODULE这个菜单项只对XScale处理器有效。
linux2.6.30.2内核移植
宁波普天通信技术有限公司Linux2.6.30.4移植硬件部2009/12/9文档的摘要为对文档内容的简短总结。
目录目录 (2)一、简介 (3)二、内核基本配置 (4)2.1 获取资源 (4)2.2 解压缩源码 (4)2.3 在内核中添加对ARM的支持 (4)2.4 修改平台时钟频率 (4)2.5 制作内核的配置单 (5)三、Nand Flahs移植 (7)3.1 修改源码 (7)3.2 添加对应的驱动配置 (8)四、完善串口驱动 (9)4.1 修改源码 (9)4.2 添加对应的驱动配置 (9)五、增加内核对yaffs和cramfs的支持 (10)5.1 在内核中添加对yaffs的支持 (10)5.2 在配置单中添加对yaffs和cramfs的支持 (10)六、编译Busybox (12)6.1 修改并配置Busybox (12)6.2 编译并安装Busybox (13)七、构建文件系统 (14)7.1 构建框架 (14)7.2 添加内容 (15)7.3 利用mkcramfs制作文件系统镜像 (20)八、网卡驱动移植 (22)8.1 修改修和源码 (22)8.2 配置内核 (24)一、简介本文主要介绍针对S3C2440微处理器的linux内核和文件系统的移植,linux内核版本为2.6.30.4,文件系统采用cramfs+yaffs。
交叉编译环境为Cross4.3.3-EABI。
二、内核基本配置2.1 获取资源移植工作首先要先准备好如下工具:linux2.6.30.4的源码一份,Cross4.3.3-EABI编译器,busybox(制作根文件系统),mkcramfs(制作cramfs文件系统镜像)。
以上工具均会随文档附上。
2.2 解压缩源码将linux-2.6.30.4_20090826.tar.bz2和EABI_4.3.3_EmbedSky_20090812.tar.bz2文件放置到虚拟机的根目录下。
7linux-2.6.35内核移植—LCD驱动的添加
linux-2.6.35内核移植—LCD驱动的添加分类:嵌入式2011-11-15 19:16 398人阅读评论(0) 收藏举报【实验目的】在嵌入式系统中经常使用LCD进行交互,这里我们通过修改平台代码使我们的内核支持LCD,完成相应功能!【实验环境】1、Ubuntu 10.10发行版2、u-boot-2010.033、FS2410平台4、交叉编译器arm-none-linux-gnueabi-gcc-4.3.2【实验步骤】s3c2410 LCD的驱动内核中已经存在,我们需要完成的工作就只使这个驱动能够正常的工作,这需要我们修改平台代码1、头文件的添加在arch/arm/mach-s3c2410/mach-smdk2410.c中添加头文件#include <mach/fb.h>#include <mach/regs-lcd.h>2、添加相应LCD相关平台信息在arch/arm/mach-s3c2410/mach-smdk2410.c中添加如下内容:static struct s3c2410fb_display s3c2410_lcd_cfg[] __initdata = { {.lcdcon5 = S3C2410_LCDCON5_FRM565 | S3C2410_LCDCON5_INVVCLK |S3C2410_LCDCON5_INVVLINE |S3C2410_LCDCON5_INVVFRAME |S3C2410_LCDCON5_PWREN |S3C2410_LCDCON5_HWSWP,.type = S3C2410_LCDCON1_TFT,.width = 320,.height = 240,.pixclock = 100000, /* HCLK/10 */.xres = 320,.yres = 240,.bpp = 16,.left_margin = 13,.right_margin = 8,.hsync_len = 4,.upper_margin = 2,.lower_margin = 7,.vsync_len = 4,},};static struct s3c2410fb_mach_info s3c2410_fb_info __initdata = { .displays = s3c2410_lcd_cfg,.num_displays = ARRAY_SIZE(s3c2410_lcd_cfg),.default_display = 0,.lpcsel = ((0xCE6) & ~7) | 1<<4,};在函数smdk2410_init中添加如下内容s3c24xx_fb_set_platdata(&s3c2410_fb_info);3、配置内核Device Drivers --->Graphics support ---><*> Support for frame buffer devices ---><*> S3C2410 LCD framebuffer support [*] Bootup logo --->这些选项在这个内核多数已经选上了,这里列出来让大家知道添加LCD驱动涉及到的内容!4、编译内核$ make zImage5、拷贝内核镜像到tftpboot下$ cp arch/arm/boot/zImge /tftpboot6、插上LCD启动系统启动系统后发现LCD上有一个可爱的企鹅LOGO,这就是我们Linux 的吉祥物分享到:∙上一篇:linux-2.6.35内核移植—Nand flash驱动的添加(分区)∙下一篇:linux-2.6.35内核移植—USB驱动的添加。
编译Linux2_6内核并添加一个系统调用
2011年第4期福建电脑编译Linux2.6内核并添加一个系统调用张伟华,王海英,高静(河南财经政法大学成功学院河南郑州451200)【摘要】:本文以实例来详细描述了从准备一直到使用新内核的Linux2.6内核编译过程,然后介绍了添加系统调用的实现步骤,最后给实验结果。
【关键词】:Linux,内核,编译内核,系统调用引言Linux[1]作为一个自由软件,在广大爱好者的支持下,内核版本不断更新也不断增大,通过编译内核可以轻易地对它进行修改,使我们能够根据自己的要求度身定制一个更高效、更稳定的内核。
系统调用[2]是用户进程与系统之间的接口,它们在内核中实现,其主要目的是使得用户可以使用操作系统提供的操作底层设备的功能。
用户程序肯定要操作系统设备,没有系统调用,程序员就需要了解硬件细节才能写出强大程序,这显然不利于将精力集中在解决问题上。
学习操作系统设计技术的有效方法就是读懂并修改Linux的源代码,编译内核和添加系统调用就是比较基础的内容,本文就以这两部分来展开:一是编译内核,二是添加系统调用。
一、编译内核1.到ftp:///pub/linux/kernel/v2.6/中找到相关版本的压缩包linux-2.6.15.1.tar.bz2或linux-2.6.15.1.tar.gz2.首先cp命令或mv命令将压缩包放到/usr/src/ redhat/SOURCES/下,解压缩包:tar-jxvf linux-2.6.15.1.tar.bz2(对应于.bz2文件)或tar-xzvf linux-2.6.15.1. tar.gz(对应于.tar.gz(.tgz)文件)3.在/usr/src/redhat/SOURCES/下得到解压后的文件linux-2.6.15.1,并设置路径:cd/usr/src/redhat/ SOURCES/linux-2.6.15.1,一定要保证路径正确,make 的有关命令一般在此目录下。
编译Linux内核时向内核2.6.30添加新驱动方法
编译时向内核添加新设备模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时,还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载,就会很不方便。
本小节将介绍如何在内核编译时就把驱动加入内核。
当把设备驱动源程序编写好以后,需要把它编译进内核。
当用户需要打开设备时,还需要一个在/dev 目录的设备文件名称,这样驱动程序才能工作起来。
下面分步骤来介绍如何把驱动程序编译进内核及创建设备文件名称。
请读者参考《Linux应用与开发典型实例精讲》(邱铁,于玉龙,徐子川编著,清华大学出版社)第12章的介绍。
1、首先在linux-2.6.30/drivers/ 目录下建立一个名称为“drivertest”的新目录,并设计驱动源程序driver_kernel.c,为了方便,我们采用与上一节相同的源程序。
2、在新建的linux-2.6.30/drivers/ drivertest目录下建立一个新的配置文件Kconfig 和工程管理Makefile文件。
工程管理Makefile文件根据CONFIG_DRIVER_VMALLOC宏来决定是否编译源文件,并输出目标模块文件。
脚本内容如下:## Makefile for the Driver-myalloc.#obj-$(CONFIG_DRIVER_VMALLOC) +=driver_kernel.o在Kconfig文件中,主要为内核配置时提供选择开关,并定义DRIVER_VMALLOC宏,作为是否包含myalloc 驱动的选项。
myalloc 的配置文件Kconfig内容如下:## DRIVER test subsystem configuration#menu "DRIVER KMALLOC support"DRIVER_VMALLOCconfigtristate "Driver_test is supported"---help---Driver_test use vmalloc .endmenu3、把myalloc设备驱动程序源文件driver_kernel.c放到新建的linux-2.6.30/drivers/ drivertest 目录下。
为Android内核添加新驱动,并添加到menuconfig菜单
为Android内核添加新驱动,并提供menuconfig选项为Android的Linux内核2.6.25添加驱动。
1. 在drives目录下添加hello目录,内含hello.c Kconfig Makefilehello.c内容:#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){printk(KERN_ALERT"Hello, world\n");return 0;}static void hello_exit(void){printk(KERN_ALERT"Goodbye, cruel world\n");}module_init(hello_init);module_exit(hello_exit);Kconfig内容:config HELLOtristate "Hello Driver added by Dong"default nhelptest for adding driver to menuconfig.MakeFile内容:obj-$(CONFIG_HELLO) += hello.o2. 上面的Kconfig文件再加上下面的两个配置,可使hello项出现在配置菜单中。
在arch/arm/Kconfig menu "Device Drivers" endmenu之间添加source "drivers/hello/Kconfig"在drivers/Kconfig menu "Device Drivers" endmenu之间添加source "drivers/hello/Kconfig"(不知为什么arch/arm/Kconfig中竟然含有Drivers里Kconfig内容的一个复本,实验证明只对drivers/Kconfig中修改内容无效。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译时向内核添加新设备
模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时,还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载,就会很不方便。
本小节将介绍如何在内核编译时就把驱动加入内核。
当把设备驱动源程序编写好以后,需要把它编译进内核。
当用户需要打开设备时,还需要一个在/dev 目录的设备文件名称,这样驱动程序才能工作起来。
下面分步骤来介绍如何把驱动程序编译进内核及创建设备文件名称。
请读者参考《Linux应用与开发典型实例精讲》(邱铁,于玉龙,徐子川编著,清华大学出版社)第12章的介绍。
1、首先在linux-2.6.30/drivers/ 目录下建立一个名称为“drivertest”的新目录,并设计驱动源程序driver_kernel.c,为了方便,我们采用与上一节相同的源程序。
2、在新建的linux-2.6.30/drivers/ drivertest目录下建立一个新的配置文件Kconfig 和工程管理Makefile文件。
工程管理Makefile文件根据CONFIG_DRIVER_VMALLOC宏来决定是否编译源文件,并输出目标模块文件。
脚本内容如下:
#
# Makefile for the Driver-myalloc.
#
obj-$(CONFIG_DRIVER_VMALLOC) +=
driver_kernel.o
在Kconfig文件中,主要为内核配置时提供选择开关,并定义DRIVER_VMALLOC宏,作为是否包含myalloc 驱动的选项。
myalloc 的配置文件Kconfig内容如下:
#
# DRIVER test subsystem configuration
#
menu "DRIVER KMALLOC support"
DRIVER_VMALLOC
config
tristate "Driver_test is supported"
---help---
Driver_test use vmalloc .
endmenu
3、把myalloc设备驱动程序源文件driver_kernel.c放到新建的linux-2.6.30/drivers/ drivertest 目录下。
使上一步建立的Kconfig 文件、Makefile 文件和源文件同在一目录下,如图18.5所示。
图18.5 drivertest 目录
4、修改drivers/Kconfig文件,如图18.6所示,增加一行把myalloc配置作为驱动的一个选项,所添加的内容如下:
source "drivers/drivertest/Kconfig
图18.6 配置drivers/Kconfig
5、修改kernel/drivers/Makefile 文件,在文件的最后,添加如下脚本:
drivertest/
obj-$(CONFIG_DRIVER_VMALLOC) +=
这样使在编译Linux 内核驱动时,能把drivertest/目录包含进去。
在这里使用了宏定义为
CONFIG_DRIVER_VMALLOC判断是否包含。
如图18.7所示
图18.7 配置drivers/Makefile
6、完成以上修改后,make menuconfig重新配置内核,其中包括加载我们编写的新设备myalloc,具本设置方支是:并从“D evice drivers --->DRIVER KMALLOC support”选择添加myalloc设备,其中Device drivers目录如图18.8所示。
图18.8 Device drivers目录
从D evice drivers目录,选择DRIVER KMALLOC support-Æ,展开后如图18.9所示。
按
空格键,使<*>出现,表示选择该驱动。
图18.9 DRIVER KMALLOC support目录
完成设置后,重新编译内核,生成映象文件bzImage,按照第12章所介绍的安装并引导系统。
7、检测myalloc驱动程序的安装
系统重启动后,进入kernel 2.6.30启动选项。
Linux 系统正确运行后,通过以下命令查看myalloc驱动程序安装结果:
ls /dev
如图18.10所示,如果在例表中找到“myalloc”则表示设备已添加进内核中。
图18.10 /dev目录下设备文件列表
8、测试myalloc驱动程序的正确性。
采用上一节介绍的测试程序,进行测试,如图18.11所示,表明驱动的读写都是正确的。
图18.11 测试myalloc驱动的正确性
本文节选自:
邱铁,于玉龙,徐子川.Linux应用与开发典型实例精讲.清华大学出版社.2010年5月出版。