ErBing

往事已经定格,未来还要继续。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、目的

1.1 充分了解开发板软硬件环境,为进一步的软件开发打下坚实的基础

1.2 能够建立主机与目标机(板)之间的传递数据的基本方法

1.3 能够烧写并运行启动代码(bootloader)

1.4 能够下载安装Linux内核到开发板

1.5 能够下载安装根文件夹系统到开发板

1.6 学会使用交叉平台编译器编译自己的程序并能够下载到目标版运行

二、内容

2.1 针对所选择的目标平台,简要介绍其

  • 平台简介(主要功能)

Raspberry Pi(中文名为“树莓派”,简写为RPi(或者RasPi / RPI)是为学 生计算机编程教育而设计,只有信用卡大小的卡片式电脑,其系统基于Linux。随着Windows 10 IoT的发布,我们也将可以用上运行Windows的树莓派。自问世以来,受众多计算机发烧友和创客的追捧,曾经一难求。别看其外表娇小,内却很强大,视频、音频等功能通通皆有,可谓是麻雀虽小,五脏俱全

  •  执行环境(硬件环境)

Win7系统笔记本电脑,vmware中安装ubuntu,树莓派

  • 运行环境(软件环境)

Ubuntu安装交叉编译链,ftp服务器,树莓派安装raspbian系统

2.2 建立host-target连接

2.3 烧写bootloader到目标系统(SD卡)

2.4 下载安装Linux内核到开发板

2.5 构建并测试开发板交叉编译器

三、过程

3.1 树莓派bootloader详解

    树莓派的系统启动流程不同于一般的arm cpu,一般的arm芯片都有一个内固的小程序在上电的时候加载bootloader,但是树莓派的BCM2836不同,BCM2836上电的时候首先初始化的是gpugpu设置好了系统的主频以及一些外设以后,再转到arm芯片模块的初始化.而树莓派所用的那个gpu是完全不开源的。即bcm2835内部固化了自己的bootloader来进行简单的初始化,相当于一个一级bootloader,而uboot是二级bootloader,直接由一级bootloader加载在内存中运行了,一级bootloader是在rom中,开发者无法修改。

    挂载SD卡后,调用我们放在sdboot分区里面的bootcode.bin到内存运行,再调用start.elf到内存,然后再启动GPU,GPU运行start.elf的程序,开始一系列的配置。再掉用kernel.imgLinux内核到内存。然后GPU再让这个arm11开始运行,也就是内核启动。

 

3.2 实验过程

Ubuntu安装git

 

建立raspberrypi文件夹。下载交叉编译工具链。

 

由于笔记本连无线网,两次尝试都在中间连接失败,导致无法下载完全,所以我直接从github下载好tools-master.zip,拷贝至Ubuntu解压安装(后来使用另一台式机使用git clone命令成功下载完tools)。

 

修改配置文件,将编译器所在地址加入环境变量中。

 

使用arm-linux-gnueabihf-gcc -v命令测试是否安装成功或配置成功。

 

使用source .bashrc命令来让配置立即生效。

由于树莓派本身固化了一级bootloader,我在网上未找到树莓派的单独的文件系统,加上烧写树莓牌bootloader资料偏少且本周部门去外地开年会个人时间较少,在这里直接将raspbian系统镜像烧至sd卡中。

 

系统启动之后,通过ssh来连接树莓派,成功。

 

编写一个简单的C程序,打印helloworld并测试浮点数功能。

 

交叉编译helloworld.c并连接到树莓派。

 

Ubuntu下安装ftp服务器,常用的是vsftpd。在这里搭建好ftp后,put命令拷贝到树莓派时出现一系列问题,导致没有成功。这里我也有个疑问,树莓派为什么不用安装ftpftp连接到树莓派再执行put,感觉方向是反的,网上搜索也并没得到相关答案,这一点我也将继续搞明白。所以,目前采用的方法是在win7下使用FileZilla这款ftp工具讲编译好的程序拷贝至树莓派中。

 

执行helloworld提示没有权限,修改权限后执行成功,结果正常,表明交叉编译链正常。

 

 

posted on 2016-05-23 09:51  ErBing  阅读(1140)  评论(0编辑  收藏  举报