大纲:
1.交叉编译环境搭建
2.内核模块的编写
3.将开发板连接上PC串口测试,加载模块
4.内核模块参数
5.总结
一.编译环境的搭建
交叉编译软件地址:
http://cloud.189.cn/t/VBvYbqMnueei
1.把交叉编译安装包通过ssh服务上传到linux的/opt目录下
2.解压到当前目录
tar -xvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
解压后得到
5.测试环境变量来检查交叉编译工具是否安装成功
http://www.cnblogs.com/jycboy/p/4926538.html
这里我只是安装了
sudo apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386
问题就解决好啦
首先要下载相应的内核,在内核基础里面我已经介绍过啦,这里就不赘述啦
这里我的内核源码路径是
#include<linux/init.h>#include<linux/module.h>static int hello_init(voID){ printk(KERN_WARNING"Hello World!n"); return 0; }static int hello_exit(voID){ printk(KERN_INFO"Goodbye world!n"); } module_init(hello_init);module_init(hello_exit);
2.修改Makefile文件
模仿上面的内容写了下面的版块
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
这个时候我出现了如下报错:
http://blog.csdn.net/yueashuxia/article/details/52960658
我是直接sudo apt-get install libncurses5-dev
然后再执行make ARCH=arm menuconfig
出现以下目录:
1.下载工具–securecrt
http://cloud.189.cn/t/q6BZ3q6fueEv
3.上传编译生成的helloworld.ko文件
四.内核模块参数
通过宏module_param指定模块参数,模块参数用于在模块加载时传递参数给模块
module_param(name,type,perm)
name:模块参数名称
type:参数类型int ,charp,bool
perm:模块参数的访问权限
S_IRUGO任何用户对/sys/module中出现的该参数具有读权限
S_IWUSR允许root用户修改/sys/module中出现的参数
举例:
module_param(a,int,S_IRUGO);
module_param(st,charp,S_IWUSR);
五.总结
1.应用程序从头main到尾执行任务,执行结束后从内存中消失,内核模块则是现在内核中注册自己以便服务将来的某个请求,然后他的初始化函数结束,此时模块仍然存在于内核中,直到卸载函数被调用,模块才从内核中消失
2.printk在内核中使用,printf在应用程序中使用
优先级 总结
以上是内存溢出为你收集整理的linux-内核-将内核模块编译进内核全部内容,希望文章能够帮你解决linux-内核-将内核模块编译进内核所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)