android系统添加自己写的工具

    在android系统的源码有很多工具的源码。存放路径如下

    android/system 底层文件系统库、应用及组件,linux自带的
    android/external android 使用的一些开源的模组
    android/frameworks/base/cmds 一些android重要命令:am、app_proce等

    实际上这些工具都是小应用。调试串口接电脑,开启控制台可以使用这些工具。如果USB连电脑,用adb调试工具,输入adb shell指令进入控制台 。dumpsys:能dump系统服务的各种状态。
dumpstatus:android的相关信息,内核,进程,相关信息的主要实现地方
top:CPU使用
pm:包管理(package manager)
am:活动管理activity manager
tinyalsa:音频调试,有tinycap、tinymix、tinyplay
settings:更改SettingsProvider数据库的值
logcat:系统日志
monkey:测试工具
svc:控制电源、数据流量、wifi、usb、以太网的开关状态
wm:查看设置屏幕的分辨率、密度
screencap:截屏

screenrecord:录屏

    目标设备的system/bin和system/xbin有android添加的一些工具和linux自带的工具,这些工具可能是java、c、c++或shell指令写的。上面提到的几个工具都挺好玩的,具体使用方法可以输入参数--help查看帮助或者网上搜索。

欢迎来到我的网站wzjdy.cc

     这里介绍如何自己用c或者c++编写一个工具并且在android编译的时候加入到系统当中

一 编写一个测试ioctl接口的小工具

    创建文件夹frameworks/base/cmds/dytest

1.创建Android.mk文件

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
	test.c \

LOCAL_SHARED_LIBRARIES := \
    libcutils \
    liblog \

LOCAL_LDLIBS    :=-llog
LOCAL_MODULE:= dytest
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)

2.创建test.h

#include  
#include 
#include 

#ifndef IO_BASIC_H_  
#define IO_BASIC_H_  

#define  RD_UNIT_SIZE	1024
#define  WR_UNIT_SIZE	1024
#define  RDWR_UNIT_SIZE	1024
#define S_IRWXU 00700
#define S_IRUSR 00400
#define S_IWUSR 00200
#define S_IXUSR 00100

#define S_IRWXG 00070
#define S_IRGRP 00040
#define S_IWGRP 00020
#define S_IXGRP 00010

#define S_IRWXO 00007
#define S_IROTH 00004
#define S_IWOTH 00002
#define S_IXOTH 00001

#define SI4754_CMDMAGIC 0X81
#define usrdatatype  unsigned long
enum FM_CMD_TYPE{
		FM_START = _IOWR(SI4754_CMDMAGIC, 1, unsigned long),	
		FM_STOP,
		FM_SEEKUP,	
		FM_SEEKDOWN,
		FM_SETFREQ,
		FM_SETVOL,
		FM_GETFREQ,
		FM_GETVOL,
		FM_TEST
	};
/*  
 ============================================================================  
 Name        : IO_Operation.c  
 Author      : DongYi  
 Version     :  
 ============================================================================  
 */  
//以O_RDWR | O_CREAT | O_TRUNC,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH权限打开文件  
int open_file(const char* filename);  
//以O_RDWR | O_CREAT | O_TRUNC,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH权限打开文件  
int open_file_create(const char* filename) ;  
//以O_RDONLY,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH权限打开文件  

3.创建test.c

#include   
#include   
#include   
#include   
#include   
#include   
#include   
#include 
#include "test.h"  
unsigned long qndData;
const char* filename = "/dev/fmsi4754";   
  
int open_file(const char* filename) {  
    return open_file_create(filename);  
}  
  
int open_file_create(const char* filename) {  
    int fd; //文件描述符  
  
    fd = open(filename, O_RDWR | O_CREAT | O_TRUNC,  
            S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH);  
  
    if (fd == -1) {  
        printf("\nopen_file:文件操作失败");  
        return -1;
	}  
    printf("\nopen_file:文件操作成功");  
  
    return fd;  
}  
  
int main(void) {  
	int fp;
	int ret;
	char buf[1024]={0};
	long len;
	puts("~~~~~~~~~~test.c测试程序	Linux I/O操作~~~~~~~~~~~~\n\n"); /* prints Linux I/O操作 */  
//	for(len=64000;len>0;len--);
	sleep(1);
	fp = open_file_create(filename);
	if (fp < 0) {  
        printf("open_file:faild!\n");  
        return -1;  
    }else{
    	printf("open_file:success!\n");  
	}
	
	qndData=0x12345678;
	do{
		ret=ioctl(fp, FM_START, &qndData);
		printf("ioctl_file:qndData:0x%x\n ",qndData);  
		if (ret < 0) {  
			printf("ioctl_file:faild!\n");   
			close(fp);
			return -1; 
		}else{
			printf("ioctl_file:success\n");
		}
	}while(qndData==0x12345678);					//开机
    return 1;  
}  

    代码和编译规则文件准备好了,输入mmm frameworks/base/cmds/dytest/编译。烧录就可使用。

    这个工具还可以使用arm-linux-androideabi-gcc工具编译

arm-linux-androideabi-gcc -o dytest --sysroot=/home/android/SambShare/dyT3-v1.0/android/prebuilts/ndk/current/platforms/android-18/arch-arm/ test.c
    用这个方式编译的话就要把dytest工具push到android系统,然后修改权限。当然你也可以用android.mk文件拷贝dytest到system/bin目录下。


二添加android权限后门工具seustub

    这个工具是在网上下载的,不方便公布代码,博客android新版本中如何解决厂商应用的su权限,实际使用socket实现在控制台输入指令。

    获取seustub压缩包后解压seustub放置在external/文件夹

1.external/seustub/下创建Android.mk

include external/seustub/seustub/Android.mk
include external/seustub/seustubtest/Android.mk


2.创建external/seustub/seustub/Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
	seustub.cpp \
	util.cpp \

LOCAL_SHARED_LIBRARIES := \
    libcutils \
    liblog \

LOCAL_LDLIBS    :=-llog
LOCAL_MODULE:= seustub
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)

3.创建external/seustub/seustubtest/Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
	seustubtest.cpp \
	../seustub/util.cpp \

LOCAL_SHARED_LIBRARIES := \
    libcutils \
    liblog \

LOCAL_LDLIBS    :=-llog
LOCAL_MODULE:= seustubtest
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)


4.init.rc中添加启动服务

service seustub /system/bin/seustub  
    class main 

    最后输入mmm android/external/seustub编译

    使用方法是seustubtest +指令+参数,例seustubtest chmod 777 /dev/si4754
    公司的JAVA应用需要临时的root权限,还需要获取返回值判断指令的成功。因此删除seustubtest部分,为seustub添加了供上层调用的JNI接口,并且指令的返回结果输出到文件中。不做详细介绍。

    。。。。。。














你可能感兴趣的:(android,linux,工具,android,linux驱动,shell,源码,编译)