尝试向树莓派3B引入Drbian 9 arm64-PART 1
Stage 1:试图加入arm64软件包
笔者默认您清楚这些指令背后的意义以及其可能造成的后果,并默认您已备份重要资料
- sudo dpkg --add-archietcture arm64
- sudo apt update
尝试在树莓派上执行上述两条指令,结果如下(笔者的Raspbian已升级至Stretch):
- Get: https://mirrors.ustc.edu.cn/raspbian/raspbian stretch InRelease [15.0 kB]
- Get: https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease [22.9 kB]
- Get: https://mirrors.ustc.edu.cn/raspbian/raspbian stretch/main armhf Packages [11.7 MB]
- Get: https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie/main armhf Packages [163 kB]
- Fetched 11.9 MB in 1min 7s ( kB/s)
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- packages can be upgraded. Run 'apt list --upgradable' to see them.
- N: Skipping acquire of configured file 'main/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/raspbian/raspbian stretch InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'rpi/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/raspbian/raspbian stretch InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'main/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'non-free/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'contrib/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'ui/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'
易得:Raspbian里并没有arm64的软件包——至少没有索引文件……
笔者遂修改sources.list:
- deb https://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main rpi
- deb https://mirrors.ustc.edu.cn/debian/debian/ stretch main
并执行:
- wget https://mirrors.ustc.edu.cn/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2017.5_all.deb
- sudo dpkg -i debian-archive-keyring_2017.5_all.deb
- sudo apt update
得:
- Hit: https://mirrors.ustc.edu.cn/raspbian/raspbian stretch InRelease
- Hit: https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease
- Get: https://mirrors.ustc.edu.cn/debian stretch/main arm64 Packages [6,936 kB]
- Get: https://mirrors.ustc.edu.cn/debian stretch/main armhf Packages [6,925 kB]
- Get: https://mirrors.ustc.edu.cn/debian stretch/main Translation-en [5,395 kB]
- Fetched 19.3 MB in 1min 30s ( kB/s)
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- packages can be upgraded. Run 'apt list --upgradable' to see them.
- N: Skipping acquire of configured file 'main/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/raspbian/raspbian stretch InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'rpi/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/raspbian/raspbian stretch InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'main/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'non-free/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'contrib/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'
- N: Skipping acquire of configured file 'ui/binary-arm64/Packages' as repository 'https://mirrors.ustc.edu.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'
似乎是成功了……
然而,尝试选择安装一个arm64软件包,都会遇到不可描述的依赖问题:
- pi@raspberry:~ $ sudo apt install libc6:arm64 libgcc1:arm64
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- Some packages could not be installed. This may mean that you have
- requested an impossible situation or if you are using the unstable
- distribution that some required packages have not yet been created
- or been moved out of Incoming.
- The following information may help to resolve the situation:
- The following packages have unmet dependencies:
- bluez : Depends: libc6 (>= 2.15) but it is not going to be installed
- Depends: libdbus-- (>= 1.1.) but it is not going to be installed
- Depends: libglib2.- (>= 2.28.) but it is not going to be installed
- Depends: libreadline6 (>= 6.0) but it is not going to be installed
- Depends: libudev1 (>= ) but it is not going to be installed
- Depends: init-system-helpers (>= 1.18~) but it is not going to be installed
- Depends: kmod
- Depends: udev (>= -)
- Depends: dbus
- libgcc1:arm64 : Depends: gcc--base:arm64 (= 6.3.-) but it is not going to be installed
- E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
Stage 2:尝试在32位环境中执行64位程序
首先,口胡编写一个C程序,存为test64.c:
- #include <time.h>
- #include <stdio.h>
- long long fastpow_m(long long base,long long power,long long k)
- {
- long long result = ;
- while (power!=)
- {
- if (power% == )result = (result*base)%k;
- base = (base*base)%k;
- power /= ;
- }
- return result;
- }
- int main()
- {
- long long b,p,faq;
- long t1,t2;
- scanf("%lld %lld %lld",&b,&p,&faq);
- printf("%lld %lld\n",b,p,faq);
- t1 = clock();
- printf("result :%lld\n",fastpow_m(b,p,faq));
- t2 = clock();
- printf("fastpow_m(): %f s.\n",((double)(t2-t1)/(double)CLOCKS_PER_SEC));
- t1 = clock();
- long long r = ;
- for (int i=;i<=p;i++)r*=b,r = r%faq;
- printf("result :%lld\n",r);
- t2 = clock();
- printf("normal: %f s.\n",((double)(t2-t1)/(double)CLOCKS_PER_SEC));
- return ;
- }
(参加过NOI/NOIP/ACM之类竞赛的人一眼就能看出:这是一个模意义下的二分快速幂计算程序:))
安装交叉编译工具链并编译:
- sudo apt install gcc-aarch64-linux-gnu
aarch64-linux-gnu-gcc fastpow.c -static -o /tmp/test64
file /tmp/test64
/tmp/test64
得:
- /tmp/test64: ELF -bit LSB executable, ARM aarch64, version (SYSV), statically linked, for GNU/Linux 3.7., BuildID[sha1]=a8009a666be247cfdf0b6d7827a8099dee36f1ba, not stripped
- -bash: /tmp/test64: cannot execute binary file: Exec format error
看样子还是不行,我的程序白口胡写了……唉……
Stage 3:编译64位内核:
偶然间发现一篇旧的文章,阐述了自行编译内核的方法,笔者遂依葫芦画瓢编译内核。
至于编译内核用的工具链?
- sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
然后……
- git clone https://github.com/raspberrypi/linux.git
#4.12解决了VCHI和WiFi问题
git checkout rpi-4.12.y- cd linux
- #带##的是注释掉的原文指令
## make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig
- # 调整配置
# 详见 https://www.cnblogs.com/UMRNInside/p/7197656.html
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
- ## make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j $(nproc)
然后是就是漫长的等待(git clone 会产生1.54GiB的流量,消耗2G以上的磁盘空间;至于编译过程……我想大家都懂得。)
工具链来源(可选):
- sudo apt install gcc-aarch64-linux-gnu
接下来:
- #设SD卡根分区位于/mnt/ext4,boot分区位于/mnt/boot
- cp arch/arm/boot/Image mnt/fat32/kernel8.img
- make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/ext4 modules
- make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/ext4 modules_install
- mv /mnt/boot/bcm2710-rpi--b.dtb bcm2710-rpi--b.dtb_32
- cp arch/arm64/boot/dts/broadcom/bcm2710-rpi--b.dtb /mnt/boot
试着启动树莓派,一次成功,板载无线网卡以AP模式正常工作。
此时系统大部分组件仍为32位版本,RPi.GPIO无法正常使用,且无法使用硬浮点指令集(使用aarch64-linux-gnu-)。
尝试向树莓派3B引入Drbian 9 arm64-PART 1的更多相关文章
- 树莓派3B+上运行.Net Core项目
最近买了个树莓派3B+,准备把自己写的一个.Net Core爬虫挂在上面跑 买之前没有想到树莓派因为是今年新出的,导致驱动以及系统啥的都不是很完善,导致走了很多弯路,早知道买树莓派3就不用那么多折腾了 ...
- 树莓派3b+ Ubuntu 16.04 MATA系统 ssh远程登陆后修改主机名、用户密码和用户名
写在前面: 刚刚开始写博客,记录下自己的学习过程,备忘. 最近在使用树莓派做智能小车的开发,使用的是树莓派3b+,安装的是Ubuntu 16.04 MATA 系统,安装系统后需要修改主机名,登陆密码以 ...
- 树莓派3b安装Nginx和php7和百度语音合成模块
1.安装sox系统mp3音频播放模块(项目需要) sudo apt-get install lame sudo apt-get install sox sudo apt-get install lib ...
- [记录]学习树莓派3B接DHT11和LCD1602和修改树莓派时区
前提 树莓派系统安装好 apache web 服务器,如未安装,可在树莓派内执行sudo apt-get install apache2 进行安装apache 也可以通过命令获取GPIO信息: gpi ...
- Linux实现树莓派3B的国密SM9算法交叉编译——(二)miracl库的测试与静态库的生成
先参考这篇文章 Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署.简单测试与eclipse工程项目测试 部署好环境,并简单测试交叉编译环境是否安装成功,最后实现在Eclipse上进行 ...
- 树莓派3B+之Raspbian系统的安装
概述 因为之前一段时间在研究物联网的原因,所以对树莓派这个东西早就有所耳闻.在我的印象里,树莓派几乎无所不能,它可以用来学编程. 搞物联网. 做服务器,甚至还能用它来进行渗透测试.终于,没禁的住诱惑, ...
- 树莓派3B/3B+/4B 刷机装系统烧录镜像教程
树莓派3B/3B+/4B 刷机装系统烧录镜像教程 树莓派 背景故事 刚拿到树莓派的第一件事,应该就是要装系统了,那么应该怎么操作呢?下面就给大家介绍一下吧. 硬件准备 树莓派:3B/3B+/4B,本教 ...
- 树莓派3B上手一二
树莓派3B上手一二 早些时间心血来潮买过一个树莓派,但是当时只是玩一玩,买来按照网上的教程摆弄了一下就闲置了.最近毕业设计,做时序数据分析的相关的工作,刚好想起能够用到树莓派+Node-RED来生成模 ...
- 树莓派3B搭建NODE-RED运行环境并构建数据流
树莓派3B搭建NODE-RED运行环境并构建数据流 树莓派搭建Node-RED环境 树莓派自2015年开始是默认就带NODE-RED的,但是如今已是2018年:)自带的版本已经很老了,可通过下面的命令 ...
随机推荐
- 天方夜谈·数据结构·Queue
"我在想Y的时候不能想X....." 什么叫做Queue(队列)?"队列是项的集合,对于每一项x和y,如果x在y之前离开对头,那么x一定在y之前进入队列--Sesh·Ve ...
- 安卓和iOS移动APP开发设计应该考虑哪些问题
应该考虑哪些问题 现在用移动设备上网的用户越来越多,企业也可以从移动APP端挖掘潜在用户,想要设计好一款移动APP,我们需要考虑哪几个问题呢? 首先 我们应该先确认清楚企业的移动互联网战略目标是什么? ...
- python基本运算
环境:python3.x a,b = 60,164 一.算数运算符 操作符 描述 例子 + 加法 a+b = 224 - 减法 a-b = -104 * 乘法 a*b = 9840 / 除(保留小数位 ...
- 时间序列预测之--ARIMA模型
什么是 ARIMA模型 ARIMA模型的全称叫做自回归移动平均模型,全称是(ARIMA, Autoregressive Integrated Moving Average Model).也记作ARIM ...
- Java AOP (2) runtime weaving 【Java 切面编程 (2) 运行时织入】
接上一篇 Java AOP (1) compile time weaving [Java 切面编程 (1) 编译期织入] Dynamic proxy 动态代理 Befor talking abou ...
- Servlet,过滤器,监听器,拦截器的区别
1.过滤器 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml ...
- spring boot入门(一)自己动手搭建spring boot
spring boot官方文档 http://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/html/index.html 此篇文章 ...
- MyBatis之级联——一对一关系
在学数据库概论的时候会听到这么几个词:数据库的关系分为一对一.一对多.多对多.对于在学校里学的知识已经忘得差不多了,在这里简单的提一下数据库的关系.此篇是介绍MyBatis是如何实现数据库中一对一关系 ...
- 一次基于Vue.Js用户体验的优化
.mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...
- 《Android进阶》之第五篇 Fragment 的使用
http://blog.csdn.net/lmj623565791/article/details/37970961 1.Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的 ...