Android编译命令m、mm、mmm区别及工程搭建示例

本文介绍了如何使用Android的mmm、mm和m命令进行模块编译,包括初始化环境、选择版型以及各命令的用法。同时提供了一个简单的呼吸灯PWM控制的C语言代码示例,展示了如何通过ioctl调用来设置占空比、周期和开关状态。编译时只需进入Android.mk所在目录执行mm命令或在SDK根目录下用mmm命令编译指定路径。这种方法能有效节省整体编译时间,便于调试。

要使用m、mm、mmm命令对Android代码进行模块编译,需要先执行如下命令初始化环境。

source build/envsetup.sh

lunch

执行lunch时一般会通过命令行提示选择版型,输入对应的序号回车即可。 

各命令作用及用法:

mmm命令:编译指定路径下的模块,需要指定模块路径(必须为该模块的根目录,包含Android.mk的目录)。

mm命令:编译当前目录下的模块,需要进到模块所在目录,本质上跟mmm没什么区别。

m命令:编译全部模块。

如下为一个简单呼吸灯PWM控制调用示例:

main.c

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>

typedef struct PWM_CONFIG_S{
    int duty_cycle;     //占空比
    int period;         //周期
    int enable_flag;    //开关
}PWM_CONFIG;


#define NODE_NAME "/dev/breathing_light"

int main(int argc, char *argv[])
{
    PWM_CONFIG pwm_config = {0};
    int fd = -1;
    int ret = -1;
    
    fd = open("/dev/breathing_light", O_RDWR);
    if(fd < 3)
    {
        printf("open %s fail!\n", NODE_NAME);
    }

    printf("please input params:[period duty_cycle enable_flag]:\n");
    printf("Example:1000000 500000 1\n");

    scanf("%d %d %d",&pwm_config.period, &pwm_config.duty_cycle, &pwm_config.enable_flag);
    printf("--- set period      ->%d\n",pwm_config.period);
    printf("--- set duty_cycle  ->%d\n",pwm_config.duty_cycle);
    printf("--- set enable_flag ->%d\n",pwm_config.enable_flag);
    ret = ioctl(fd, 0, &pwm_config);
    if(ret >= 0)
    {
        printf("control pwm: period:%d duty_cycle:%d %s success!\n",
            pwm_config.period,pwm_config.duty_cycle,pwm_config.enable_flag?"ON":"OFF");
    }
    else
    {
        printf("control pwm fail!!\n");
    }

    if(fd > 0)
        close(fd);
    return 0; 
}

Android.mk 

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := pwm_test
LOCAL_PROPRIETARY_MODULE := true
#ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_MODULE)
LOCAL_SRC_FILES := \
    main.c

LOCAL_SHARED_LIBRARIES := \
    libbase \
    liblog \
    libdl \
    libutils \
    libhardware 

include $(BUILD_EXECUTABLE)

工程编译:

进入到Android.mk 所在的目录下,执行mm命令,或者在SDK根目录下执行 mmm [Android.mk文件所在路径]  即可开始编译。

        这样编译的时间相对整包编译可以节省很多,调试时我们只需要将编译出来的可执行文件或者动态库文件替换到板子子上验证即可。 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值