开发板 iTOP 6818 调试手记

开发板 iTOP 6818 调试手记

最近项目需要,在做ARM 的 iTOP 6818 开发板调试。边看手册学习原理,边实践操作熟悉开发环境。

第一步,熟悉开发环境,学习烧写镜像文件。

iTOP 6818 的底层系统是Ubuntu 14.04,上层是Android 5.1。

在PC 上安装了虚拟机,再安装Ubuntu 14.04,生成镜像文件,

重启开发板,OTG 线连接到PC上。在超级终端里回车,进入uboot 模式,输入fastboot,进入OTG 模式。

PC 的fastboot 目录下,输入fastboot 。。。。,将6个镜像文件烧写到开发板上。

可以看到 开发板启动android 后的界面, 象一台安卓手机启动后的界面,心里就轻松了。

第二步,熟悉Android studio4.4.1,学习编译库文件和安卓软件。

PC 上安装JDK1.8 和Android studio4.4.1,配置环境参数。

先编译一个hello,moon !程序,下载到开发板上,显示出hello,moon!了。

由于买的屏幕是4.3 寸的,开始不习惯配置界面,耽误了一些时间。

备注:记得先将开发板设置为开发者模式和USB 调试模式,否则PC的ADB 设备显示不出来。也就是PC上无法和开发板建立联系,无法调试。

因为烧写手册上的镜像文件,可能会将USB 调试模式关闭了。

底层程序用C 语言,需要先在SDK-SDK tools里下载Cmake编译工具。

创建一个Native C++ 项目,例如 jnitest,语言选择Java(如果不选,会掉进坑里)。Minimum SDK 选Android 5.1,C++ 标准选C++ 11

1)在MainActivity 里,创建三个方法,分别对应打开、关闭、控制灯。

2)在native-lib.cpp 中,象C语言一样,添加头文件,写JNI 代码,实现打开、关闭、控制灯的控制。

#include <android/log.h>,为安卓打印调试信息的头文件。

设置灯的初始化状态 fd = 0;

点击编译,在默认路径下,可以看到生成的 project/app/build/cmake/obj/ armeabi-v7a/, so 库了。

3)打开 CMakeList.txt ,添加下面的一句设置平台对应的库文件: set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})   4)在 app 的 build.gradle里,配置 红色部分,这样只需要生成大多数情况下要用的 armeabi-v7a.so 、 arm64-v8a.so ,避免同时有两个 so 库文件。  

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.jnitest2"
        minSdkVersion 22
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11"
                abiFilters "armeabi-v7a"
                abiFilters "arm64-v8a"
            }
        }
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    packagingOptions {
     // pickFirsts:当出现重复文件,会使用第一个匹配的文件打包进入apk

        pickFirst 'lib/armeabi-v7a/libnative-lib.so'
        pickFirst 'lib/arm64-v8a/libnative-lib.so'
    }

}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

 

5)先删除 project/app/build/cmake/obj 目标文件,再点击build->make project,就可以看到新生成的两个 so 库文件libnative-lib.so。

关闭 project ,

6)创建一个新的基于 Empty Activity的上层应用Project Name testjni,包名一定要选择前面的Native C++ 项目的包名,例如com.example.jnitest,语言选择Java(如果不选,会掉进坑里)。Minimum SDK 选Android 5.1

创建成功后,将前面 生成的so库目录(即jnitest 里的jnilibs 目录)全部拷贝到 testjni/app/arc/main/ 

点击Android studio 的软件同步图标,右上角倒数第四个。同步完成后, 工程目录app/jnilibs 下就可以看到so 文件夹了。

7)在activity_main.xml 文件,点击code编辑界面,删除原有的text配置,设置俩个 button,代码如下:

<LinearLayout android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" android:gravity= "center" > <Button android:id= "@+id/button2" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "LED1 OFF" /> <Button android:id= "@+id/button1" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_marginTop= "87dp" android:text= "LED1 ON" /> </LinearLayout>

 

8)在MainActivity.java 里面引用这个库,添加以下代码:

import android.view.View;

import android.widget.Button;   static { System.loadLibrary( "native-lib" ); }   #声明led 灯的三个控制方法(和库文件声明的要相同): public native int LedOpen(); public native int LedClos(); public native int LedIoctl( int num, int en);  

 

# 声明 开、关 两个按键,并且在按键的点击事件里面打开设备节点和进行控制 led 灯的操作

private Button led1_on; private Button led1_off;   led1_on = (Button) findViewById(R.id.button1); led1_off = (Button) findViewById(R.id.button2); led1_on.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { LedOpen(); LedIoctl(1, 1); } }); led1_off.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { LedOpen(); LedIoctl(0, 0); } }); }   第三步,在开发板上运行安卓软件。  

将 开发板通过OTG 线连接PC。连接好以后,我们点击编译、运行。

就可以看到 led 控制软件 下载到开发板上,运行起来了,

点击界面中的按钮 LED on、 LED off,可以看到开发板的LED 亮和灭的状态了。

 

上一篇:iTop安装 vm虚拟机、Linux、centos7安装itop 2.6.1


下一篇:如何查询AD中被设置为密码永不过期的域用户账号?