linux系统下如何编译环境,Linux系统Ubuntu下的驱动开发编译环境搭建方法与步骤...

或者

$ sudo  cp  ../linux-headers-2.6.32-21-generic/.config ./.config

如果当前运行内核打开了CONFIG_IKCONFIG_PROC参数,则可以

$zcat /proc/config.gz > .config

$make oldconfig

编译内核

2.6版本后前两步不需要,直接make即可

$make prepare

$make scripts

$make

3)安装模块

$make modules这一步不需要

$make module_install

执行结束之后,会在/lib/modules下生成新的目录/lib/modules/2.6.32.44+drm33.19

四、生成镜像文件

1)生成内核镜像文件

$make bzImage

执行完成后将在arch/i386/boot/目录下生成bzImage镜像文件,使用下面命令安装到系统的/boot目录下:

$sudo make install

sh /usr/src/linux-source-2.6.32/arch/x86/boot/install.sh 2.6.32.44+drm33.19 arch/x86/boot/bzImage System.map "/boot"

命令完成后在/boot目录下,将多了vmlinuz-2.6.32.44+drm33.19和System.map-2.6.32.44+drm33.19两个文件

或者直接拷贝

$sudo cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.32.44+drm33.19

2)生成要载入ramdisk的映像文件

如果linux系统安装在scsi磁盘上,这步是必须的,否则可以跳过。我的linux是装在vmware上的,用的是虚拟的scsi磁盘,所以必须要这一步。输入命令:

$mkinitramfs -o /boot/initrd.img-linux2.6.32.44+drm33.19 2.6.32.44+drm33.19

第二个参数是版本号,必须和/lib/modules/目录下新内核对应的模块的文件夹名字一致,即2.6.32.44+drm33.19 。

五、使用新编译的内核

Ubuntu采用Grub引导,要使用新内核,必须配置grub。

1) 更改grub配置,显示启动菜单

$su – root

$gedit /etc/default/grub &

注释GRUB_HIDDEN_TIMEOUT=0语句,及改成#GRUB_HIDDEN_TIMEOUT=0后保存

2)更新启动配置文件

$update-grub

执行命令后,该命令自动搜索/boot文件夹,将相应的镜像加入/boot/grub/grub.cfg启动菜单,并根据/etc/default/grub内容更新配置文件。更新后,将增加如下内容:

menuentry 'Ubuntu, with Linux 2.6.32.44+drm33.19' –class ubuntu –class gnu-linux –class gnu –class os {

recordfail

insmod ext2

set root='(hd0,5)'

search –no-floppy –fs-uuid –set 4aaa411a-c1ab-4c9e-94bf-770717be6d9a

linux   /vmlinuz-2.6.32.44+drm33.19 root=/dev/sda8 ro   quiet splash

}

menuentry 'Ubuntu, with Linux 2.6.32.44+drm33.19 (recovery mode)' –class ubuntu –class gnu-linux –class gnu –class os {

recordfail

insmod ext2

set root='(hd0,5)'

search –no-floppy –fs-uuid –set 4aaa411a-c1ab-4c9e-94bf-770717be6d9a

echo    'Loading Linux 2.6.32.44+drm33.19 …'

linux   /vmlinuz-2.6.32.44+drm33.19 root=/dev/sda8 ro single

echo    'Loading initial ramdisk …'

}

手工更改配置文件

因为是SCSI,须手工加入启动时需要的ramdisk的映像文件, initrd开头部分:

menuentry 'Ubuntu, with Linux 2.6.32.44+drm33.19' –class ubuntu –class gnu-linux –class gnu –class os {

recordfail

insmod ext2

set root='(hd0,5)'

search –no-floppy –fs-uuid –set 4aaa411a-c1ab-4c9e-94bf-770717be6d9a

linux   /vmlinuz-2.6.32.44+drm33.19 root=/dev/sda8 ro   quiet splash

initrd /initrd.img-linux2.6.32.44+drm33.19

}

menuentry 'Ubuntu, with Linux 2.6.32.44+drm33.19 (recovery mode)' –class ubuntu –class gnu-linux –class gnu –class os {

recordfail

insmod ext2

set root='(hd0,5)'

search –no-floppy –fs-uuid –set 4aaa411a-c1ab-4c9e-94bf-770717be6d9a

echo    'Loading Linux 2.6.32.44+drm33.19 …'

linux   /vmlinuz-2.6.32.44+drm33.19 root=/dev/sda8 ro single

echo    'Loading initial ramdisk …'

initrd /initrd.img-linux2.6.32.44+drm33.19

}

修改完成并保存后,重新启动系统,应该出现让你选择内核的菜单。

六、准备Helloworld源代码和Makefile文件

$mkdir hello

$cd hello

$gedit Helloworld.c Makefile &

Helloworld.c内容:

#include

#include

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)

{

printk(KERN_ALERT "Hello, worldn");

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT "Goodbye, cruel worldn");

}

module_init(hello_init);

module_exit(hello_exit);

Makefile内容:

#Makefile 2.6

ifneq ($(KERNELRELEASE),)

#kbuild syntax dependency relationship of files and target modules are listed here.

mymodule-objs:=helloworld.o

obj-m:=helloworld.o

else

PWD:=$(shell pwd)

#为正在运行的内核编译模块,使用下列配置

KVER:=$(shell uname -r)

#KDIR:=/lib/modules/$(KVER)/build

#或使用/usr/src/linux-headers-2.6.32-21-generic目录

#不是为正在运行的内核编译模块,使用下列配置

#KDIR:=/usr/src/linux-2.6.32.21/

KDIR:=/usr/src/linux-source-2.6.32/

all:

$(MAKE) -C $(KDIR) M=$(PWD)

clean:

@rm -rf .*.com *.o *.mod.c *.ko .tmp_versions modules.order Module.symvers

endif

保存文件后,编译通过。如果出现

#make

Makefile:10: ***遗漏分隔符 (您的意思是用 TAB 代替 8 个空格?)。停止。

#make

make:没有什么可以做的为 all'。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值