linux嵌入式驱动开发,makefile到问题 嵌入式linux: 字符设备驱动makefile的一个小小疑...

\u8dea\u6c42\u5d4c\u5165\u5f0flinux\u7684makefile\u5199\u6cd5

\u5047\u8bbeMakefile\u5728/usr/src/menu\u4e0b\uff0c\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7c97\u7cd9\u7684\u5199\u6cd5\uff08\u5199\u5728\u4e00\u8d77\u4e86\uff09\uff1a

menu: menu.c menu.h test/test.c test/test.h
gcc -o $@ $^
cp menu /usr/bin

$(MAKE)\u5c31\u662fmake\uff0c\u4ed6\u4e0d\u662f\u7cfb\u7edf\u5168\u5c40\u53d8\u91cf\uff0c\u662fmake\u81ea\u5df1\u5b9a\u4e49\u7684\u53d8\u91cf\uff0c\u4f60\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528make

M\u8868\u793a\u7f16\u8bd1\u6210\u6a21\u5757\u7684\u610f\u601d

首先说一下,你要编译驱动程序,不再是跟原本编译应用程序那样可以在当前目录下直接make就好。
因为编译内核驱动的时候,是要用到内核文件里的头文件,还有内核提供的接口函数,要借助于内核文件夹里的makefile来编译你写好的驱动源代码,如果按一般的操作,你就得把源代码放到内核文件夹指定的目录下,然后再在那个目录下得makefile里添加一些语句,比如obj -m什么的(把相应的驱动代码编译成模块),然后到内核文件夹的顶层目录make,生成相应的模块文件,就有你问题3的那一大堆东西,其中.ko就是要用到的。
把一些驱动编译成模块,和编译进内核的区别,你可以去了解下。。编译成模块用的是-m。
而为了方便你可以在任何目录下直接用make来编译驱动代码;就有以下这指令:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
-C 指定的就是内核文件夹所在的地方
M=当前路径
modules的,是和make 联合起来的..make modules命令,这个命令你可以去查查。
.ko文件就是用insmod命令插入到内核中,在去添加相应的设备文件,就可以在内核里跑起来了。

这个你得看一下makefile是如何写的, makefile与shell很像,
obj-m是固定格式的,-m表示的是内核模块,helloworld.o是生成目标文件
2.4内核为.o 2.6为.ko
$(MAKE) $(RM) 是环境变量 分别代码 make 和 rm -rf
-C 切换目录到 $(KERNELDIR) ,其中$(KERNELDIR) 是一个变量,,也就是:KERNELDIR ?= /lib/modules/$(shell uname -r)/build
M=$(PWD) 其中 M是一个宏
$(PWD)是一变量,该变量的值为 $(shell pwd)
$(shell pwd) 是makefile中的函数
调用makefile中函数与使用$()
shell为函数名
pwd 为函数的参数
这个shell函数的作用就是执行shell命令 所以它的参数也必然是一个命令 pwd就是一个命令
modules是目标 具体modules是什么 ,要体该目录下的 makefile 是如何来定义这个目标的
clean :是一个伪目标 ,没有依赖,但它有执行的命令 :$(RM) *.o *.ko *.mod.c Module.symvers Module.markers Module.symvers module.order
就是删除编译时产生的文件
clean这个伪不会自动执行,自动执行的必须第一个目录,也就是默认目标 default
所以当进行编译时,只需要输入make 就可以编译了,它默认执行是第一个目标
也就是default伪目标
但clean 伪目标是不会执行的,,
make命令的格式
make [选项参数] [宏] [目标]

需要手动执行 输入make clean 其中clean 为伪目标

obj-m := helloworld.o //生成目标文件 helloworld.o 当然中间还有其他产物,但是2.4内核是安装.o 文件的,后来2.6就 变成.ko文件,但是还保留着 .o 的格式

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
MAKE 可以理解为调用MAKE 函数 你用make函数肯定要有编译好的内核镜像撒,就用 (KERNELDIR) 就是内核镜像的目录, pwd就是当前目录 学过shell命令吧,就是编译你当前的 ,一般这些都是格式 ,照着格式来 知道 它的目的就好了。modules 你编译的是个模块,所以要进去。

$(RM) 删除 知道 rm就是删除的shell命令 *.o就是代表只要是后缀为.o的文件 都会被删除掉,因为编译一个模块会产生很多 过程 文件 ,如果不及时清除就会造成很大的空间浪费 ,至于后面几个真不知道了

在命令行下输入make
就是编译 因为那个是default 学过switch case 吧
查找所有 ,当不存在时就会到default

当输入make clean 时 就会找到clean 这个下面的命令行 删除过程程序。

(RM) *.o *.ko *.mod.c Module.symvers Module.markers Module.symvers module.
这句话的意思是删除编译过程中产生的临时文件。
*.o *.ko *.mod.c Module.symvers Module.markers Module.symvers module.这些就是临时文件的名字,但然使用了一些通配符。这个你懂的。

现代跟以前不一样

  • linux宓屽叆寮忓紑鍙闇瑕佸鍝簺涓滆タ_宓屽叆寮linux寮鍙鏄仛浠涔堢殑
    绛旓細1.Linux鍩虹鐭ヨ瘑锛氫簡瑙Linux鎿嶄綔绯荤粺鐨勫熀鏈師鐞嗐佸懡浠よ鎿嶄綔銆佹枃浠剁郴缁熺粨鏋勭瓑銆2.C/C++缂栫▼锛氭帉鎻/C++缂栫▼璇█锛屽洜涓哄湪宓屽叆寮寮鍙戜腑锛岄氬父浣跨敤杩欎袱绉嶈瑷缂栧啓搴旂敤绋嬪簭銆3.宓屽叆寮忕郴缁熸灦鏋勶細浜嗚В宓屽叆寮忕郴缁熺殑纭欢鏋舵瀯鍜岃蒋浠舵灦鏋勶紝鍖呮嫭澶勭悊鍣ㄦ灦鏋勩佸唴瀛樼鐞嗙瓑銆4.璁惧椹卞姩寮鍙锛氬涔犲浣曠紪鍐欏拰璋冭瘯璁惧椹卞姩绋嬪簭...
  • 宓屽叆寮廘inux椹卞姩绋嬪簭寮鍙瀹炰緥鏁欑▼鍐呭绠浠
    绛旓細銆婂祵鍏ュ紡Linux椹卞姩绋嬪簭寮鍙戝疄渚嬫暀绋嬨嬫槸涓鏈繁鍏ヨ瑙宓屽叆寮廘inux绯荤粺椹卞姩绋嬪簭寮鍙戠殑瀹炵敤鎸囧崡銆傝涔﹀叡鍒嗕负10涓缁嗙珷鑺傦紝鏃ㄥ湪鍏ㄩ潰寮曞璇昏呯悊瑙e拰瀹炶返椹卞姩绋嬪簭鐨勫紑鍙戣繃绋嬨傚墠鍥涚珷涓昏浠嬬粛浜Linux鎿嶄綔绯荤粺鐨勫熀纭鎿嶄綔锛屼互鍙婂浣曟惌寤宓屽叆寮廘inux椹卞姩寮鍙鐜锛屽苟姒傝堪浜嗛┍鍔ㄧ▼搴忓紑鍙戞墍蹇呴渶鐨勫唴鏍稿熀纭鐭ヨ瘑銆傞氳繃杩欎簺鍐呭锛...
  • ARM宓屽叆寮廘inux璁惧椹卞姩瀹炰緥寮鍙鍐呭绠浠
    绛旓細Linux锛浣滀负涓娆炬垚鐔熶笖绋冲畾鐨勫紑婧愭搷浣滅郴缁燂紝鍏跺湪宓屽叆寮璁惧涓殑搴旂敤鍏锋湁鏄捐憲浼樺娍銆傛湰涔﹁仛鐒︿簬鏂颁竴浠RM9澶勭悊鍣紝娣卞叆鍓栨瀽Linux绯荤粺涓嬭澶椹卞姩鐨勮璁″拰瀹炵幇绛栫暐锛岀壒鍒叧娉ㄥ熀浜嶭inux2.6.20鍐呮牳鐨寮鍙瀹炶返銆備互8涓瀬鍏蜂唬琛ㄦх殑瀹炰緥涓虹爺绌舵牳蹇冿紝杩欎簺瀹炰緥娑电洊浜哃inux绯荤粺涓父瑙佺殑璁惧绫诲瀷锛屽寘鎷寜閿澶囥佽Е鎽稿睆銆...
  • 宓屽叆寮璁捐鍙Linux椹卞姩寮鍙鎸囧崡鈥斺斿熀浜嶢RM9澶勭悊鍣ㄥ浘涔︾畝浠
    绛旓細鏈功浠RM9澶勭悊鍣ㄥ拰Linux鎿嶄綔绯荤粺涓烘牳蹇冿紝渚濇墭娣卞湷浼橀緳鍏徃鐨寮鍙鏉匡紝娣卞叆鍓栨瀽宓屽叆寮忕郴缁熷紑鍙戠殑鍏ㄨ繃绋嬨傜壒鍒拡瀵筁inux 2.6鐗堟湰鐨勫唴鏍革紝璇︾粏璁茶В浜哃inux璁惧椹卞姩绋嬪簭鐨勫紑鍙戞柟娉曪紝涓鸿鑰呮彁渚涗簡瀹炵敤鐨勫紑鍙戞寚瀵笺備綔涓轰竴鏈笓娉ㄤ簬ARM+Linux宓屽叆寮绯荤粺寮鍙戠殑瀹炵敤鎸囧崡锛屾湰涔︽棬鍦ㄩ槓杩板祵鍏ュ紡绯荤粺寮鍙戠殑鍩虹姒傚康鍜屽紑鍙戞祦绋...
  • 鎴戞兂瀛宓屽叆寮廘INUX椹卞姩寮鍙,寰堢籂缁撳埌搴曢堿RM9,ARM11杩樻槸CORTEX-A8鐨勫紑 ...
    绛旓細2銆乤rm7閮借繕涓嶈繃鏃躲傚闈㈡壘宸ヤ綔锛屾垜鏄垰濂芥槸搴斿眾鐢燂紝杩欎釜瀵规垜鏉ヨ瀹為檯鐨勭粡楠岃姹備笉楂樸備絾浣犵敤AR9\ARM11鑲畾涓嶆槸杩囨椂鐨勩3銆佸彧瑕佷綘瀛﹂忎簡arm鏋舵瀯鐨勪换浣曚竴娆惧鐞嗗櫒鐨椹卞姩寮鍙戯紝涓婃墜鍏朵粬arm鏋舵瀯浼拌涓嶈秴杩1澶╋紙8灏忔椂锛夛紝鍥犱负椹卞姩寮鍙戝緢澶氬湴鏂规椂鐩搁氱殑銆傞┍鍔ㄥ紑鍙戝纭欢鏋舵瀯鍏堜笉璇达紝闅惧害鍦ㄤ簬linux绯荤粺锛...
  • ARM宓屽叆寮廘inux璁惧椹卞姩瀹炰緥寮鍙缂栬緫鎺ㄨ崘
    绛旓細鏈功鏄夾RM宓屽叆寮廘inux绯荤粺寮鍙涓涗功銆嬩腑鐨勪竴閮ㄩ噸瑕佸弬鑰冭祫鏂欙紝瀹冧笓娉ㄤ簬鏂颁竴浠RM9澶勭悊鍣ㄥ湪Linux绯荤粺鐜涓嬬殑璁惧椹卞姩寮鍙戙傚唴瀹逛赴瀵屼笖瀹炵敤锛屽叡娑电洊鍏釜璇﹀敖鐨勫疄渚嬶紝璇︾粏瑙f瀽Linux 2.6.20鍐呮牳璁惧椹卞姩鐨勬瀯寤哄拰瀹炵幇杩囩▼銆傞鍏堬紝鏈功娣卞叆鍓栨瀽浜嗘寜閿澶囩殑椹卞姩寮鍙戯紝璁╄鑰呯悊瑙e浣曟帶鍒跺拰鍝嶅簲鎸夐敭杈撳叆銆傛帴鐫锛...
  • 宓屽叆寮廘inux椹卞姩寮鍙憀inux宓屽叆寮忓紑鍙戦┍鍔
    绛旓細閮借浜嗘槸搴曞眰椹卞姩寮鍙浜嗭紝閭d富瑕佸伐浣滃氨鏄寮鍙戦┍鍔浜嗭紝姣斿鏉垮崱涓婄殑PCIE璁惧锛孖IC璁惧锛孲PI璁惧绛夌瓑 宓屽叆寮弆inux椹卞姩鏄潚鏄ラキ鍚楋紵褰撶劧涓嶆槸锛岃繖涓嚟鐨勬槸鎶鏈拰缁忛獙銆宓屽叆寮廘INUX椹卞姩宸ョ▼甯堢殑寰呴亣鎬庝箞鏍凤紵涓鑸紝宸ヤ綔缁忛獙鍦1-2骞寸殑宓屽叆寮忓伐绋嬪笀钖按锛屽熀鏈細鍦5000-8000鍏冪殑鑼冨洿锛岃岄殢鐫宸ヤ綔骞撮檺鐨勫鍔狅紝钖祫...
  • 姝g偣鍘熷瓙宓屽叆寮弆inux椹卞姩寮鍙鈥斺Linux 涓插彛RS232 485 GPS 椹卞姩
    绛旓細鍦Linux鐨勫祵鍏ュ紡涓栫晫涓紝涓插彛锛圲ART/USART锛椹卞姩妗嗘灦鎵紨鐫鍏抽敭瑙掕壊锛屼负纭欢閫氫俊鎻愪緵浜嗗己澶х殑鏀寔銆係TM32MP1寮鍙鏉挎惌杞戒簡涓板瘜鐨勪覆鍙h祫婧愶紝鍖呮嫭4涓悓姝ヤ覆鍙o紙USART1-3,6锛夊拰4涓紓姝ヤ覆鍙o紙UART4-8锛夛紝鍏朵腑USART3鍜孶ART5涓撲负RS232/RS485鍙奊PS妯″潡璁捐锛岄┍鍔ㄦ鏋剁敱ST瀹樻柟绮惧績鏋勫缓锛屽彧闇鍦ㄨ澶囨爲涓繘琛岀畝鍗...
  • Linux宓屽叆寮忓紑鍙鍜孡inux鍐呮牳/椹卞姩寮鍙鏈変粈涔堝尯鍒?
    绛旓細鍓嶈呭己璋冪殑鏄骇鍝侊紙linux宓屽叆寮浜у搧锛夛紝鑰屽悗鑰呭己璋冪殑鏄蒋浠讹紙鍐呮牳鍜岄┍鍔級銆備竴鑸仛linux宓屽叆寮忎骇鍝佹椂閮借娑夊強linux椹卞姩鍜屽唴鏍革紝褰撶劧涓嶄粎浠呮槸鍐呮牳椹卞姩锛杩樻湁gui绯荤粺锛屽拰鍏朵粬杞欢绛夈傝屽仛linux鍐呮牳椹卞姩鍒欎笉涓瀹氱敤浜庡祵鍏ュ紡浜у搧锛屼篃鍙互鐢ㄤ簬寮鍙pc鏈猴紙涔熷氨鏄竴鑸殑x86鏋舵瀯锛夎蒋浠躲
  • 宓屽叆寮廘inux椹卞姩绋嬪簭寮鍙瀛︿範璺嚎?
    绛旓細1銆佸祵鍏ュ紡linux涓婂眰搴旂敤,鍖呮嫭QT鐨凣UI寮鍙2銆宓屽叆寮弆inux绯荤粺寮鍙3銆宓屽叆寮弆inux椹卞姩寮鍙戝祵鍏ュ紡鐩墠涓昏闈㈠悜鐨勫嚑涓搷浣滅郴缁熸槸,LINUX,WINCE銆乂xWorks绛夌瓑Linux鏄紑婧愬厤璐圭殑,鑰屼笖鍏舵簮浠g爜鏄紑鏀剧殑,鏇村姞閫傚悎鎴戜滑瀛︿範宓屽叆寮忋傛墍浠ヤ綘鍙互灏濊瘯浠ヤ笅璺嚎:(1) C璇█鏄墍鏈夌紪绋嬭瑷涓殑寮鸿,鍗曠墖鏈恒丏SP銆佺被浼糀RM鐨勭绉嶈姱鐗囩殑缂栫▼...
  • 扩展阅读:两个m2插槽插哪个 ... 野火linux开发板视频 ... java入门 ... linux开发板 v3s ... 嵌入式linux开发板推荐 ... 自学嵌入式linux多长时间 ... 国产linux开发板 ... 嵌入式软件开发前景 ... 嵌入式linux开发外包 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网