s5黑将u盘启动 (联想黑将s5设置u盘启动)

最近,在学习系统移植的相关知识程中,发现了很多问题,也解决了很多问题,但总是对我们的发展结果有一种莫名其妙的感觉,纠正原因,主要是对我们的发展环境没有深刻的了解,有时几个简单的命令可以完成非常复杂的功能,但是我们有没有想过为什么会有这样的效果?如果不提问,只是机械完成,看到实验效果,并没有真正掌握系统移植的本质。如果不提问,只是机械完成,看到实验效果,并没有真正掌握系统移植的本质。


每一步,先问问自己,为什么要这样做,再问问自己在做什么。了解这些问题,我觉得差不多。以后不管换什么平台,什么芯片,什么开发环境,都不会迷茫,很快就会上手。对于嵌入式学习方法,我个人的方法是:从宏观上把握(解决为什么的问题),从微观上研究(解决我在做什么的问题),以下是我自己学到的。arm-cortex_a以开发板为目标,介绍自己的学习方法和经验。


嵌入式Linux主要是系统移植四部分组成:


一.建立交叉开发环境
二、bootloader选择和移植
三、kernel配置、编译和移植
四、制作根文件系统
第一部分:构建交叉开发环境


首先介绍的内容:构建交叉开发环境,首先要考虑两个问题,什么是交叉环境? 为什么要建立交叉环境?


首先回答第一个问题,在嵌入式开发中,交叉开发是一个非常重要的概念,开发的第一个环节是建立环境,第一步不能完成,以下步骤从未开始,交叉开发环境主要指:在开发主机(通常是我的pc在目标机(通常是我们的开发板)上开发程序。嵌入式更特殊的是不能在目标机器上开发程序(狭义),因为对于原始开发板,它不能在没有任何程序的情况下运行,为了让它运行,我们也必须使用它pc机器进行烧录程序等相关工作,开发板可以在这里运行pc机器就是我们所说的开发主机,想想如果没有开发主机,我们的目标机器基本上是无法开发的,这是电子行业的一句名言:搞电子,说白了,就是玩电脑!


然后回答第二个问题,为什么需要交叉开发环境?主要原因如下:


原因1:嵌入式系统的硬件资源有很多限制,比如cpu主频相对较低,内存容量较小,想要数百MHZ主频的MCU去编译一个Linux kernel会让我们等待不耐烦,相对而言,pc机器速度更快,硬件资源更丰富,因此利用pc开发机器将提高开发效率。


原因2:嵌入式系统MCU不同的系统结构和指令集,因此需要安装交叉编译工具进行编译,以便在相应的平台上编译目标程序:ARM、MIPS、 POWEPC正常运行。


交叉开发环境的硬件组成主要由以下大部分组成


1.开发主机
2.目标机(开发板)
三、二者的链接介质,常用的方法有三种:(1)串口线 (2)USB线 (3)网线


对应的硬件介质,还必须有相应的软件介质支持:


1.对于串口,通常使用串口调试助手,putty工具等,工具多,功能相似,可以用一两个;
2.对于USB当然,必须有线USB一般芯片公司都会提供,比如三星芯片,USB下载主要由DNW软件完成;
3.对于网线,必须有网络协议主要有两种常用服务


第一:tftp服务:


主要用于下载文件,如开发和调试tftp把要测试的bootloader、kernel直接将文件系统下载到内存中,无需提前烧录Flash芯片中,一方面,在测试过程中,经常需要频繁下载,如果每次都烧录这些要测试的文件Flash然后运行也可以,但缺点是过程麻烦,Flash擦写次数有限;另一方面,测试的目的是将这些目标文件加载到内存中并直接运行,tftp所以,没有必要烧录所有这些文件Flash中去


第二:nfs服务:


主要用于实现网络文件的挂载,实际上是实现网络文件的共享,在开发过程中,通常在系统移植的最后一步,然后我们可以在开发主机上放置制作的文件系统PC开发板通过相应的位置nfs为了测试我们制作的文件系统是否正确,不需要在整个过程中烧录文件系统Flash而且挂载是自动挂载的,bootload启动后,kernel因此,运行后会根据我们设置的启动参数自动挂载,这种方法对开发测试非常方便,可以提高开发效率。


另外,还有一个名字叫samba服务也很重要,主要用于文件共享,这里说的是共享和nfs文件共享不是同一个概念,nfs共享是实现网络文件的共享,samba在开发主机上实现Windows主机和Linux虚拟机之间的文件共享,跨平台文件共享是一种,文件传输方便。


上述开发工具是嵌入式开发的必要工具,为提高嵌入式开发的效率做出了巨大贡献。因此,熟练使用这些工具将大大提高您的开发效率。测试完成后,将烧录相应的目标文件Flash在中间,也就是说,当产品发布时,所以对于开发人员来说,所有的工作总是一个测试。


通过之前的工作,我们准备了交叉开发环境的硬件部分和部分软件,最终缺乏交叉编译器。读者可能会想,为什么要使用交叉编译器?正如我前面所说,交叉编译工具将不可避免地用于交叉开发环境。一般来说,它是在一个平台上编译另一个可以在不同系统结构上运行的程序,并开发主机PC平台(X86 CPU)在以上编译可以运行ARM为内核的CPU在平台上编译的程序X86 CPU平台不能运行,必须放在平台上ARM CPU只能在平台上运行,虽然两个平台都在使用Linux系统。与交叉编译相比,通常的编译称为本地编译,即在当前平台上编译,编译程序也在本地执行。与交叉编译相比,通常的编译被称为本地编译,即在当前的平台上,编译程序也在本地执行。用于编译这个跨平台程序的编译器被称为交叉编译器。相对而言,用于本地编译的工具被称为本地编译器。因此,必须使用交叉编译工具链来生成在目标机上运行的程序。

还有一个问题,不就是交叉编译工具吗?为什么也叫交叉工具链?原因很简单。程序不能仅仅通过编译来运行。它还需要汇编和链接。同时,它还需要调试。对于一个大型项目,它还需要项目管理等。因此,在这里 交叉编译工具是由编译器、连接器和解释器综合开发环境,交叉编译工具链主要由交叉编译工具链组成binutils(主要包括汇编程序as和链接程序ld)、gcc(为GNU系统提供C编译器glibc(定义一些基本的C函数和其他函数) 三部分组成。有时是为了减少libc也可以使用其他库的大小 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。有时是为了减少libc也可以使用其他库的大小 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。

那么,如何获得交叉工具链呢?可以从网上下载一个程序然后安装吗?在回答这个问题之前,我们首先考虑这样一个问题。顾名思义,我们的交叉工具链是PC在我们的目标开发平台上,如ARM在操作程序上,这里还有另一个问题,我们的ARM有很多型号的处理器。有专门针对我们交叉工具链吗?如果是这样,你可以考虑一下。在这么多的处理器平台上,每个平台都定制了一个交叉工具链,并将其放在网络上供您下载。想想看,找到一个适合你的编译器可能需要很长时间。显然,这种做法不合理,浪费资源!因此,得到交叉工具链就像移植一样Linux核心,我们只关心我们需要什么,编译我们需要在我们的平台上运行,不需要我们不选择不编译,所以,交叉工具链生产方法和系统移植有很多相似之处,也就是说,交叉开发工具是支持许多平台的工具集(类似于Linux源码),然后我们只需要从这些工具中找到与我们平台相关的工具,那么如何找到与我们平台相关的工具,这涉及到如何制作交叉工具链。


通常有三种方法可以构建交叉工具链:


方法一 :交叉编译工具链所需的库和源代码分步编译和安装,最终生成交叉编译工具链。


通常有三种方法可以构建交叉工具链:


方法一 :交叉编译工具链所需的库和源代码分步编译和安装,最终生成交叉编译工具链。该方法相对困难,适合想要深入学习构建交叉工具链的读者。如果只想使用交叉工具链,建议使用以下方法2构建交叉工具链。





方法二:

通过Crosstool-ng脚本工具实现编译,生成交叉编译工具链,比方法简单得多,错误的机会很少。建议在大多数情况下使用这种方法来构建交叉编译工具链。







方法三 :

已制作的交叉编译工具链直接在线下载。不用说,这种方法的优点当然简单省事,但同时,这种方法的缺点是局限性太大,因为毕竟是别人建造的,也就是固定的,没有灵活性,所以建造使用的库和编译器的版本可能不适合你想要编译的程序,同时使用时可能会出现很多莫名其妙的错误。建议读者慎用这种方法。


crosstool-ng可制作适合不同平台的交叉编译工具链的脚本工具,制作前安装软件:$ sudo apt-get install g libncurses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk

crosstool可以使用脚本工具http://ymorin.is-a-geek.org/projects/crosstool下载到本地,然后解压,然后安装配置,类似于核心配置。主要过程如下:

1. 安装源码包路径和交叉编译器
2. 修改交叉编译器的框架

3. 为了提高运行效率,加快编译,增加编译过程中的并行进程数,因为编译速度会比较慢。4. 关闭JAVA编译器 ,减少编译时间5. 编译
6. 增加环境变量

7. 刷新环境变量。

4. 关闭JAVA编译器 ,减少编译时间

5. 编译6. 增加环境变量

7. 刷新环境变量。

8. 测试交叉工具链

到此,嵌入式Linux系统移植的第一部分是完成的,然后可以进行后续开发。

第二部分:bootloader选择和移植


一、Boot Loader 概念


是操作系统内核运行前运行的小程序。通过这个小程序,我们可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到适当的状态,为最终调用操作系统的核心准备正确的环境,这就是所谓的引导加载程序(Boot Loader)。

【图1】Flash存储存储文件的分布图


二、为什么系统移植前要移植?BootLoader?

BootLoader任务是指导操作系统。所谓指导操作系统,就是启动内核,让内核操作就是将内核加载到内存中RAM中 去运











































































































































电脑





电脑