嵌入式驱动开发环境搭建

最近的驱动搭建出现了N多奇葩的问题,不过也是自己基础薄弱哈,在此记录分享下。

1.开发平台:

虚拟机:VMware-9.0.2 build-1031769

gcc:gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)

arm-linux-gcc:gcc-3.4.5-glibc-2.3.6

ubuntu系统版本:ubuntu-lucid-10.04

ubuntu自带内核版本:2.6.32.21(该版本和2.6.32-21-generic版本是不一样的哟)

在开始搭建前,尽量使用如下命令查看版本,其中需要关注的是ubuntu的内核版本,gcc版本。

a.查看ubuntu内核版本:uname -r        (一定要使用uname -r 显示的内核版本下载编译

b.查看gcc版本:gcc -v

如果没有安装gcc请输入:apt-get install gcc

c.查看交叉编译器:arm-linux-gcc -v

如果没有安装需下载,然后解压到/usr/local/arm/文件夹内,并在/etc/bash.bashrc文件末尾添加如下内容:

fi
if [ -d /usr/local/arm ]; then
PATH=$PATH:/usr/local/arm/gcc-3.4.5-glibc-2.3.6/bin
fi

如果安装成功,执行arm-linux-gcc -v会提示你安装的版本,否则请检查出错信息。

另外还需要安装build-essential:apt-get install build-essential

如果提示没有安装包请更新下载源,该源列表在/etc/apt/sources.list文件中,可到官方下载源选择。里面有详细的修改方法,一定要将文档看完,文档下面还有针对不同版本的修改,选择较近区域的源可大大提高下载速度。

除此之外,设置共享文件夹也可大大方便您的操作。

在虚拟机选项:VM/Settings../Options/Shared Folders/Folder Sharing中选择always enable,然后add你想要共享的文件即可,该共享文件夹可在虚拟机/mnt/hgfs/mnt中看到。

2.内核树构建

平台搭建完成后需要下载相应版本的内核。

在官网下载内核:https://www.kernel.org/pub/linux/kernel/v2.6/

我选择的版本是linux-2.6.32.21.tar.bz2。

将该文件复制到/usr/src目录并解压。

cp /mnt/hgf/mnt/linux-2.6.32.21.tar.bz2 /usr/src/

cd /usr/src/

tar jxvf linux-2.6.32.21.tar.bz

a.配置内核,执行:menu oldconfig

测试交叉编译器:make prepare  (可不执行)

使能新的交叉编译器:make scripts   (可不执行)

b.配置完成后编译:make     (此过程较长大概一个小时)

c.制作映像文件:make bzImage    (执行完会在目录下生成vmlinux文件)

d.编译模块:make modules

e.将模块嵌进内核:make modules_install      (执行完会在/lib/moduls/2.6.32.21/目录下生成以内核版本命名的文件夹)

3.内核树测试

到此为止内核树就构建完成了。下面我们测试内核。建立lddr目录新建如下文件:

编写hello.c

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
	printk(KERN_ALERT "cs say hello world.");
	return 0;
}
static void hello_exit(void)
{
	printk(KERN_ALERT "cs say goodbye.");
}

module_init(hello_init);
module_exit(hello_exit);
编写Makefile
obj-m:=hello.o
KERNELDIR=/lib/modules/2.6.32.21/build
PWD:=$(shell pwd)

modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
执行编译:make
make -C /lib/modules/2.6.32.21/build M=/home/cs/lddr/hello modules
make[1]: Entering directory `/usr/src/linux-2.6.32.21'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-2.6.32.21'

若无问题将在该目录下生成hello.ko文件

加载模块:insmod hello.ko

查看结果:dmesg

运行lsmod查看当前加载的模块,可在列表中看到加载的模块:


卸载模块:rmmod hello.ko

查看结果:dmsg

环境搭建过程中的问题:

1.Invalid module format

这极有可能是版本不一致造成的。执行dmesg查看相关信息即可。

2更换linux内核,如果编译的linux内核和系统内核不一致则进行如下操作:

在上述的操作中执行完#make modules_install后进入如下目录(需根据你的实际编译路径选择,如果不知道在哪可查找find / -name "bzImage"):

cd /usr/src/linux-2.6.32.21/arch/i386/boot

a、生成可执行的内核引导文件

#make bzImage

#cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.32.21

b、将System.map复制到/boot下:

#cp System.map /boot/System.map-2.6.32.21

c、生成initrd.img文件

#cd /lib/modules/2.6.32.21

#update-initramfs –c –k 2.6.32.21

d、自动查找新内核,并添加至grub引导

#update-grub

e、修改/boot/grub/grub.cfg文件,将几个timeout的值设为10

这样grub在引导的时候就会出现10秒的停留,如果有按键输入,则可以对内核镜像进行选择。

重启后执行uname -r可查看系统内核信息看是否更改。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值