Coder Social home page Coder Social logo

hello-apha-linux's People

Watchers

 avatar  avatar

hello-apha-linux's Issues

01.环境搭建

硬件环境

  • 正点原子alpha linux开发板/NXP i.max6ull/ARMv7
  • macos 11.1
  • virtualbox/ubuntu 20.04 server lts

连接

  • 通过micro-usb连接mac后提供了一个5v供电
  • 通过secureCRT通过serial连接开发板
  • 连接网线,默认dhcp

目前通过串口可以设置网络,然后ssh/scp可以打通macos, ubuntu和开发板

安装交叉编译环境

交叉编译就是在x86的机器上编译arm的可执行代码,就好比通过ardroid studio编译apk的过程。在x86上的arm工具链可以采用Linaro的solution。

从授权上,交叉编译链分为免费授权版和付费授权版。免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora。收费版有ARM原厂提供的armcc、IAR提供的编译器等等,因为这些价格都比较昂贵,不适合学习用户使用,所以不做讲述。

Linaro是ARM公司发起,其他做ARM SoC公司共同投资的一个非盈利组织。它的收入主要来自会员公司的会费,所以算是业界最为财大气粗的开源组织之一了。Linaro由一系列的开发组和项目组成,投资上由Board委员会控制,技术上由技术决策委员会控制(TSC),TSC会定期讨论需要成立什么项目,实现什么功能。然后分配到各个项目中。项目由Linaro的开发人员和成员公司的开发人员(称为Assignee)共同组成,根据项目要求,完成相应的开发,然后上传到Linaro自己维护的分支或者开源分支中(后者首选)。Linaro的开发成果,基本上开源。这就是为什么你看到比较实用的ARM解决方案都是Linaro提供的,因为它代表了ARM联盟的开源软件团队。一般来说,现在大部分软件都可以直接从主线下,他们直接就会支持ARM。但如果你要特定的新平台和新特性的支持,就可以从Linaro下。Linaro的解决方案现在主要聚焦在云解决方案,手机解决方案,边缘解决方案(现在叫雾解决方案,从原来的LNG,网络设备解决方案发展过来),IoT,AI等领域。Linaro另一个比较大的项目是96Board,主要工作是为ARM生态提供统一的开发板,让所有开发者“有ARM开发板可用”,最早提供的是海思的HiKey,现在已经成为Android AOSP项目的唯一的默认支持开发板。2018年香港的Linaro Connect上,Linaro宣布成立96Board.ai,一口气推出3块聚焦inference的AI开发板,分别来自瑞芯微,海思和Xilinx。Linaro Connect是Linaro每年两次的开发者聚会,一次在欧洲或者美洲,一次在亚洲。每次会有数百人参加,但参会费用不低(2500刀一个人),有兴趣的也可以直接看Youtube上的会议视频,那个不要钱,会有很多ARM领域的最新进展和讨论。

打开linaro官网, 在support/download中可以看到Linaro Toolchain,

  • arm-linux-gnueabihf: 32-bit Armv7 Cortex-A, hard-float, little-endian
  • armv8l-linux-gnueabihf: 32-bit Armv8 Cortex-A, hard-float, little-endian
  • aarch64-linux-gnu: 64-bit Armv8 Cortex-A, little-endian

注:

  • 关于arm arch可以参考学习 硬件和操作系统 - CPU (Day 1)
  • 不同arch/os对二进制可执行文件有不同的规范,x86/Windows下的PE(Portable Executable)和linux下的ELF(Executable and Linking Format)都源自COFF(Common Object File Format)
  • ABI(Application Binary Interface)和EABI(Embedded ABI)则是二进制调用规范
  • 最后的hf是指hard-float, 区分soft-float

进入下载页面,可以看到很多,选择gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]

  • arch: 体系架构,如ARM,MIPS(通过交叉编译工具生成的可执行文件或系统镜像的运行平台或环境)
  • vendor: 工具链提供商
  • os: 目标操作系统(host主要操作平台,也就是编译时的系统)
  • eabi: 嵌入式应用二进制接口(Embedded Application Binary Interface)

在ubuntu下载gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz到/usr/local/arm下,通过sudo tar -vxf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz解压缩后,在.zshrc中加入环境变量export PATH=$PATH:/usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin

~ arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/7.5.0/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: '/home/tcwg-buildslave/workspace/tcwg-make-release_1/snapshots/gcc.git~linaro-7.5-2019.12/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --with-system-zlib --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=hard --with-fpu=vfpv3-d16 --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/sysroots/arm-linux-gnueabihf --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabihf/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabihf --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: posix
gcc version 7.5.0 (Linaro GCC 7.5-2019.12) 

在ubuntu上新建hello.c

#include <stdio.h>

int main(void) {
  printf("hello world\n");
  return 0;
}

cross-comple

~ arm-linux-gnueabihf-gcc hello.c -o hello
~ ls
hello  hello.c
~ file hello
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=a3b7454711f45ef71fdaba36096350176bb1b4b3, with debug_info, not stripped

scp到开发板运行就能正常运行,这是一个非常好的开始。

参考阅读:

02.裸机点灯

load.imx

sudo dd if=load.imx of=/dev/disk2 bs=512 seek=2

需要跳开1024个bytes, 从0x400开始。

load.imx

~ stat -f '%Z Bytes' load.imx 
3524 Bytes

~ hexdump load.imx 
0000000 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87
0000010 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00
0000020 00 f0 7f 87 00 00 20 00 00 00 00 00 d2 01 e8 40
0000030 cc 01 e4 04 02 0c 40 68 ff ff ff ff 02 0c 40 6c
0000040 ff ff ff ff 02 0c 40 70 ff ff ff ff 02 0c 40 74
0000050 ff ff ff ff 02 0c 40 78 ff ff ff ff 02 0c 40 7c
0000060 ff ff ff ff 02 0c 40 80 ff ff ff ff 02 0e 04 b4
0000070 00 0c 00 00 02 0e 04 ac 00 00 00 00 02 0e 02 7c
0000080 00 00 00 30 02 0e 02 50 00 00 00 30 02 0e 02 4c
0000090 00 00 00 30 02 0e 04 90 00 00 00 30 02 0e 02 88
00000a0 00 0c 00 30 02 0e 02 70 00 00 00 00 02 0e 02 60
00000b0 00 00 00 30 02 0e 02 64 00 00 00 30 02 0e 04 a0
00000c0 00 00 00 30 02 0e 04 94 00 02 00 00 02 0e 02 80
00000d0 00 00 00 30 02 0e 02 84 00 00 00 30 02 0e 04 b0
00000e0 00 02 00 00 02 0e 04 98 00 00 00 30 02 0e 04 a4
00000f0 00 00 00 30 02 0e 02 44 00 00 00 30 02 0e 02 48
0000100 00 00 00 30 02 1b 00 1c 00 00 80 00 02 1b 08 00
0000110 a1 39 00 03 02 1b 08 0c 00 03 00 0b 02 1b 08 3c
0000120 01 48 01 44 02 1b 08 48 40 40 2c 30 02 1b 08 50
0000130 40 40 3e 34 02 1b 08 1c 33 33 33 33 02 1b 08 20
0000140 33 33 33 33 02 1b 08 2c f3 33 33 33 02 1b 08 30
0000150 f3 33 33 33 02 1b 08 c0 00 94 40 09 02 1b 08 b8
0000160 00 00 08 00 02 1b 00 04 00 02 00 2d 02 1b 00 08
0000170 1b 33 30 30 02 1b 00 0c 67 6b 52 f3 02 1b 00 10
0000180 b6 6d 0b 63 02 1b 00 14 01 ff 00 db 02 1b 00 18
0000190 00 20 17 40 02 1b 00 1c 00 00 80 00 02 1b 00 2c
00001a0 00 00 26 d2 02 1b 00 30 00 6b 10 23 02 1b 00 40
00001b0 00 00 00 4f 02 1b 00 00 84 18 00 00 02 1b 08 90
00001c0 00 40 00 00 02 1b 00 1c 02 00 80 32 02 1b 00 1c
00001d0 00 00 80 33 02 1b 00 1c 00 04 80 31 02 1b 00 1c
00001e0 15 20 80 30 02 1b 00 1c 04 00 80 40 02 1b 00 20
00001f0 00 00 08 00 02 1b 08 18 00 00 02 27 02 1b 00 04
0000200 00 02 55 2d 02 1b 04 04 00 01 10 06 02 1b 00 1c
0000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0000c00 c4 01 80 87 c4 01 80 87 00 00 0f e1 1f 00 c0 e3
0000c10 13 00 80 e3 00 f0 29 e1 20 00 1f e5 20 10 1f e5
0000c20 00 20 a0 e3 04 00 a0 e8 01 00 50 e1 fc ff ff da
0000c30 00 d0 1f e5 53 00 00 ea 00 00 20 80 41 1e 00 00
0000c40 00 61 65 61 62 69 00 01 14 00 00 00 05 37 2d 41
0000c50 00 06 0a 07 41 08 01 09 02 0a 04 00 4f f4 80 43
0000c60 4f f0 ff 32 c0 f2 0c 23 9a 66 da 66 1a 67 5a 67
0000c70 9a 67 da 67 c3 f8 80 20 70 47 00 bf 68 21 4f f4
0000c80 3d 72 4f f4 40 43 70 b4 c0 f2 09 23 05 26 41 f2
0000c90 b0 05 08 24 c0 f2 0e 21 c0 f2 0e 22 00 20 0e 60
0000ca0 15 60 5c 60 18 60 70 bc 70 47 00 bf 4f f4 40 43
0000cb0 c0 f2 09 23 1a 68 22 f0 08 02 1a 60 70 47 00 bf
0000cc0 4f f4 40 43 c0 f2 09 23 1a 68 42 f0 08 02 1a 60
0000cd0 70 47 00 bf 39 b9 4f f4 40 43 c0 f2 09 23 1a 68
0000ce0 42 f0 08 02 1a 60 70 47 82 b0 01 90 01 9b 5a 1e
0000cf0 01 92 00 2b fa d1 02 b0 70 47 00 bf 82 b0 01 90
0000d00 01 9b 5a 1e 01 92 53 b1 40 f2 ff 73 1a 46 01 3b
0000d10 00 2a fb d1 01 9b 5a 1e 01 92 00 2b f4 d1 02 b0
0000d20 70 47 00 bf 0c 21 50 22 4f f4 40 43 10 b4 c0 f2
0000d30 0a 23 05 24 c0 f2 29 22 c0 f2 29 21 41 f2 b0 00
0000d40 0c 60 10 60 5a 68 5d f8 04 4b 42 f0 02 02 5a 60
0000d50 1a 68 42 f0 02 02 1a 60 70 47 00 bf 01 28 09 d0
0000d60 38 b9 4f f4 40 43 c0 f2 0a 23 1a 68 42 f0 02 02
0000d70 1a 60 70 47 4f f4 40 43 c0 f2 0a 23 1a 68 22 f0
0000d80 02 02 1a 60 70 47 00 bf 04 f0 1f e5 91 01 80 87
0000d90 08 b5 ff f7 63 ff ff f7 71 ff ff f7 c3 ff ff f7
0000da0 85 ff 01 20 ff f7 da ff 4f f4 7a 70 ff f7 a6 ff
0000db0 ff f7 86 ff 00 20 ff f7 d1 ff 4f f4 7a 70 ff f7
0000dc0 9d ff ec e7                                    
0000dc4

烧好的tf卡,

~ sudo hexdump -n 4548 /dev/disk2
0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0000400 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87
0000410 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00
0000420 00 f0 7f 87 00 00 20 00 00 00 00 00 d2 01 e8 40
0000430 cc 01 e4 04 02 0c 40 68 ff ff ff ff 02 0c 40 6c
0000440 ff ff ff ff 02 0c 40 70 ff ff ff ff 02 0c 40 74
0000450 ff ff ff ff 02 0c 40 78 ff ff ff ff 02 0c 40 7c
0000460 ff ff ff ff 02 0c 40 80 ff ff ff ff 02 0e 04 b4
0000470 00 0c 00 00 02 0e 04 ac 00 00 00 00 02 0e 02 7c
0000480 00 00 00 30 02 0e 02 50 00 00 00 30 02 0e 02 4c
0000490 00 00 00 30 02 0e 04 90 00 00 00 30 02 0e 02 88
00004a0 00 0c 00 30 02 0e 02 70 00 00 00 00 02 0e 02 60
00004b0 00 00 00 30 02 0e 02 64 00 00 00 30 02 0e 04 a0
00004c0 00 00 00 30 02 0e 04 94 00 02 00 00 02 0e 02 80
00004d0 00 00 00 30 02 0e 02 84 00 00 00 30 02 0e 04 b0
00004e0 00 02 00 00 02 0e 04 98 00 00 00 30 02 0e 04 a4
00004f0 00 00 00 30 02 0e 02 44 00 00 00 30 02 0e 02 48
0000500 00 00 00 30 02 1b 00 1c 00 00 80 00 02 1b 08 00
0000510 a1 39 00 03 02 1b 08 0c 00 03 00 0b 02 1b 08 3c
0000520 01 48 01 44 02 1b 08 48 40 40 2c 30 02 1b 08 50
0000530 40 40 3e 34 02 1b 08 1c 33 33 33 33 02 1b 08 20
0000540 33 33 33 33 02 1b 08 2c f3 33 33 33 02 1b 08 30
0000550 f3 33 33 33 02 1b 08 c0 00 94 40 09 02 1b 08 b8
0000560 00 00 08 00 02 1b 00 04 00 02 00 2d 02 1b 00 08
0000570 1b 33 30 30 02 1b 00 0c 67 6b 52 f3 02 1b 00 10
0000580 b6 6d 0b 63 02 1b 00 14 01 ff 00 db 02 1b 00 18
0000590 00 20 17 40 02 1b 00 1c 00 00 80 00 02 1b 00 2c
00005a0 00 00 26 d2 02 1b 00 30 00 6b 10 23 02 1b 00 40
00005b0 00 00 00 4f 02 1b 00 00 84 18 00 00 02 1b 08 90
00005c0 00 40 00 00 02 1b 00 1c 02 00 80 32 02 1b 00 1c
00005d0 00 00 80 33 02 1b 00 1c 00 04 80 31 02 1b 00 1c
00005e0 15 20 80 30 02 1b 00 1c 04 00 80 40 02 1b 00 20
00005f0 00 00 08 00 02 1b 08 18 00 00 02 27 02 1b 00 04
0000600 00 02 55 2d 02 1b 04 04 00 01 10 06 02 1b 00 1c
0000610 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0001000 c4 01 80 87 c4 01 80 87 00 00 0f e1 1f 00 c0 e3
0001010 13 00 80 e3 00 f0 29 e1 20 00 1f e5 20 10 1f e5
0001020 00 20 a0 e3 04 00 a0 e8 01 00 50 e1 fc ff ff da
0001030 00 d0 1f e5 53 00 00 ea 00 00 20 80 41 1e 00 00
0001040 00 61 65 61 62 69 00 01 14 00 00 00 05 37 2d 41
0001050 00 06 0a 07 41 08 01 09 02 0a 04 00 4f f4 80 43
0001060 4f f0 ff 32 c0 f2 0c 23 9a 66 da 66 1a 67 5a 67
0001070 9a 67 da 67 c3 f8 80 20 70 47 00 bf 68 21 4f f4
0001080 3d 72 4f f4 40 43 70 b4 c0 f2 09 23 05 26 41 f2
0001090 b0 05 08 24 c0 f2 0e 21 c0 f2 0e 22 00 20 0e 60
00010a0 15 60 5c 60 18 60 70 bc 70 47 00 bf 4f f4 40 43
00010b0 c0 f2 09 23 1a 68 22 f0 08 02 1a 60 70 47 00 bf
00010c0 4f f4 40 43 c0 f2 09 23 1a 68 42 f0 08 02 1a 60
00010d0 70 47 00 bf 39 b9 4f f4 40 43 c0 f2 09 23 1a 68
00010e0 42 f0 08 02 1a 60 70 47 82 b0 01 90 01 9b 5a 1e
00010f0 01 92 00 2b fa d1 02 b0 70 47 00 bf 82 b0 01 90
0001100 01 9b 5a 1e 01 92 53 b1 40 f2 ff 73 1a 46 01 3b
0001110 00 2a fb d1 01 9b 5a 1e 01 92 00 2b f4 d1 02 b0
0001120 70 47 00 bf 0c 21 50 22 4f f4 40 43 10 b4 c0 f2
0001130 0a 23 05 24 c0 f2 29 22 c0 f2 29 21 41 f2 b0 00
0001140 0c 60 10 60 5a 68 5d f8 04 4b 42 f0 02 02 5a 60
0001150 1a 68 42 f0 02 02 1a 60 70 47 00 bf 01 28 09 d0
0001160 38 b9 4f f4 40 43 c0 f2 0a 23 1a 68 42 f0 02 02
0001170 1a 60 70 47 4f f4 40 43 c0 f2 0a 23 1a 68 22 f0
0001180 02 02 1a 60 70 47 00 bf 04 f0 1f e5 91 01 80 87
0001190 08 b5 ff f7 63 ff ff f7 71 ff ff f7 c3 ff ff f7
00011a0 85 ff 01 20 ff f7 da ff 4f f4 7a 70 ff f7 a6 ff
00011b0 ff f7 86 ff 00 20 ff f7 d1 ff 4f f4 7a 70 ff f7
00011c0 9d ff ec e7                                    
00011c4

注:

  • 4548=3524+1024

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.