老板,makefile首字母要大写。人家要的是Makefile哦~
Ⅱ 在linux下怎么makefile
Linux系统下makefile的作用把编写好的源文件进行编译与链接,makefile的基本格式如下:
target…
:prerequisite…
(Tab键)command
#格式解释
target:生成的目标文件,可以是可执行文件,也可以是中间目标文件
prerequisite:生成target所需要的文件
command:make需要的执行命令,一般是编译与链接的命令,命令前面必须要有Tab键才能有效果
makefile的简单例子(用的Ubuntu11.10):
gcc–chello.c:编译command目录下的hello.c源文件,编译之后会生成hello.o中间文件。
rm:删除command目录下的hello.o与exe.out文件
./exe.out:输出exe.out可执行文件,hello.c中写的是HelloWorld!
make:make命令与makeexe命令执行的效果是一样的。
Ⅲ linux 在编译驱动程序时makefile文件是在哪里编写的
还有其它资料上传不了,只能下载啦密码:ahbn以上回答由东莞市万里行橡胶有限公司提供,望采纳。
Ⅳ linux嵌入式驱动开发,makefile到问题
首先说一下,你要编译驱动程序,不再是跟原本编译应用程序那样可以在当前目录下直接make就好。
因为编译内核驱动的时候,是要用到内核文件里的头文件,还有内核提供的接口函数,要借助于内核文件夹里的makefile来编译你写好的驱动源代码,如果按一般的操作,你就得把源代码放到内核文件夹指定的目录下,然后再在那个目录下得makefile里添加一些语句,比如obj
-m什么的(把相应的驱动代码编译成模块),然后到内核文件夹的顶层目录make,生成相应的模块文件,就有你问题3的那一大堆东西,其中.ko就是要用到的。
把一些驱动编译成模块,和编译进内核的区别,你可以去了解下。。编译成模块用的是-m。
而为了方便你可以在任何目录下直接用make来编译驱动代码;就有以下这指令:
$(MAKE)
-C
$(KERNELDIR)
M=$(PWD)
moles
-C
指定的就是内核文件夹所在的地方
M=当前路径
moles的,是和make
联合起来的..make
moles命令,这个命令你可以去查查。
.ko文件就是用insmod命令插入到内核中,在去添加相应的设备文件,就可以在内核里跑起来了。
Ⅳ linux驱动模块makefile出错。。
/lib/moles/&(shell uname -r)/
--->
/lib/moles/$(bash uname -r)/
Ⅵ 如何高效阅读linux设备驱动程序
第一个驱动:在用户空间加载和移除驱动
====================================
现在将展示如何完成第一个驱动,在内核中将看作模块
新建一个文件nothing.c如下
#include <linux/mole.h>
MODULE_LICENSE("Dual BSD/GPL");
2.6.x版本后的内核,编译模块会略微复杂一点。首先,需要有一份完整的、编译过的内
核源码树。在下面的文字中,将假设使用2。6。8版本的内核。
其次,需要一个makefile文件,本例中的makefile文件名为Makefile,内容如下:
obj-m := nothing.o
与之前版本的内核不同,现在编译模块时使用的内核需要与模块将要加载的内核相同。
编译上面的文件,可以使用命令:
make -C /usr/src/kernel-source-2.6.8 M=pwd moles
这个极其简单的模块就属于内核空间,一旦其被加载,它就是内核空间的一部分。
在用户空间,可以使用下面的命令加载它,需要root权限:
insmod nothing.ko
insmod 这个命令用于为内核加载模块。尽管现在我们已经加载了nothing.ko这个模块,
但是这个模块毕竟没有任何用处。
可以通过查看系统里已加载的模块来检查是否已经成功加载了nothing.ko
lsmod
最后,需要卸载该模块时使用下面的命令:
rmmod nothing
重新使用lsmod,可以发现nothing模块已经不在了。
"Hello world"驱动:在内核空间加载和移除驱动
===========================================
当一个模块设备驱动加载到内核,将执行一些初始的工作,如重新设置设备,reserving
RAM, reserving interrupts, reserving input/output ports, etc.
这些工作得以在内核空间执行,必须要有两个函数存在:mole_init 和
mole_exit;它们对应于用户空间的insmod和rmmod命令。总之,用户命令insmod和
rmmod使用了内核空间的函数mole_init和mole_exit.
来看一个经典的程序 HELLO WORLD:
//hello.c
#include <linux/init.h>
#include <linux/mole.h>
#inlucde <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk("<1> Hello world!\n");
return 0;
}
static void hello_exit(void)
{
printk("<1> Bye, cruel world!\n");
}
mole_init(hello_init);
mole_exit(hello_exit);
其中hello_init 和 hello_exit 函数可以取任意名,但为了加载和移除功能是更容易识
别,它们作为参数传递给函数mole_init 和 mole_exit.
printk函数与printf函数非常类似,但printk只工作在内核中。<1>表示打印信息
为最高优先级(数字越低,优先级越高)。这样,不仅可以在内核系统日志中看到该
打印信息,还能在系统控制台接收到该打印信息。
Ⅶ LINUX设备驱动的Makefile
在.config中定义。
.config是执行make menuconfig等命令后生成的,保存在内核根目录
Ⅷ Linux2.6 如何编写Makefile,使驱动程序能够编译链接静态库
就我的感觉,静态库是编译好的.o文件,你只要将静态库(mylib.a)放置于 /lib 以及/usr/lib 文件夹下,然后在gcc编译器的变量中 加上 -lmylib,就可以了。