x86 平台编译的二进制包是否都不能运行在树莓派中
作者&投稿:鄣凯 (若有异议请与网页底部的电邮联系)
看你怎么学!
如果自学,只能养成好的学习习惯慢慢学,日积月累,终能学有所成的!不过自制力不好的人不建议自学。
如果要上培训机构学,建议:
课前预习
对于初学者来说尤其是零基础的同学,既然已经比那些有基础的同学差了一截,那么为什么不更加的努力去学呢?课前都会有课件或者书籍提前给到同学,可以自己利用课余时间预习一下,在预习的过程中肯定还会有自己解决不了的问题,先记录下来课上解决就好。
2.课上认真听课
在上课的时候讲师肯定不可能照顾到所有的同学,但是在讲课的时候每讲完一个知识点肯定会问到一个问题“都听懂了吗?”,想一下是不是你经历过的所有老师都有这个习惯?这个时候如果你有问题或者没听懂一定要及时去问,千万不要不懂装懂,否则后面你就会发现问题越来越多。
3.课下项目复习
课上讲过的东西不能光看会就够了,一定要自己亲自上手去实操一下看看,只有自己做的时候才知道到底学到什么程度,还有哪里没有掌握。
4.记笔记
好记性不如烂笔头,当你遇到解决不了的问题,自己可以找一个笔记本记录下来,课上老师讲的东西感觉不是很明白也要记下来,没事翻看一下避免以后再犯同样的错。
5.不用慌张
对于零基础的初学者刚开始学习的时候都会遇到听不懂听不明白的现象,因为确实你的基础水平很低,但是不要害怕听不懂是能理解的,就怕你听不懂之后就不认真学习了,主要你坚持学下去你会发现后面的知识学起来超级简单,就跟0到1和1到100的概念是一样的。
计算机编程语言:用于人与计算机之间通信的语言
linux:内核源码
tools:编译内核和其他源码所需的工具——交叉编译器等
我们只需要以上三个文件即可,下面的工程可以了解一下
documentation:树莓派离线帮助文档,教你如何使用、部署树莓派(树莓派官方使用教程)
userland:arm端用户空间的一些应用库的源码——vc视频硬浮点、EGL、mmal、openVG等
hats:Hardware Attached on Top,树莓派 B+型板子的扩展板资料
maynard:一个gtk写成的桌面环境
scratch:一个简易、可视化编程环境
noobs:一个树莓派镜像管理工具,他可以让你在一个树莓派上部署多个镜像
weston:一个应用程序
target_fs:树莓派最小文件系统,使用busybox制作
quake3:雷神之锤3有线开发源码firmwareb
2)下载方法:
a、网页直接下载:
点到所需要下载的工程,左上角选版本,右方有一个download ZIP按钮可直接下载(笔者下载完成后,在linux中解压提示出错,windows又非常慢切内核建议不要在windows环境解压,所以笔者不建议使用这种办法)
b、使用git下载
$ mkdir raspeberrypi_src
$ cd raspberrypi_src
$ git clone git://github.com/raspberrypi/firmware.git
$ git clone git://github.com/raspberrypi/linux.git
$ git clone git://github.com/raspberrypi/tools.git
会得到三个文件夹:
firmware linux tools
2、编译、提取内核及其模块
1)获得内核配置文件
在运行的树莓派中运行:
$ls /proc/
可看到一个叫config.gz的文件,他是当前的树莓派配置选项记录文件,我们将他拷出,放入我们的内核源码目录树下
$cp /proc/config /home/pi
我们这里使用前面交过的samba拷出并拷入内核源码目录下,不熟悉的人可参考前面文章
在linux内核源码下执行:
$zcat config.gz > .config
2)配置、编译内核
a、修改内核源码makefile ARCH类型和编译器路径
$vi Makefile +195
找到以上类似代码,改为如图所示
b、查看、修改配置选项
$make menuconfig
可出现以下界面
如果不做修改,直接选中exit即可(注意使用键盘操作)
c、编译内核镜像
$make
在arch/arm/boot目录下可以看到一个叫zImage的文件,就是我们新的内核
但是树莓派需要另外一种格式的镜像,需要进行处理一下,执行以下命令
$cd tools/mkimage
$./imagetool-uncompressed.py ../../linux/arch/arm/boot/zImage
即可在当前文件夹下看到一个叫:kernel.img的文件,就是我们需要的新内核了
d、提取modules
上一步其实不但编译出来了内核的源码,一些模块文件也编译出来了,这里我们提取一下
$cd raspberrypi_src
$mkdir modules
$cd linux
$ make modules_install INSTALL_MOD_PATH=../modules
即可在modules得到我们需要的模块文件
2、升级RPi的kernel、Firmware、lib
将SD卡拔下插在电脑上(可使用读卡器)
1)升级内核
将新编好的内核拷入SD卡,改名为:kernel_new.img
打开boot目录下
找到config.txt文件,加入:kernel=kernel_new.img这一行
2)升级boot
将firmware/boot/目录下 以下文件拷入SD卡boot目录:fbootcode.bin fixup.dat fixup_cd.dat start.elf
3)更新vc库及内核modules
将第3步d步中编译出来的modules/lib/modules拷入树莓派文件系统/lib下
庾滕克林: 二进制不兼容,源代码兼容,就是说x86和sparc上编译好的代码不通用,不能在另外一个平台上直接运行;但是可以使用同一源代码在各自的平台上进行编译运行.
泽普县18633939529: C语言是跨平台的么?如果是 那么C语言的跨平台特性和java的跨平台特性有什么不同? - ?
庾滕克林: 标准C和标准C++都是源代码级跨平台的, 也就是说你用标准C/C++写的代码在windows下编译后就可以windows下运行, 在unix/linux下编译后就可以在unix/linux下运行.c语言能跨平台主要因为各个平台包括DOS,Windows,Linux,UNIX等都有c编...
泽普县18633939529: 性能与兼容可否兼得 - ?
庾滕克林: 可以但要购买好一点的主板,因为全部的 东西全是安装在主板上的,主板还是不要太省钱.
泽普县18633939529: android上用什么访问nfs - ?
庾滕克林: 大部分Android应用都使用基于Dalvik Java代码开发.理论上,由于Dalvik代码在系统的虚拟机中执行,在x86的ATOM平台上不会有性能损失.但由于虚拟机执行效率的有限,对于一些高性能追求的应用,谷歌允许开发者使用原生的C语言代码.而原生代码是针对硬件平台编译,x86,ARM或是MIPS都有其相应的二进制文件. 通常来说,针对ARM平台编译的二进制代码,x86的处理器是无法直接运行的.而主流的安卓产品均采用ARM处理器,尽管很早之前,Google的Android NDK就引入了x86编译的选项,但至今还是有相当一部分应用只针对ARM平台进行了编译,这就造成了x86安卓平台兼容性问题.
泽普县18633939529: 32位系统怎么使用64位寄存器 - ?
庾滕克林: 64位系统是向下兼容的,64位平台其实是 x86(32 位)-64,也就是说在原有的 x86 平台上实现 64 位. x86-64 是站在 x86 的肩膀上的,并没有另起炉灶,CPU 指令长度(即指令占有的二进制位数)不变,原有的指令集也一律保留,所以 x86 和 ...
泽普县18633939529: x86二进制可以转换成arm二进制么? - ?
庾滕克林: 二进制是数学概念,你应该指的是二进制的程序代码,不同系列的处理器的二进制的程序代码完全不一样.二进制的程序代码程序代码在计算机科学里叫机器指令,没有机器指令的编程语言;比机器指令再高级一点的是汇编指令(与机器代码一一对应)助记符,形成汇编语言;比汇编语言再高级的常见编程语言有C,FORTRAN,basic,Pascal等等.把编写的高级语言程序转换成二进制的程序代码叫编译.目前还没有很成功的反汇编高级语言工具.
泽普县18633939529: 为什么java是解释型语言? - ?
庾滕克林: 需要虚拟机在实时解释java的字节码来运行.JVM虚拟机不是直接运行所在硬件架构的指令集比如x86.编译语言必须把源码编译成硬件的指令集,java不是,所以java是解释的.
泽普县18633939529: 为什么诺基亚n1Android兼容性不佳 - ?
庾滕克林: 1、诺基亚采用的是英特尔的处理器,使用的是x86的指令集,目前说来,大部分Android应用都使用基于Dalvik Java代码开发.理论上,由于Dalvik代码在系统的虚拟机中执行,在x86的ATOM平台上不会有性能损失.但由于虚拟机执行效率的有...
泽普县18633939529: gcc和arm - linux - gcc是什么关系?区别是什么? - ?
庾滕克林: gcc是linux系统下面用来将代码编译成一个可执行程序的手段.编译出来的是适用于linux系统的可执行二进制文件.可执行程序其实就是一堆的0101二进制机器码.这些机器码代表什么含义只有机器本身能理解.所以你用gcc编译出来的可执行...
泽普县18633939529: 关于android和x86的几点疑问. android基因linux内核,系统除了内核还有其他什么 - ?
庾滕克林: android 除了基于 Linux 内核,他的上层运行环境和相关函数库,命令程序都是自己的.其实 android 就是一个基于 Linux 内核的 JAVA 虚拟机环境.实际 Android 程序都是基于 JAVA 虚拟机跑的解释型语言程序.但解释型语言程序性能肯定不...