内核配置及编译

内核配置:

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 -r
cd /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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值