深圳嵌入式培训
达内深圳龙华中心

139-2227-5185

热门课程

嵌入式驱动开发环境搭建_深圳达内嵌入式培训

  • 时间:2017-07-13
  • 发布:深圳达内
  • 来源:达内新闻

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

1.内核树构建

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

我选择的版本是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/目录下生成以内核版本命名的文件夹)2.内核树测试

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

编写hello.c

#include

#include

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 modulesmake[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

卸载模块: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/boota、生成可执行的内核引导文件

#make bzImage

#cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.32.21b、将System.map复制到/boot下:

#cp System.map /boot/System.map-2.6.32.21c、生成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可查看系统内核信息看是否更改。

3.开发平台:

虚拟机: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 gccc.查看交叉编译器: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/binfi

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

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

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

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


希望以上内容对你有所帮助!达内教育19大课程,囊括行业热门技术,更新速度快,更贴近企业需求。先就业后付款,工作后再分期支付学费,还等什么呢?达内助你登上人生的转折点,一次改变命运的机会!(更多内容请点击:深圳嵌入式培训官网,或者关注达内微信公众平台:tarenasz)



上一篇:裸板调试_深圳达内嵌入式培训
下一篇:性嵌入式系统的开发_深圳达内嵌入式培训

深圳嵌入式培训班:怎么学习嵌入式开发?

深圳嵌入式培训机构:嵌入式系统基础知识汇总

深圳嵌入式培训机构:最好的入门版本是什么?

深圳嵌入式培训:如何挑选嵌入式培训机构?

选择城市和中心
贵州省

广西省

海南省