linux嵌入式开发

mini2440开发板学习笔记

我的环境:
主机:ubuntu 64位
开发板:mini2440

买来的新的开发板一般来说,uboot、内核和文件系统都配置好了。
mini2440开发板的内核是2.6.32.2版本的。
学习步骤:
一、直接将uboot、内核和文件系统全部擦除,在裸机上编写学习,然后学习uboot的烧写、内核的移植等。(个人不建议这种方法,对一个新手来说,uboot,内核等太过复杂)
二、在配置好的开发板上进行,linux驱动的学习。不过有一个问题是要先进行2.6.32.2版本的内核树的配置(在编译驱动程序时使用).
2.1、内核树的构建
(1)在友善之臂官网下载源码
linux-2.6.32.2-mini2440-2-110413.tar.gz
(2)在/opt/FriendlyARM/目录下创mini2440文件夹
$ sudo mkdir/opt/FridendlyARM/mini2440 并进入该目录
$ cd /opt/FridendlyARM/mini2440
(3)将下载的源码移动到mini2440文件夹,并解压
tar -zxvf linux-2.6.32.2-mini2440-2-110413.tar.gz
(4)配置编译文件
进入目录
$ cd /opt/FriendlyARM/mini2440/linux-2.6.29
$ cp config_mini2440_t35 .config
(5)配置内核
$sudo apt-get install libncurses5-dev
$ make menuconfig
出现配置的界面不用修改直接点击Load an Alternate Configuration File
然后确认、退出

(6)Makefile文件修改

在/opt/FriendlyARM/mini2440/linux-2.6.29下运行
$ sudo vi./Makefile
搜索arm-linux得到一个结果

CROSS_COMPILE?= arm-linux-

然后搜索CROSS_COMPILE,找到

AS= $(CROSS_COMPILE)as
LD= $(CROSS_COMPILE)ld
CC= $(CROSS_COMPILE)gcc
CPP= $(CC) -EAR= $(CROSS_COMPILE)ar
NM= $(CROSS_COMPILE)nm
STRIP= $(CROSS_COMPILE)strip
OBJCOPY= $(CROSS_COMPILE)objcopy
OBJDUMP= $(CROSS_COMPILE)objdump

这里定义了交叉编译文件的位置本例中作如下修改
(其中/usr/local/arm/4.4.3/bin/arm是安装的arm-linux-gcc所在的位置

#AS= $(CROSS_COMPILE)as
AS = /usr/local/arm/4.4.3/bin/arm-linux-as
#LD= $(CROSS_COMPILE)ld
LD = /usr/local/arm/4.4.3/bin/arm-linux-ld
#CC= $(CROSS_COMPILE)gcc
CC = /usr/local/arm/4.4.3/bin/arm-linux-gcc
CPP= $(CC) -E
#AR= $(CROSS_COMPILE)ar
AR = /usr/local/arm/4.4.3/bin/arm-linux-ar
#NM= $(CROSS_COMPILE)nm
NM = /usr/local/arm/4.4.3/bin/arm-linux-nm
#STRIP= $(CROSS_COMPILE)strip
STRIP = /usr/local/arm/4.4.3/bin/arm-linux-strip
#OBJCOPY= $(CROSS_COMPILE)objcopy
OBJCOPY = /usr/local/arm/4.4.3/bin/arm-linux-objcopy
OBJDUMP= $(CROSS_COMPILE)objdump
#OBJDUMP = /usr/local/arm/4.4.3/bin/arm-linux-objdump

到这里准备工作完成
(7)编译
$ sudo make prepare
$ sudo make scripts
$ sudo make

sudo make一般会出现一两个常见的错误
,直接百度搜索修改就行了
到这里内核源码树配置完成。

2.2 代码编写。
这里我们先写个简单的

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

//模块许可证
MODULE_LICENSE("Dual BSD/GPL");

//模块加载函数
static int hello_init(void)
{	
	printk("<1>Hello World enter!\n");
	return 0;
}
//模块卸载函数
static void hello_exit(void)
{
	printk("<1>Hello World exit!\n");
}

//模块的注册
module_init(hello_init);
module_exit(hello_exit);

2.3 模块的编译

obj-m:=hello.o
CURRENT_PATH:=$(shell pwd)
ARM_LINUX_KERNEL:=/opt/FriendlyARM/mini240/linux-2.6.32.2
all:
	$(MAKE) -C $(ARM_LINUX_KERNEL) SUBDIRS=$(CURRENT_PATH) modules
clean:
	rm -rf *.cmd *.o *.ko *.mod.c *.symvers *.order

编译后会有hello.ko文件
将hello.ko文件传输到开发板上
安装驱动模块

insmod hello.ko

卸载驱动模块

rmmod hello

查看已经安装的驱动模块

lsmod
发布了2 篇原创文章 · 获赞 0 · 访问量 4

猜你喜欢

转载自blog.csdn.net/weixin_43510118/article/details/105430726