Cubietruck Ubuntu下安装Nand Boot Android详细教程

需积分: 9 2 下载量 104 浏览量 更新于2024-09-09 收藏 786KB PDF 举报
本文档详细介绍了如何在CubieTruck上通过Nand Boot方式安装Android系统,针对的是CubieTruck型号的A20处理器。以下是步骤详解: 1. 下载LiveSuit工具: 首先,你需要从官方文档站点下载适合你操作系统版本的LiveSuit安装包:<http://docs.cubieboard.org/tutorials/common/livesuit_installation_guide>。根据你的Ubuntu系统选择合适的软件版本,如Linux 64位。 2. 存放与解压LiveSuit: 将下载的LiveSuit文件复制到`/home`目录下,然后解压缩它。进入解压后的目录`LiveSuit_For_Linux64`并查看其内容。 3. 修改权限: 修改`LiveSuit.run`文件的执行权限,使用命令`chmod +x LiveSuit.run`,确保后续能以管理员权限运行。 4. 安装LiveSuit: 运行`./LiveSuit.run`进行安装。如果提示缺少dkms模块,对于Ubuntu用户,可以通过`sudo apt-get install dkms`命令进行安装;非Ubuntu用户可以使用`yum install`或从网络下载对应版本的dkms包。 5. 下载Android OS镜像: 下载适用于Cubietruck的Nand Boot Android镜像,链接为:<http://docs.cubieboard.org/tutorials/ct1/installation/cb3_a20-install_nand_boot_androi>。下载完成后,解压缩名为`ct-nand-v1.01-20140109.img.gz`的文件,得到`ct-nand-v1.01-20140109.img`。 6. 安装Android OS: 进入`~/Bin`目录,执行`dpkg -i awdev-dkms_0.5_all.deb`来安装必要的驱动支持。这一步是为了确保硬件兼容性。 7. 运行LiveSuit: 最后,回到`LiveSuit`目录,运行LiveSuit工具来进行Android系统的安装过程。 通过以上步骤,用户能够利用LiveSuit工具将Android系统安装在CubieTruck的Nand Boot分区,这将为CubieTruck提供一个额外的Android操作环境,便于进行不同应用的测试或者双系统切换。这个过程对CubieTruck的Linux用户特别有用,因为它涉及到底层操作系统的集成和管理。

int itcs_timer_irq(int idx, void *arg) { timer_priv_t *timer_priv = (timer_priv_t *)arg; uint32_t tempregisr = 0; switch (timer_priv->timeridx) { case 1: tempregisr = readl(timer_priv->base + TIMER_ISR_C1); // printf("BEFORE READ COUNT1 ISR STAT RET :%08x\n",tempregisr); if (GET_BIT(tempregisr, 4) == 1) { // printf("OVERFLOW INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_OVERFLOW_INTERRUPT; } if (GET_BIT(tempregisr, 0) == 1) { g_endtime = get_timer(0); // printf("INTERVAL INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_INTERVAL_INTERRUPT; } if (GET_BIT(tempregisr, 1) == 1) { g_endtimematch1 = get_timer(0); // printf("MATCH1 INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_MATCH1_INTERRUPT; } if (GET_BIT(tempregisr, 2) == 1) { g_endtimematch2 = get_timer(0); // printf("MATCH2 INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_MATCH2_INTERRUPT; } if (GET_BIT(tempregisr, 3) == 1) { g_endtimematch3 = get_timer(0); // printf("MATCH3 INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_MATCH3_INTERRUPT; } tempregisr = readl(timer_priv->base + TIMER_ISR_C1); // printf("AFTER READ COUNT1 ISR STAT RET :%08x\n",tempregisr); break; case 2: tempregisr = readl(timer_priv->base + TIMER_ISR_C2); // printf("BEFORE READ COUNT2 ISR STAT RET :%08x\n",tempregisr); if (GET_BIT(tempregisr, 4) == 1) { // printf("OVERFLOW INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_OVERFLOW_INTERRUPT; } if (GET_BIT(tempregisr, 0) == 1) { g_endtime = get_timer(0); // printf("INTERVAL INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_INTERVAL_INTERRUPT; } if (GET_BIT(tempregisr, 1) == 1) { // printf("MATCH1 INTERRUPT OCCUR\n"); g_endtimematch1 = get_timer(0); timer_priv->enum_interrupt = TIMER_MATCH1_INTERRUPT; } if (GET_BIT(tempregisr, 2) == 1) { g_endtimematch2 = get_timer(0); // printf("MATCH2 INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_MATCH2_INTERRUPT; } if (GET_BIT(tempregisr, 3) == 1) { g_endtimematch3 = get_timer(0); // printf("MATCH3 INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_MATCH3_INTERRUPT; } tempregisr = readl(timer_priv->base + TIMER_ISR_C2); // printf("AFTER READ COUNT2 ISR STAT RET :%08x\n",tempregisr); break; case 3: tempregisr = readl(timer_priv->base + TIMER_ISR_C3); // printf("BEFORE READ COUNT3 ISR STAT RET :%08x\n",tempregisr); if (GET_BIT(tempregisr, 4) == 1) { // printf("OVERFLOW INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_OVERFLOW_INTERRUPT; } if (GET_BIT(tempregisr, 0) == 1) { g_endtime = get_timer(0); // printf("INTERVAL INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_INTERVAL_INTERRUPT; } if (GET_BIT(tempregisr, 1) == 1) { g_endtimematch1 = get_timer(0); // printf("MATCH1 INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_MATCH1_INTERRUPT; } if (GET_BIT(tempregisr, 2) == 1) { g_endtimematch2 = get_timer(0); // printf("MATCH2 INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_MATCH2_INTERRUPT; } if (GET_BIT(tempregisr, 3) == 1) { g_endtimematch3 = get_timer(0); // printf("MATCH3 INTERRUPT OCCUR\n"); timer_priv->enum_interrupt = TIMER_MATCH3_INTERRUPT; } tempregisr = readl(timer_priv->base + TIMER_ISR_C3); // printf("AFTER READED COUNT3 ISR STAT RET :%08x\n",readregisr); break; default: break; } if (timer_priv->cb_event) { timer_priv->cb_event(timer_priv); } return 0; }

2023-02-17 上传