[嵌入式Linux] 用ecliipse生成Ko文件成功,但编写makefile生成so时,提示各种错

[复制链接]
 楼主| everbright 发表于 2017-9-14 17:42 | 显示全部楼层 |阅读模式
本帖最后由 everbright 于 2017-9-14 17:47 编辑

用ecliipse生成Ko文件成功,但编写makefile生成so时,提示各种错误?请高手指教!
环境是:ubuntu+eclipse+cdt,用的是nanopi2开发板
源代码文件名叫share_test.c,代码如下:
  1. <p>
  2. /*
  3. * share_test.c
  4. *
  5. *  Created on: 2017骞?鏈?3鏃?
  6. *      Author: hanyl
  7. */
  8. #include <linux/init.h>
  9. #include <linux/module.h>
  10. #include <linux/fs.h>
  11. #include <linux/cdev.h>
  12. #include <linux/device.h>
  13. #include <linux/interrupt.h>
  14. #include <linux/irq.h>
  15. #include <linux/gpio.h>
  16. #include <mach/platform.h>
  17. #include <mach/gpio_desc.h>
  18. #include <mach/gpio.h></p><p>#define LED_GPIO (PAD_GPIO_B + 26)  //GPB26涓篖ED杈撳嚭鎺у埗寮曡剼
  19. #define KEY_GPIO (PAD_GPIO_C + 28)  //GPB31涓鸿Е鍙戠粓绔簮
  20. #define KEY_GPIO_IRQ gpio_to_irq(KEY_GPIO) //鏍规嵁GPIO缂栧彿鑾峰彇瀵瑰簲鐨勫紩鑴氱殑涓柇缂栧彿
  21. #define DEVICE_NAME "key_irq"</p><p>
  22. char const irq_types[5] = {
  23. IRQ_TYPE_EDGE_RISING,
  24. IRQ_TYPE_EDGE_FALLING,
  25. IRQ_TYPE_EDGE_BOTH,
  26. IRQ_TYPE_LEVEL_HIGH,
  27. IRQ_TYPE_LEVEL_LOW
  28. };
  29. int Init_Gpio(void)
  30. {
  31. int ret;
  32. /*鐢宠GPIO*/
  33.   gpio_free(KEY_GPIO);  /*棣栧厛閲婃斁GPIO*/
  34.   gpio_free(LED_GPIO);  /*棣栧厛閲婃斁GPIO*/
  35.   ret = gpio_request_one(KEY_GPIO, GPIOF_IN, "KEY IRQ"); /* 鐢宠 IO 锛屼负杈撳叆*/
  36.   if (ret < 0) {
  37.    printk(KERN_ERR "Failed to request GPIO for KEY\n");
  38.   }</p><p>  ret = gpio_request_one(LED_GPIO, GPIOF_OUT_INIT_HIGH, "LED OUTPUT"); /* 鐢宠 IO 锛屼负杈撳嚭*/
  39.   if (ret < 0) {
  40.    printk(KERN_ERR "Failed to request GPIO for LED\n");
  41.   }</p><p>  gpio_direction_input(KEY_GPIO); /* 璁剧疆 GPIO 涓鸿緭鍏?*/
  42.   gpio_direction_output(LED_GPIO,0); /* 璁剧疆 GPIO 涓鸿緭鍑?鍙傛暟0浠h〃杈撳嚭*/
  43.   gpio_set_value(LED_GPIO,0);  /*鍒濆鍖朙ED涓虹唲鐏姸鎬?/</p><p>  return 0;
  44. }
  45. void LED_light( void )
  46. {
  47. gpio_set_value(LED_GPIO,1);
  48. }
  49. void LED_off(void)
  50. {
  51. gpio_set_value(LED_GPIO,0);
  52. }</p><p>int out_hello(void)
  53. {
  54. printk("hello s3c4418!\n");
  55.    return 0;
  56. }
  57. </p><p> </p>
用eclipse生成ko时用的自己的makefile文件,文件内容如下

  1. obj-m += share_test.o
  2.    
  3. KERN_DIR = /home/hanyl/linux-3.4.y

  4. PWD := $(shell pwd)
  5. ARCH=arm  
  6.   
  7. CROSS_COMPILE=arm-cortexa9-linux-gnueabihf-
  8. CC=$(CROSS_COMPILE)gcc  
  9. LD=$(CROSS_COMPILE)ld  

  10. all:
  11.         make -C $(KERN_DIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=${PWD} modules
  12. clean:
  13.         make -C $(KERN_DIR) M=`pwd` modules clean
  14.         rm -rf modules.order

  15.         

虽然写的不规则,但可以编译成功。这里是把初始化和卸载去掉了;
我想生成so动态连接库文件,这是应该怎么写makefile文件?自己写了一个编译不通过,请各位高手支招呀,谢谢
  1. <p><p>KERN_DIR = /home/hanyl/linux-3.4.y

  2. PWD := $(shell pwd)
  3. ARCH=arm  
  4.   
  5. CROSS_COMPILE=arm-cortexa9-linux-gnueabihf-
  6. CC=$(CROSS_COMPILE)gcc  
  7. LD=$(CROSS_COMPILE)ld  

  8. CFLAGS  :=
  9. LDFLAGS := -shared -fPIC
  10. SOURCE  := $(wildcard *.c)
  11. OBJS    := $(patsubst %.c,%.o,$(SOURCE))
  12. TARGET_LIB := share_test.so

  13. all:$(OBJS)  
  14.     echo $(OBJS)  
  15.     $(LD) $(LDFLAGS) -o $(TARGET_LIB) $(OBJS)   
  16.   
  17. %.o:%.c  
  18.     [url=home.php?mod=space&uid=3148]@echo[/url] Compiling lt; ...  
  19.     $(CC) -c $(CFLAGS)  lt; -o $*.o </p><p>.PHONY: clean
  20. clean:
  21. rm *.so *.o -rf</p>


   
 楼主| everbright 发表于 2017-12-8 11:59 | 显示全部楼层
原来的编译方法不对,掌握方法后。可以直接通过。
放在android/device/friendly-arm/nanopi2/新建目录下,就OK了
youyiyang 发表于 2017-12-10 07:57 | 显示全部楼层
顶一个!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:/**************个人信息***********/ //联系人:韩先生, //QQ:243691732 //手机:13933870954 /////////////

22

主题

109

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:/**************个人信息***********/ //联系人:韩先生, //QQ:243691732 //手机:13933870954 /////////////

22

主题

109

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部