Linux内核---61.linux内核静态库的编译与使用
2016-07-25 12:01
483 查看
有时会遇到这样的情况,跟其它厂商合作时,厂商只给了库及其头文件,
然后加入到内核源码中进行编译,下面就摸拟这种情况.
1. linux 内核目录下编译靜态库
cong@msi:/work/qemu/linux-3.0.1$
mkdir -pv drivers/mylib/ ;;在driver/mylib目录下放静态库的代码
cong@msi:/work/qemu/linux-3.0.1$
cat drivers/mylib/Makefile
;;编译静态库的Makefile,只有一行
lib-y := mylib.o
cong@msi:/work/qemu/linux-3.0.1$
cat drivers/mylib/mylib.c
;;静态库的内容,就一个打印函数
#include
#include
#include
int mylib_func(void)
{
printk("mylib func\n");
return 0;
}
EXPORT_SYMBOL(mylib_func);
cong@msi:/work/qemu/linux-3.0.1$ cat include/linux/mylib.h ;;静态库的头文件
#ifndef _MYLIB_H
#define _MYLIB_H
int mylib_func(void);
#endif /* _MYLIB_H */
cong@msi:/work/qemu/linux-3.0.1$
vi drivers/Makefile ;;最后在上级目录drivers的Makefile加入
obj-y += mylib/
;;自己的库的编译
make编译内核,则会在drivers/mylib/目录下编译出静态库来了
cong@msi:/work/qemu/linux-3.0.1$
ls drivers/mylib/
built-in.o lib.a Makefile
modules.order mylib.c mylib.o
2.linux内核使用静态库
cong@msi:/work/qemu/linux-3.0.1$
cat drivers/hello/hello.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mylib.h>
;;加入静态库的头文件
static int __init hello_init(void)
{
int ret = 0;
printk(KERN_INFO "next
cong test mylib\n");
mylib_func();
;;调用静态库的函数
return ret;
}
static void __exit hello_exit(void)
{
return ;
}
MODULE_AUTHOR(" cong");
MODULE_DESCRIPTION("test mylib");
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
cong@msi:/work/qemu/linux-3.0.1$
cat drivers/hello/Makefile ;;加入调用静态库的函数
obj-y += hello.o ../mylib/lib.a
cong@msi:/work/qemu/linux-3.0.1$
vi drivers/Makefile
obj-y += hello/
3.最后试一下去掉静态库源码,只保留库
cong@msi:/work/qemu/linux-3.0.1$
cp ./drivers/mylib/lib.a ./drivers/hello/ ;;将库copy到调用库的地方
cong@msi:/work/qemu/linux-3.0.1$
vi drivers/Makefile
#obj-y += mylib/
;; 去掉库的编译
cong@msi:/work/qemu/linux-3.0.1$
rm -rf drivers/mylib ;; 同时去掉库的源码
cong@msi:/work/qemu/linux-3.0.1$
vi drivers/hello/Makefile ;; 修改调用者的Makefile
obj-y += hello.o
lib.a
然后加入到内核源码中进行编译,下面就摸拟这种情况.
1. linux 内核目录下编译靜态库
cong@msi:/work/qemu/linux-3.0.1$
mkdir -pv drivers/mylib/ ;;在driver/mylib目录下放静态库的代码
cong@msi:/work/qemu/linux-3.0.1$
cat drivers/mylib/Makefile
;;编译静态库的Makefile,只有一行
lib-y := mylib.o
cong@msi:/work/qemu/linux-3.0.1$
cat drivers/mylib/mylib.c
;;静态库的内容,就一个打印函数
#include
#include
#include
int mylib_func(void)
{
printk("mylib func\n");
return 0;
}
EXPORT_SYMBOL(mylib_func);
cong@msi:/work/qemu/linux-3.0.1$ cat include/linux/mylib.h ;;静态库的头文件
#ifndef _MYLIB_H
#define _MYLIB_H
int mylib_func(void);
#endif /* _MYLIB_H */
cong@msi:/work/qemu/linux-3.0.1$
vi drivers/Makefile ;;最后在上级目录drivers的Makefile加入
obj-y += mylib/
;;自己的库的编译
make编译内核,则会在drivers/mylib/目录下编译出静态库来了
cong@msi:/work/qemu/linux-3.0.1$
ls drivers/mylib/
built-in.o lib.a Makefile
modules.order mylib.c mylib.o
2.linux内核使用静态库
cong@msi:/work/qemu/linux-3.0.1$
cat drivers/hello/hello.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mylib.h>
;;加入静态库的头文件
static int __init hello_init(void)
{
int ret = 0;
printk(KERN_INFO "next
cong test mylib\n");
mylib_func();
;;调用静态库的函数
return ret;
}
static void __exit hello_exit(void)
{
return ;
}
MODULE_AUTHOR(" cong");
MODULE_DESCRIPTION("test mylib");
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
cong@msi:/work/qemu/linux-3.0.1$
cat drivers/hello/Makefile ;;加入调用静态库的函数
obj-y += hello.o ../mylib/lib.a
cong@msi:/work/qemu/linux-3.0.1$
vi drivers/Makefile
obj-y += hello/
3.最后试一下去掉静态库源码,只保留库
cong@msi:/work/qemu/linux-3.0.1$
cp ./drivers/mylib/lib.a ./drivers/hello/ ;;将库copy到调用库的地方
cong@msi:/work/qemu/linux-3.0.1$
vi drivers/Makefile
#obj-y += mylib/
;; 去掉库的编译
cong@msi:/work/qemu/linux-3.0.1$
rm -rf drivers/mylib ;; 同时去掉库的源码
cong@msi:/work/qemu/linux-3.0.1$
vi drivers/hello/Makefile ;; 修改调用者的Makefile
obj-y += hello.o
lib.a
相关文章推荐
- Linux内核---60.linux内核链表list的使用
- Linux内核---59.netlink应用层与内核层的交互
- Linux内核---58.kthread与wait_event
- linux基础入门命令
- Linux进程通信(三)IPC信号
- linux之expect
- linux下获取当前屏幕分辨率和当前终端行列数的简单方法
- heartbeat安装
- centos6.7 64位环境下部署MySQL-5.7.13
- Linux查看CPU和内存使用情况【转】
- Linux基础命令
- Linux(centOS6.5)下SVN的安装、配置及开机启动
- linux centos 基本命令
- CentOS下采用Crontab实现PHP脚本定时任务
- Linux之用户身份的查看与切换(su+sudo)
- Linux core 文件介绍
- Linux下设置本地yum安装源
- R第一问 CentOS6.5 修改 /etc/sudoers 提示只读
- Linux源代码目录结构说明
- 菜鸟的Linux苦逼之路4 vim编辑器