内核配置:
sudo apt-get install libncurses5-dev进入内核源码包解压的目录执行:
make menuconfig
进入Device Drivers
进入Network device support
进入Ethernet (10 or 100Mbit)
选择<M> DM9000 support
保存退出
执行make clean,make(编译需要10-20分钟)
内核镜像文件 arch/arm/boot/zImage is ready
Nand方式启动开发板
sudo minicom
cat /proc/iomem(物理地址)
cat /proc/kallsyms(查看内核符号表)
**************************************************************************************
模块编译make:
例如hello.c#include <linux/kernel.h> /* printk */
#include <linux/module.h> /* module_init module_exit */
MODULE_LICENSE("GPL"); //GPL代表GNU的通用许可证G:GNU general; P:Public; L:License
MODULE_AUTHOR("AKAE");
MODULE_DESCRIPTION("our first module example");
//模块的初始化函数(入口函数)
int __init akae_init(void) //__init 表示函数在内核编译一次就释放 .init.text
{
printk("hello world\n");
return 0;
}
//模块的清理函数(退出函数)
void __exit akae_exit(void) //.exit.text
{
printk("module exit!\n");
}
//宏
module_init(akae_init);
module_exit(akae_exit);
**************************************************************************************
Makefile:
obj-m := hello.o
KDIR := /home/akaedu/nfs/arm/driver/linux-2.6.35.7
all:
make -C $(KDIR) SUBDIRS=$(PWD)
.PHONY:clean
clean:
-rm -f *.ko *.o *~
***************************************************************************************
链接模块的过程:
例如:sudo minicom,回车
rx hello.ko
Ctrl A,z,s,xmodem
进入到文件所在的目录
insmod hello.ko //插入模块hello.ko
lsmod
modinfo hello.ko //查看模块信息
rmmod hello //移除模块hello;移除模块时只能跟模块名
lsmod
多个文件生成一个模块
******************************************************Makefile如下:
obj-m := myhello.o
myhello-objs := hello.o foo.o
KDIR := /home/akaedu/nfs/arm/driver/linux-2.6.35.7
all:
make -C $(KDIR) SUBDIRS=$(PWD)
.PHONY:clean
clean:
-rm -f *.ko *.o *~
******************************************************
多个文件生成多个模块:
需要在函数内声明EXPORT_SYMBOL(函数名);插入模块时,先插入提供符号表的模块,再插入使用符号表的模块;
移除模块时,先移除使用符号表的模块,再移除提供符号表的模块;
******************************************************
Makefile如下:
obj-m := hello.o foo.o
KDIR := /home/akaedu/nfs/arm/driver/linux-2.6.35.7
all:
make -C $(KDIR) SUBDIRS=$(PWD)
.PHONY:clean
clean:
-rm -f *.ko *.o *~
******************************************************
------------------------------------------------------
modprobe适用于具有依赖关系的多个模块
uname -rcd /lib/modules/2.6.35.7-FriendlyARM
先把模块拷贝到查找目录
cd kernel
mkdir tmp
把要插入的模块拷贝到该目录下
depmod
modprobe +模块名 //自动解析有依赖关系的模块
modprobe -r +模块名 //移除模块
//将变量类型声明为模块类型(好处:不需要多次编译,只需在模块加载时对变量初始化)
例如:
int a=10;
char *str="hello";
module_param(a, int, 0); //module_param(变量名,变量类型,变量文件权限)
module_param(str, charp, 0600);
在开发板上执行insmod hello.ko a=30 str="world"
cd /sys/module/hello
cd parameters
ls -l
cat str
------------------------------------------------------
打开Makefile搜ARCH(指定内核的结构:CPU)
vi Makefile /ARCH
vi .config /CONFIG_CROSS
cp arch/arm/configs/s5pv210_defconfig ../../../.config
或
make s5pv210_defconfig(内核自动完成)
make allnoconfig(最小化配置,保证最小化内核)
ubuntu下安装虚拟机
www.linuxidc.com/Linux/2010-09/28435.htm