linux加载驱动的两种makefile文件?
二Makefile文件有两种写法:
一种是:
#Addyourdebuggingflag(ornot)toCFLAGS
ifneq($(KERNELRELEASE),)
obj-m:=boot.o
else
KERNELDIR?=/lib/modules/$(shelluname-r)/build
PWD:=$(shellpwd)
default:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules
endif
另外一种是:
#Addyourdebuggingflag(ornot)toCFLAGS
ifneq($(KERNELRELEASE),)
obj-m:=boot.o
else
KERNELDIR?=/usr/src/linux-headers-2.6.38-8-generic
PWD:=$(shellpwd)
default:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules
endif
比较二者可以发觉linux查看端口占用,该两个Makefi二Makefile文件有两种写法:
一种是:
#Addyourdebuggingflag(ornot)toCFLAGS
ifneq($(KERNELRELEASE),)
obj-m:=boot.o
else
KERNELDIR?=/lib/modules/$(shelluname-r)/build
PWD:=$(shellpwd)
default:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules
endif
另外一种是:
#Addyourdebuggingflag(ornot)toCFLAGS
ifneq($(KERNELRELEASE),)
obj-m:=boot.o
else
KERNELDIR?=/usr/src/linux-headers-2.6.38-8-generic
PWD:=$(shellpwd)
default:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules
endif
比较二者可以发觉,该两个Makefi二Makefile文件有两种写法:
一种是:
#Addyourdebuggingflag(ornot)toCFLAGS
ifneq($(KERNELRELEASE),)
obj-m:=boot.o
else
KERNELDIR?=/lib/modules/$(shelluname-r)/build
PWD:=$(shellpwd)
default:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules
endif
另外一种是:
#Addyourdebuggingflag(ornot)toCFLAGS
ifneq($(KERNELRELEASE),)
obj-m:=boot.o
else
KERNELDIR?=/usr/src/linux-headers-2.6.38-8-generic
PWD:=$(shellpwd)
default:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules
endif
比较二者可以发觉,该两个Makefile的惟一差异是KERNELDIR的不同,
le的惟一差异是KERNELDIR的不同,
le的惟一差异是KERNELDIR的不同,
怎样使用CMAKE生成makefile文件?
CMake是一个跨平台的安装(编译)工具,可以用简单的句子来描述所有平台的安装(编译过程)。他才能输出各类各样的makefile或则project文件,能测试编译器所支持的C++特点。只是CMake的组态档起名为CmakeLists.txt。Cmake并不直接建构出最终的软件,而是形成标准的建构档(如linux的Makefile或WindowsVisualC++的projects/workspaces),之后再依通常的建构方法使用。
在linux平台下使用CMake生成Makefile并编译的流程如下:
编撰CmakeLists.txt。
执行命令“cmakePATH”或者“ccmakePATH”生成Makefile(PATH是CMakeLists.txt所在的目录)。
使用make命令进行编译
工程实例:
一.编撰各层CMakeLists.txt
主目录的主程序main.cpp
#include"hello.h"
externHellohello;
intmain()
{
hello.Print();
return0;
}
主目录的CMakeLists.txt
#totherootbinarydirectoryoftheprojectas${MAIN_BINARY_DIR}.
project(MAIN)
#versionsupport
cmake_minimum_required(VERSION2.8)
#Recurseintothe"Hello"and"Demo"subdirectories.Thisdoesnotactually
#causeanothercmakeexecutabletorun.Thesameprocesswillwalkthrough
#theproject'sentiredirectorystructure.
add_subdirectory(Hello)
add_subdirectory(Demo)
#MakesurethecompilercanfindincludefilesfromourHellolibrary.
include_directories(${MAIN_SOURCE_DIR}/Hello)
#MakesurethelinkercanfindtheHelloDemolibraryonceitisbuilt.
link_directories(${HELLO_BINARY_DIR}/Hello)
link_directories(${HELLO_BINARY_DIR}/Demo)
#definethesourcecoedesofcurrentdirectoryasDIR_SRCS
AUX_SOURCE_DIRECTORY(.DIR_SRCS)
#Addexecutablecalled"MAIN"thatisbuiltfromthesourcefiles
add_executable(Main${DIR_SRCS})
#LinktheexecutabletotheHelloDemolibrary.
target_link_libraries(MainHelloDemo)
定义项目名project(MAIN),致使当前目录可以用${MAIN_SOURCE_DIR},因为有2个子目录,所以须要add_subdirectory它们。因为主程序会使用到其他库,因此也须要指定联接库所在目录。
主目录下的作用是借助add_executable将当前目录下的源文件编译成Main程序,之后通过target_link_libraries链接Hello和Demo库。因为主程序文件使用了hello.h文件,所以要include_directories该目录。
---------------------------------------------------------------------------------------------------
子目录Demo的子程序demo.c
#include"hello.h"
Hellohello;
子目录Demo的CMakeLists.txt
#MakesurethecompilercanfindincludefilesfromourHellolibrary.
include_directories(${MAIN_SOURCE_DIR}/Hello)
#definethesourcecoedesofcurrentdirectoryasDIR_DEMO_SRCS
AUX_SOURCE_DIRECTORY(.DIR_DEMO_SRCS)
#Addlibrarycalled"Demo"thatisbuiltfromthesourcefiles
add_library(Demo${DIR_DEMO_SRCS})
Demo目录下的CMakeLists主要作用是借助add_library将当前目录源码编译成Demo库,因为该库使用到hello.h文件,所以要include_directories该目录。
---------------------------------------------------------------------------------------------------
子目录Hello的子程序hello.h
#ifndef_hello_h
#define_hello_h
classHello
{
public:
voidPrint();
};
#endif
子目录Hello的子程序hello.c
#include"hello.h"
#include
voidHello::Print()
{
printf("Hello,World!n");
}
子目录Hello的CMakeLists.txt
#definethesourcecoedesofcurrentdirectoryasDIR_HELLO_SRCS
AUX_SOURCE_DIRECTORY(.DIR_HELLO_SRCS)
#Addlibrarycalled"hello"thatisbuiltfromthesourcefiles
add_library(Hello${DIR_HELLO_SRCS})
Hello目录下的CMakeLists主要作用是借助add_library将当前目录源码编译成Hello库。
---------------------------------------------------------------------------------------------------
二.执行cmake命令
至此我们完成了项目中所有CMakeLists.txt文件的编撰,步入目录step2中依次执行命令
#cmake.
默认当前目录,生产makefile
#make
最后编译程序
linux编译器头文件配置?
-I/usr/src/linux-headers-2.6.32-24/include其中,-I和旁边的路径没有空格-I/usr/src/linux-headers-2.6.32-24/include通常也甚少直接用gcc命令,大部份是用makefile,make-Ckernel_pathmodules
yummakecache是哪些?
yum是FedoraRHELCentosSUSE等linux发行版的软件包管理工具通过执行manyum查看yum的帮助信息可以晓得yummakecache是将服务器上的软件包信息现今本地缓存,以增强搜索安装软件的速率yum主要的一下命令如下:yumsearch软件包搜索软件包yuminstall软件包安装软件包yumremove软件包yumupdate更新系统等等
LINUX下安装软件方式命令方式?
LINUX下安装软件包常有三种,不同的软件包有不同的安装方式:tar包linux卸载驱动命令,整个安装过程可以分为以下几步:
1)取得应用软件:通过下载、购买光碟的方式获得;
2)解压缩文件:通常tar包,还会再做一次压缩,如gzip、bz2等,所以你须要先解压。若果是最常见的gz格式,则可以执行:“tar–xvzf软件包名”,就可以一步完成解压与解包工作。倘若不是,则先用解压软件linux环境变量,再执行“tar–xvf解压后的tar包”进行解包;阅读附送的INSTALL文件、README文件;
3)执行“./configure”命令为编译做好打算;
4)执行“make”命令进行软件编译;
5)执行“makeinstall”完成安装;
6)执行“makeclean”删除安装时形成的临时文件。
7)运行应用程序:通常来说,Linux的应用软件的可执行文件会储存在/usr/local/bin目录下!不过这并不是“放四海皆准”的真理,最可靠的还是看这个软件的INSTALL和README文件,通常还会有说明。
8)卸载:一般软件的开发者极少考虑到怎样卸载自己的软件,而tar又仅是完成打包的工作,所以并没有提供良好的卸载技巧。有两个软件就能解决这个问题linux卸载驱动命令,那就是Kinstall和Kife,它们是tar包安装、卸载的黄金搭档rpm包,安装过程如下:1)操作系统:RedHat(RedHat/Fedora)2)常见的安装包格式rpm包,安装rpm包的命令是“rpm-参数”3)包管理工具yum4)支持tar包5)1rpm命令:安装:rpm–ivh软件包名.rpm(-I安装软件,-t测试安装,不是真的安装,-p显示安装进度,-f忽视任何错误,-U升级安装,-v检查套件是否正确安装)卸载:rpm–e软件名(注意使用的是软件名,而不是软件包名)查询:查询当前系统安装的软件包:rpm–qa‘*软件包名*’deb包,安装过程:1)操作系统:Debian系列(Ubuntu)2)常见的安装包格式deb包,安装deb包的命令是“dpkg-参数”3)包管理工具apt-get4)支持tar包5)dpkg命令:安装:dpkg–i软件包名.deb,卸载:dpkg–e软件名,查询:查询当前系统安装的软件包:dpkg–l‘*软件包名*’