Chinaunix首页 | 论坛 | 博客
  • 博客访问: 412656
  • 博文数量: 60
  • 博客积分: 442
  • 博客等级: 下士
  • 技术积分: 910
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-27 14:53
文章分类

全部博文(60)

文章存档

2021年(1)

2018年(1)

2017年(14)

2016年(31)

2015年(1)

2013年(3)

2012年(9)

我的朋友

分类: LINUX

2016-04-16 20:56:14

C应用程序:

----------------------------------------

第一种方法:

 

下载交叉工具链:


下载之后是个bin文件,chmod 777,然后运行,你发现运行不成功,它会提示你怎么改.
之后再运行就成功了,是个图形界面的安装程序.

安装完之后,把环境变量设置好就可以了.

然后就是编译, adb push, 运行.

 

注意编译的时候一定要加--static:

arm-none-linux-gnueabi-gcc --static t.c -o t

 

否则运行时会提示:

/system/bin/sh: ./t: No such file or directory


就这么简单.

链接工具命名:
    arch-vendor-(os-)abi

1、arm-none-linux-gnueabi (ARM architecture, no vendor, linux OS, and the gnueabi ABI)
        用于编译ARM架构的u-boot、linux内核、linux应用等
2、arm-none-eabi 
        用于编译ARM架构的裸机系统(包括linux的 boot、kernel)
3、arm-eabi 
        Android ARM 编译器

 

第二种方法:

 

用android默认的环境.

/*
建立development/test/,然后创建Android.mk test.c
Android.mk内容如下。
然后在源码的根目录下执行:make test
*/
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := test.c
LOCAL_MODULE := test
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)
 
 
驱动程序:
----------------------------------------
hello.c
#include
#include
 
static int __init hello_init(void)
{
        printk("hellon");
 
        return 0;
}
 
static void __exit hello_exit(void)
{
        printk("exitn");
}
 
module_init(hello_init);
module_exit(hello_exit);
 
MODULE_AUTHOR("Sam");
MODULE_LICENSE("Dual BSD/GPL");
 
Makefile:
obj-m := modules.o
modules-objs := mod.o
KDIR := ../ep680/msm/
PWD := $(shell pwd)
 
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
        rm -rf Module.markers modules.order Module.symvers
 
 
如果执行有问题添加CROSS_ARCH试一下。
obj-m := mod.o
mod-objs := hello.o
#KDIR := /lib/modules/$(shell uname -r)/build
KDIR := ../ep680/msm/
CROSS_ARCH := ARCH=arm CROSS_COMPILE=/usr/local/arm-eabi-4.4.3/bin/arm-eabi-
PWD := $(shell pwd)
 
default:
        #$(MAKE) -C $(KDIR) M=$(PWD) modules
        $(MAKE) $(CROSS_ARCH) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
        rm -rf Module.markers modules.order Module.symvers
 
注意:如果在不用交叉编译器,而用gcc,指定的kernel include dir路径是/lib/modules下,那么
一定要用sudo make,否则会出一大堆错误。
阅读(2040) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~