在Android上实现SPI通信之(1)------在Ubuntu12.04环境下编译android源码

2023-11-01

作为一个Android应用开发者,突然接到一下需求,需要在应用层传递一个信号到外设,传递方式用SPI通信,没有做过,甚是头大,遇到了好多坑,所以记录成册,希望对后来的开发者,有那么一点点的帮助,如果有不正确的地方,还请指正。

目前我实现的大体思路是:

  1. 应用层传递一个数据到JNI层
  2. JNI层传递一个数据到HAL层
  3. HAL传递数据到kernel层
  4. kernel层通过SPI转CAN传递到外设

不过我们先从驱动层开始,在编写驱动之前需要一个编译环境,我选了Ubuntu,android源码我选了android4.4,现在开始动手。


准备工作
编译 Android 对机器的配置要求较高:

  • 64 位 CPU、
  • 16GB 物理内存+交换内存
  • 80GB 空闲的磁盘空间用于构建,源码树另外占用大约 8GB

安装JDK

sudo add-apt-repository ppa:webupd8team/java 
sudo apt-get update 
sudo apt-get install oracle-java6-installer

Ubuntu 12.04 软件包安装

sudo apt-get install git gnupg flex bison gperf build-essential \
 zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
 libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
 g++-multilib mingw32 tofrodos gcc-multilib ia32-libs \
 python-markdown libxml2-utils xsltproc zlib1g-dev:i386

安装 ARM 交叉编译工具链和编译内核相关软件包

sudo apt-get install gcc-arm-linux-gnueabihf \
lzop libncurses5-dev \
libssl1.0.0 libssl-dev

下载 Android4.4 SDK
androidSDK比较大,可以先用迅雷下载好之后再拷贝到Ubuntu上
我用的是瑞芯微的RK3288的开发板,所以我从他们的网站上下载了源码
百度网盘:https://pan.baidu.com/s/1o80DRsA
下载完成后先验证一下 MD5 码:

$ md5sum /path/to/firefly-rk3288_android4.4_git_20141211.tar.gz
8fe99f519d487ff40c8bc7b5ded62887  firefly-rk3288_android4.4_git_20141211.tar.gz

确认无误后,就可以解压:

mkdir -p ~/proj/firefly-rk3288
cd ~/proj/firefly-rk3288
tar xf /path/to/firefly-rk3288_android4.4_git_20141211.tar.gz

编译内核

cd ~/proj/firefly-rk3288/kernel
make firefly-rk3288_defconfig
make -j8 firefly-rk3288.img

编译 Android 源码

cd ~/proj/firefly-rk3288
sudo su
source build/envsetup.sh
make -j8

耐心等待几个小时之后就可以了。
过程中如果出现编译错误,可以先尝试一下再make -j8

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Android上实现SPI通信之(1)------在Ubuntu12.04环境下编译android源码 的相关文章

随机推荐

  • C++(一)#pragma once用法

    C 一 pragma once用法 用法 C C 中 在使用预编译指令 include的时候 为了防止重复引用造成二义性 ifndef ifndef CODE BLOCK define CODE BLOCK code endif CODE
  • Python OSError: symbol cublasLtHSHMatmulAlgoInit, version libcublasLt.so.11 not defined的解决

    问题与排查 原报错信息如下 OSError opt conda lib python3 8 site packages nvidia cublas lib libcublas so 11 symbol cublasLtHSHMatmulAl
  • 动态创建class

    需要引入命名空间 using System CodeDom using System CodeDom Compiler using Microsoft CSharp using System Reflection public static
  • ASP.NET中文显示乱码之解决方法

    ASP NET很灵活 这归功于它采用文本文件方式的配置方式 另外的那种用页面标识符的方法应该是从ASP延续下来的 写ASP 程序时候碰到中文显示问题 运行后发现ASP 从数据库中读出来的中文全部变成了 解决办法 方法一 在config we
  • 程序员眼中的流量卡:需求、选择与使用

    标题 程序员眼中的流量卡 需求 选择与使用 一 流量卡的需求分析 作为程序员 我们深知数据流量在我们的工作中的重要性 无论是开发 测试还是部署 亦或是远程工作 都需要网络的支持 使用流量卡可以为我们提供一种灵活 便携的网络解决方案 让我们可
  • 如何用java POI在excel中画线_Java中使用POI在Excel单元格中画斜线—XLS格式

    Excel主要有xls和xlsx两种格式 两种格式对应的POI接口使用方法也不同 本节主要介绍一下 在xls格式的Excel单元格中如何画斜线 1 初始化HSSFWorkbook对象 初始化HSSFWorkbook对象 创建两行两列单元格
  • 【React】Fiber 实现可中断的渲染

    什么是可中断的 渲染 参照我们在 Concurrent 的奥秘 中的同步渲染和并发渲染的例子 上图是同步渲染过程 上图是并发渲染过程 我们可以看到明显的区别 同步渲染 就是完整地执行了一个很耗时的渲染 并发渲染 将原本耗时的 渲染 拆解成了
  • Labelme标注工具 json文件批量转化 labelme_json_to_dataset 多个版本代码集合

    文章目录 一 Labelme标注工具安装 二 json文件批量执行转化 代码1 问题一 问题二 代码2 代码3 一 Labelme标注工具安装 https github com wkentaro labelme 安装过程按照github教程
  • 1.单例模式之饿汉式

    单例模式总结 特点 构造方法私有 提供一个全局访问点 实现方式 有很多 分四篇分别总结1 饿汉式 2 懒汉式 3 注册式 4 ThreadLocal 优点 内存中只有一个实例 减少内存开销 避免对资源多重占用 设置全局访问点 严格控制访问
  • 【IDEA】IDEA 下一些 编码技巧

    1 概述 转载 这样写代码 真是帅到没有朋友 转载记录一下 防止下次找不到了
  • 操作系统(OS)

    目录 1 计算机系统层次 2 操作系统 2 1 概念 2 2 作用 1 计算机系统层次 2 操作系统 2 1 概念 任何计算机系统都包含一个基本的程序集合 称为操作系统 OS 操作系统包括 内核 进程管理 内存管理 文件管理 驱动管理 其他
  • ajax实现下拉框联动

    spring mvc bootstrap 最近在做一个新闻不发布网站 网站栏目需要实现下拉框联动 因为没有用到前端框架 因此需要自己来写 废话不多说 思路是 跳转到新闻发布页面 需要初始化一级目录 RequestMapping releas
  • 使用ODBC连接SQL Server数据库进行增删查改操作全过程

    include
  • 开发工具~nuget配置本地源

    我们在本地部署了自己的nuget服务器 有时可以需要用到nuget restore命令去恢复包包 它会从下面的nuget config里读你的配置源信息 就是在这里 我们要把内测的nuget服务器路径添加上 这样就可以了 NUGET服务配置
  • 12V输入给三节锂电池充电芯片

    12V输入3A三节锂电池充电 可用于车载给PDA MP3 MP4 数码相机 PSP游戏机 笔记本等电子数码产品充电 2A多单元高效率开关充电器 概述 HU3208A是4 0V 23V输入 2A多单元同步降压型锂离子电池充电器 适用于便携式应
  • CH5-树和二叉树

    文章目录 5 1树和二叉树 5 1 1 树的定义 5 1 2基本术语 5 1 3二叉树的定义 5种基本形态 5 2案例引入 案例1 数据压缩问题 案例2 求解表达式的值 5 3抽象数据类型定义 5 4二叉树的性质 性质1 性质2 性质3 两
  • 数据结构与算法c语言版胡明课后答案,算法设计与分析(第2版) 王红梅 胡明 习题答案...

    O N x 2 O N 2 2 x a O N x a 2 O N 2 x x 2 a O N 2 a 1 x 由此可知 时间复杂度可达到O n 3 分治策略一定导致递归吗 如果是 请解释原因 如果不是 给出一个不包含递归的分治例子 并阐述
  • @PathVariable接收两个参数

    首先 PathVariable无法接收对象 但是可以接收多个值 var data obj data if obj event edit var tmpData encodeURI JSON stringify data layer open
  • vue_前后端分离-增删改操作

    增加操作和修改操作 两个操作放一个页面进行操作 使用插槽 scope row 的方式获取列表中的每一行数据
  • 在Android上实现SPI通信之(1)------在Ubuntu12.04环境下编译android源码

    作为一个Android应用开发者 突然接到一下需求 需要在应用层传递一个信号到外设 传递方式用SPI通信 没有做过 甚是头大 遇到了好多坑 所以记录成册 希望对后来的开发者 有那么一点点的帮助 如果有不正确的地方 还请指正 目前我实现的大体