如何下载程序到linux单板,单板机上的LINUX,从零开始

2023-11-08 06:20

本文主要是介绍如何下载程序到linux单板,单板机上的LINUX,从零开始,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

单板机上的LINUX,从零开始

(2014-07-25 18:51:07)

标签:

it

linux

arm

beagleboard

beaglebone

过去单片机的SOC芯片,没有ROM,也没有RAM。ROM或FLASH,RAM,都是在板子上。加电重置后,CPU从一个固定的地址开始执行指令。那么将程序写入到单板机的FLASH上,对我来讲,就是一个无法逾越的障碍!因为这是用一个叫JTAG的机制,而我至今没有很明白它的机理!

最新的发展让我可以快速而便捷地摆弄单板机了。一些SOC芯片,本身带少量的ROM和RAM,启动开始,自带的ROM首先做些初始化的工作,这有点类似PC的BIOS。初始化的最后,它在一个FLASH分区上的FAT文件系统里,找一个固定名字的启动文件“MLO”。特别是,它可以从MMC卡上查找这个启动文件然后执行它。编译连接U-BOOT可以生成这个文件。

几年前开始单片机上的LINUX尝试,从零开始,生成了一套小的LINUX系统,运行在Beagleboard-xm上。止步于X11的编译。现在准备重新,依然从零开始,再生成一套小的LINUX系统,运行在Beaglebone

Black上。之所以要再一次重新开始,是因为LINUX内核对ARM单片机的支持,开始大规模使用Device Tree

Blog文件。这也是之前我尝试在Beagleboard-xm上使用更新的内核时,却发现忽然没有了对Beagleboard支持的原因。原来是改用通过Device

Tree指定设备,而不是用C文件的静态变量构建设备了!

在X86

PC机上生成单片机的执行文件,通常需要一套交叉编译的工具,通过它来生成单片机的执行代码。当然,如果使用X86架构的单片机,就无需使用交叉编译了。

用X86上的LINUX做为开发平台,对我来讲是最好的选择。尽管曾经也在WINDOWS平台做过些开发工作,但是还是喜欢UNIX的环境。特别是版本管理软件GIT,我认为它是目前业界最领先,功能最强大的开发版本管理工具,不是之一!

生成一套交叉编译工具,第一步,是生成操作目标代码的工具,如ld, nm, objcopy,

readelf和as(汇编)等等。这些工具,GNU有一套软件:binutils。大约是Binary

Utilities的缩写吧。

下载最新的版本,

2.24。通过configure脚本做好配置。配置项最重要的是:target,指定要操作的目标代码类型。对于ARM架构的SOC来讲,我选择:arm-elf-linux-gnueabi。前面三个不言自明:ARM架构,ELF格式,LINUX系统。GNUEABI,表示开源社区的一套ARM的二进制接口标准。EABI是Enhanced

ABI。之前ARM架构应该是有一套老的ABI,我并没有接触过。LINUX上生成ARM架构的目标代码,二进制遵守的标准叫: ARM

Procedure Call Standard (APCS).

另外一个必须指定的配置项是:--sysroot,它表示这套工具,其实就是ld,支持--sysroot这个选项。交叉编译环境里,需要指定目标代码的库,例如C库,和头文件。"--sysroot"就可以指定某个目录,拿它相当于目标机的根目录。这个目录下的构架,就如同一个机器的根目录一样。例如,

"usr/include"下包含头文件,"usr/lib"下包含库,等等。

配置完成后,用make编译和make install安装就可以生成一套binutils,它是交叉编译环境的基础。

生成Binutils的这一步,是最简单,最基础,也是最不容易出错的一步。下一篇介绍交叉编译器GCC的生成。

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

这篇关于如何下载程序到linux单板,单板机上的LINUX,从零开始的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/368309

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

Android多线程下载见解

通过for循环开启N个线程,这是多线程,但每次循环都new一个线程肯定很耗内存的。那可以改用线程池来。 就以我个人对多线程下载的理解是开启一个线程后: 1.通过HttpUrlConnection对象获取要下载文件的总长度 2.通过RandomAccessFile流对象在本地创建一个跟远程文件长度一样大小的空文件。 3.通过文件总长度/线程个数=得到每个线程大概要下载的量(线程块大小)。

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana