当前位置: 首页 > news >正文

广州建设工程合同备案系统网站wordpress10大插件

广州建设工程合同备案系统网站,wordpress10大插件,石家庄市市政建设总公司网站,教育机构电商网站建设加盟笔记源自《朱老师物联网大讲堂》 《2.uboot和系统移植-第1部分-2.1.uboot学习前传》 第一部分、章节目录 2.1.1.为什么要有uboot 2.1.2.为什么是uboot 2.1.3.uboot必须解决哪些问题 2.1.4.uboot的工作方式 2.1.5.uboot的常用命令1 2.1.6.uboot的常用命令2 2.1.7.开发板和主机的…笔记源自《朱老师物联网大讲堂》 《2.uboot和系统移植-第1部分-2.1.uboot学习前传》 第一部分、章节目录 2.1.1.为什么要有uboot 2.1.2.为什么是uboot 2.1.3.uboot必须解决哪些问题 2.1.4.uboot的工作方式 2.1.5.uboot的常用命令1 2.1.6.uboot的常用命令2 2.1.7.开发板和主机的ping通 2.1.8.uboot的常用命令3 2.1.9.uboot的常用命令4 2.1.10.uboot的常用环境变量1 2.1.11.uboot的常用环境变量2 第二部分、章节介绍 2.1.1.为什么要有uboot 本节从计算机系统的启动过程讲起分析PC机、嵌入式系统等的启动过程通过分析让大家理解uboot在系统其中中扮演的重要角色。 2.1.2.为什么是uboot 本节课讲述uboot的来源和开发者uboot的特点和发展历程让大家明白uboot怎么样一步步发展而来理解它出现的必然性。 2.1.3.uboot必须解决哪些问题 本节分析uboot必须解决的一些问题这些问题也正是uboot中的主要代码 2.1.4.uboot的工作方式 本节主要介绍uboot的命令行工作方式重点强调了命令和环境变量这两个关键点。 2.1.5.uboot的常用命令1 本节开始介绍uboot的常用命令。首先讲了uboot命令的一些特征如行缓冲、命令别名、参数等然后讲了print命令。 2.1.6.uboot的常用命令2 本节讲述uboot常用命令中设置、保存环境变量的命令、ping命令。 2.1.7.开发板和主机的ping通 本节详细介绍开发板和主机windows、虚拟机ubuntu的ping通及设置。 2.1.8.uboot的常用命令3 本节继续介绍uboot的常用命令主要是tftp和nfs命令这两个命令都是uboot用来和主机进行网络连接获取文件相关的。 2.1.9.uboot的常用命令4 本节主要介绍了uboot操作iNand的movi命令和操作内存的mm、mw、md命令 2.1.10.uboot的常用环境变量1 本节总结了uboot的环境的原理和使用方法并以bootdelay等环境变量来演示这种使用效果。 2.1.11.uboot的常用环境变量2 本节主要讲解uboot的2个重要环境变量bootcmd和bootargs。 2.1.12.uboot中对Flash和DDR的管理 本节讲述uboot对Flash和DDR的分区管理其中最重要的是Flash的分区。 第三部分、随堂记录 2.1.1.为什么要有uboot 2.2.1.1、计算机系统的主要部件 (1)计算机系统就是有CPU来做核心进行运行的系统。典型的计算机系统有PC机台式机笔记本、嵌入式设备手机、平板电脑、游戏机、单片机家用电器像电饭锅、空调 (2)计算机系统的组成部件非常多不同的计算机系统组成部件也不同。但是所有的计算机系统运行时需要的主要核心部件都是3个东西CPU 外部存储器Flash/硬盘 内部存储器DDR SDRAM/SDRAM/SRAM 2.2.1.2、PC机的启动过程 (1)典型的PC机的部署BIOS程序部署在PC机主板上随主板出厂时已经预制了操作系统部署在硬盘上内存在掉电时无作用CPU在掉电时不工作。 (2)启动过程PC上电后先执行BIOS程序实际上PC的BIOS就是NorFlashBIOS程序负责初始化DDR内存负责初始化硬盘然后从硬盘上将OS镜像读取到DDR中然后跳转到DDR中去执行OS直到启动OS启动后BIOS就无用了 2.2.1.3、典型嵌入式linux系统启动过程 (1)嵌入式系统的部署和启动都是参考PC机的。只是设备上有一些差别 (2)典型嵌入式系统的部署uboot程序部署在Flash能作为启动设备的Flash上、OS部署在FLash嵌入式系统中用Flash代替了硬盘上、内存在掉电时无作用CPU在掉电时不工作。 (3)启动过程嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR初始化Flash然后将OS从Flash中读取到DDR中然后启动OSOS启动后uboot就无用了 总结嵌入式系统和PC机的启动过程几乎没有两样只是BIOS成了uboot硬盘成了Flash。 2.2.1.4、android系统启动过程 (1)android系统的启动和linux系统前面讲的典型的嵌入式系统启动几乎一样。几乎一样意思就是前面完全一样只是在内核启动后加载根文件系统后不同了。 (1)可以认为启动分为2个阶段第一个阶段是uboot到OS启动第二个阶段是OS启动后到rootfs加载到命令行执行现在我们主要研究第一个阶段android的启动和linux的差别在第二阶段。 2.2.1.5、总结uboot到底是干嘛的 (1)uboot主要作用是用来启动操作系统内核。 (2)uboot还要负责部署整个计算机系统。 (3)uboot中还有操作Flash等板子上硬盘的驱动。 (4)uboot还得提供一个命令行界面供人来操作。 2.1.2.为什么是uboot 2.1.2.1、uboot从哪里来的 (1)uboot是SourceForge上的开源项目 (2)uboot项目的作者一个德国人最早发起的项目 (3)uboot就是由一个人发起然后由整个网络上所有感兴趣的人共同维护发展而来的一个bootloader。 2.1.2.2、uboot的发展历程 (1)自己使用的小开源项目。 (2)被更多人认可使用 (3)被SoC厂商默认支持。 总结uboot经过多年发展已经成为事实上的业内bootloader标准。现在大部分的嵌入式设备都会默认使用uboot来做为bootloader。 2.1.2.3、uboot的版本号问题 (1)早期的uboot的版本号类似于这样uboot1.3.4。后来版本号便成了类似于uboot-2010.06。 (2)uboot的核心部分几乎没怎么变化越新的版本支持的开发板越多而已对于一个老版本的芯片来说新旧版本的uboot并没有差异。 2.1.2.4、uboot的可移植性的正确理解 (1)uboot就是universal bootloader通用的启动代码通用的意思就是在各种地方都可以用。所以说uboot具有可移植性。 (2)uboot具有可移植性并不是说uboot在哪个开发板都可以随便用而是说uboot具有在源代码级别的移植能力可以针对多个开发板进行移植移植后就可以在这个开发板上使用了。 2.1.2.5、总结时势造英雄任何牛逼的东西都是时代的产物 uboot的出现是一种必然如果没有uboot也会有另一个bootloader来代替。 2.1.3.uboot必须解决哪些问题 2.1.3.1、自身可开机直接启动 (1)一般的SoC都支持多种启动方式譬如SD卡启动、NorFlash启动、NandFlash启动等·····uboot要能够开机启动必须根据具体的SoC的启动设计来设计uboot (2)uboot必须进行和硬件相对应的代码级别的更改和移植才能够保证可以从相应的启动介质启动。uboot中第一阶段的start.S文件中具体处理了这一块。 2.1.3.2、能够引导操作系统内核启动并给内核传参 (1)uboot的终极目标就是启动内核。 (2)linux内核在设计的时候设计为可以被传参。也就是说我们可以在uboot中事先给linux内核准备一些启动参数放在内存中特定位置然后传给内核内核启动后会到这个特定位置去取uboot传给他的参数然后在内核中解析这些参数这些参数将被用来指导linux内核的启动过程。 2.1.2.3、能提供系统部署功能 (1)uboot必须能够被人借助而完成整个系统包括uboot、kernel、rootfs等的镜像在Flash上的烧录下载工作。 (2)裸机教程中刷机ARM裸机第三部分就是利用uboot中的fastboot功能将各种镜像烧录到iNand中然后从iNand启动。 2.1.2.4、能进行soc级和板级硬件管理 (1)uboot中实现了一部分硬件的控制能力uboot中初始化了一部分硬件因为uboot为了完成一些任务必须让这些硬件工作。譬如uboot要实现刷机必须能驱动iNand譬如uboot要在刷机时LCD上显示进度条就必须能驱动LCD譬如uboot能够通过串口提供操作界面就必须驱动串口。譬如uboot要实现网络功能就必须驱动网卡芯片。 (2)SoC级譬如串口就是SoC内部外设板级就是SoC外面开发板上面的硬件譬如网卡、iNand 2.1.2.5、uboot的“生命周期” (1)uboot的生命周期就是指uboot什么时候开始运行什么时候结束运行。 (2)uboot本质上是一个裸机程序不是操作系统一旦uboot开始SoC就会单纯运行uboot意思就是uboot运行的时候别的程序是不可能同时运行的一旦uboot结束运行则无法再回到uboot所以uboot启动了内核后uboot自己本身就死了要想再次看到uboot界面只能重启系统。重启并不是复活了刚才的uboot重启只是uboot的另一生 (3)uboot的入口和出口。uboot的入口就是开机自动启动uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务譬如烧录系统但是其他任务执行完后都可以回到uboot的命令行继续执行uboot命令而启动内核命令一旦执行就回不来了。 2.1.3.6、总结一切都是为了启动内核 2.1.4.uboot的工作方式 2.1.4.1、从裸机程序镜像uboot.bin说起 (1)uboot的本质就是一个裸机程序和我们裸机全集中写的那些裸机程序xx.bin并没有本质区别。如果非说要有区别那就是我们写的大部分小于16KB而uboot大于16KB一般uboot在180k-400k之间 (2)uboot本身是一个开源项目由若干个.c文件和.h文件组成配置编译之后会生成一个uboot.bin这就是uboot这个裸机程序的镜像文件。然后这个镜像文件被合理的烧录到启动介质中拿给SoC去启动。也就是说uboot在没有运行时表现为uboot.bin一般躺在启动介质中。 (3)uboot运行时会被加载到内存中然后一条指令一条指令的拿给CPU去运行。 2.1.4.2、uboot的命令式shell界面 (1)普通的裸机程序运行起来就直接执行了执行时效果和代码有关。 (2)有些程序需要和人进行交互于是乎程序中就实现了一个shellshell就是提供人机交互的一个界面回想ARM裸机全集第十六部分uboot就实现了一个shell。 注意shell并不是操作系统和操作系统一点关系都没有。linux中打开一个终端后就得到了一个shell可以输入命令回车执行。uboot中的shell工作方式和linux中的终端shell非常像其实几乎是一样的只是命令集不一样。譬如linux中可以lsuboot中ls就不识别 2.1.4.3、掌握uboot使用的2个关键点命令和环境变量 (1)uboot启动后大部分时间和工作都是在shell下完成的譬如uboot要部署系统要在shell下输命令、要设置环境变量也得在命令行地下要启动内核也要在命令行底下敲命令 (2)命令就是uboot的shell中可以识别的各种命令。uboot中有几十个命令其中有一些常用另一些不常用我们还可以自己给uboot添加命令后面会用几节课时间来依次学习uboot中常用命令。 (3)uboot的环境变量和操作系统的环境变量工作原理和方式几乎完全相同。uboot在设计时借助了操作系统的设计理念命令行工作方式借鉴了linux终端命令行环境变量借鉴了操作系统的环境变量uboot的驱动管理几乎完全照抄了linux的驱动框架。 (4)环境变量可以被认为是系统的全局变量环境变量名都是系统内置的认识就认识不认识就不认识这部分是系统自带的默认的环境变量譬如PATH但是也有一部分环境变量是自己添加的自己添加的系统就不认识但是我们自己认识。系统或者我们自己的程序在运行时可以通过读取环境变量来指导程序的运行。这样设计的好处就是灵活譬如我们要让一个程序更改运行方法不用去重新修改程序代码再重新编译运行而只要修改相应的环境变量就可以了。 (5)环境变量就是运行时的配置属性。 2.1.4.4、思考结合ARM裸机部分进行理解和印证 (1)及时复习ARM裸机中和现在讲到的相关的知识点在复习中巩固ARM裸机中学到的。这过程中如果原来学习记了笔记非常容易容易好如果没有记笔记那就难办了。 (2)及时对照原来ARM裸机中讲到的相关部分可以帮助理解当前讲到的知识点。 (3)结合ARM裸机中和现在讲的对比分析思考会得到更多。 2.1.5.uboot的常用命令1 2.1.5.1、类似linux终端的行缓冲命令行 (1)行缓冲的意思就是当我们向终端命令行输入命令的时候这些命令没有立即被系统识别而是被缓冲到一个缓存区也就是系统认为我们还没有输入完当我们按下回车键换行后系统就认为我们输入完了然后将缓冲区中所有刚才输入的作为命令拿去分析处理。 (2)linux终端设计有3种缓冲机制无缓冲、行缓冲、全缓冲 2.1.5.2、有些命令有简化的别名 (1)譬如printenv命令可以简化为print譬如setenv可以简化为set 2.1.5.3、有些命令会带参数注意格式是固定的 (1)uboot的每个命令都有事先规定好的各种格式。有些命令就是不带参数的譬如printenv/print命令有些命令带可选的参数可以带也可以不带当然带不带参数的执行结果是不同的有些命令带必须的参数譬如setenv/set命令 2.1.5.4、命令中的特殊符号譬如单引号 (1)uboot的有些命令带的参数非常长为了告诉uboot这个非常长而且中间有好多个空格的东西是给他的一整个参数所以用单引号将这个很长且中间有空格隔开的参数引起来。 (2)别的符号也许也有而且有特定的意义。当碰到uboot的命令行有特殊符号时要注意不是弄错了而是可能有特别的含义。 2.1.5.5、有些命令是一个命令族譬如movi (1)命令族意思就是好多个命令开头都是用同一个命令关键字的但是后面的参数不一样这些命令的功能和作用也不同。这就叫一个命令族。 (2)同一个命令族中所有的命令都有极大的关联譬如movi开头的命令族都和moviNandEMMC、iNand操作有关。 2.1.5.5、第一个命令printenv/print (1)print命令不用带参数作用是打印出系统中所有的环境变量。 (2)环境变量就好像程序的全局变量一样。程序中任何地方都可以根据需要去调用或者更改环境变量一般都是调用环境变量和全局变量不同之处在于全局变量的生命周期是在程序的一次运行当中开始运行时诞生程序结束时死亡下次运行程序时从头开始但是环境变量被存储在Flash的另一块专门区域Flash上有一个环境变量分区一旦我们在程序中保存了该环境变量那么下次开机时该环境变量的值将维持上一次更改保存后的值。 2.1.6.uboot的常用命令2 2.1.6.1、设置添加/更改环境变量setenv/set (1)用法set name value 2.1.6.2、保存环境变量的更改saveenv/save (1)saveenv/save命令不带参数直接执行作用是将内存中的环境变量的值同步保存到Flash中环境变量的分区。注意环境变量的保存是整体的覆盖保存也就是说内存中所有的环境变量都会整体的将Flash中环境变量分区中原来的内容整体覆盖。 总结彻底更改一个环境变量的值需要2步第一步set命令来更改内存中的环境变量第二步用save命令将其同步到Flash中环境变量的分区。 有时候我们只是想测试下这个环境变量不希望影响到下一次开机那就只set不save这样set后当前本次运行的uboot已经起效果了只不过没save下一次开机还是会恢复到原来的状况。 2.1.6.3、网络测试指令ping (1)命令用法 ping ip地址 注意ping是测试开发板和主机之间的网络链接注意以下步骤 1)首先要插上网线。 2)先试图ping通主机windows。注意Windows中有线网卡的地址设置设置本地连接。设置主机windows的本地连接IPv4地址为192.168.1.10 3)第三步确认开发板中uboot里几个网络相关的环境变量的值对不对。最重要的是ipaddr这个环境变量表示当前开发板的IP地址这个地址必须和主机windows的IP地址在同一个网段。 网段的概念一个IP地址分为2部分一部分是网段地址另一部分是网段内的主机地址由子网掩码来区分哪一部分是网段地址哪一部分是IP地址。在子网掩码是255.255.255.0的情况下192.168.1.10这个IP地址的前三部分192.168.1.属于网段地址第4部分10属于主机地址。 2.1.7.开发板和主机的ping通 上节课最后的结果是uboot中的ipaddr和主机windows本地连接地址已经设置到一个网段但是实际还ping不通。 还发现了这样的现象1、我把2个的网段都从192.168.1.x改到192.168.0.x时会ping通一次第二次开始就ping不通了2、有同学说ping不通可能是因为uboot中gatewayip没设置我就实际测试设置网管为同网段.1再次测试结论是第一次ping通了第二次开始又不通了。 2.1.7.1、开发板运行linux下和主机Windows的ping通 (1)先将开发板刷机成linuxQT镜像刷机见裸机教程第三部分然后启动进入linux命令行终端下。 (2)在linux下使用ifconfig命令将开发板中linux系统的IP地址设置为和主机windows同一网段为了上课方便以后就固定主机windows地址192.168.1.10开发板uboot或linux的地址为192.168.1.20虚拟机ubuntu地址为192.168.1.141 (3)此时开发板端ping windows通的。 (4)windows中ping开发板也是通的。 说明首先开发板和主机的网络部分硬件都是好的网络连接也是好的主机windows中的网络软件设置是好的。 2.1.7.2、开发板运行linux下和虚拟机ubuntu的ping通 (1)在linux基础课中讲过虚拟机的网卡设置可以选择好几种方式常用的就是NAT和桥接bridged。 (2)虚拟机要和开发板进行网络通信只能通过桥接方式连接。 (3)虚拟机要想被开发板ping通设置步骤如下 第一步虚拟机设置成桥接方式。 第二步虚拟机的菜单中有个“虚拟网络编辑器”这里面要设置为桥接到有线网卡。默认是自动的自动的一般会影响ping通。因为电脑现在一般都有2个网卡一个有线的一个无线的。如果选了自动那么虚拟机会自动桥接到无线网卡上但是我们却是通过有线网卡来连接开发板的自然ping不通 第三步在虚拟机ubuntu中设置IP地址为192.168.1.141可以通过/etc/network/interfaces文件来设置静态的然后重启也可以直接命令行ifconfig去设置 (4)此时开发板ping虚拟机ubuntu应该就通了。 (5)此时虚拟机ubuntu中ping开发板也是通的。 2.1.7.3、开发板运行uboot下和主机Windows的ping通 (1)刚才开发板运行linux时和主机windows、虚拟机ubuntu都ping通了说明硬件和连接和主机设置没错。 (2)此时开发板重启进入uboot设置好ipaddr、gatewayip然后去ping windows发现还是不通。 怀疑uboot本身网络驱动有问题。 (3)然后同样情况下尝试去ping通虚拟机ubuntu理论分析应该也不通但是实际发现是通的。 2.1.7.4、开发板运行uboot下和虚拟机ubuntu的ping通 (1)uboot和虚拟机ubuntu互相ping通前提是虚拟机ubuntu设置为桥接且桥接到有线网卡且ip地址设置正确的情况下 结论开发板中运行的uboot有点小bugping windows就不通ping虚拟机ubuntu就通。 2.1.8.uboot常用命令3 2.1.8.1、tftp下载指令tftp (1)uboot本身主要目标是启动内核为了完成启动内核必须要能够部署内核uboot为了部署内核就需要将内核镜像从主机中下载过来然后烧录到本地flash中。uboot如何从主机windows或者虚拟机ubuntu下载镜像到开发板上有很多种方式主流方式是fastboot和tftp。 fastboot的方式是通过USB线进行数据传输。 tftp的方式是通过有线网络的。典型的方式就是通过网络fastboot是近些年才新发展的。 (2)tftp方式下载时实际上uboot扮演的是tftp客户端程序角色主机windows或虚拟机ubuntu中必须有一个tftp服务器然后将要下载的镜像文件放在服务器的下载目录中然后开发板中使用uboot的tftp命令去下载即可。 (3)有些人习惯在windows中搭建tftp服务器一般是用一些软件来搭建譬如tftpd32使用起来比较简单有些人习惯在linux下搭建tftp服务器可以参考网盘中的虚拟机下载目录下的一个教程《嵌入式开发环境搭建-基于14.04.pdf》这里面有ubuntu中搭建tftp服务器的教程也可以自己上网搜索教程尝试。如果你直接就用我的虚拟机那就已经搭建好了不用再搭建了如果是自己新装的那就参考文档搭建如果你的版本和我的不一样那搭建过程可能不一样 (4)我的虚拟机搭建的时候设置的tftp下载目录是/tftpboot将要被下载的镜像复制到这个目录下。 (5)检查开发板uboot的环境变量注意serverip必须设置为虚拟机ubuntu的ip地址。serverip这个环境变量的意义就是主机tftp服务器的ip地址 (6)然后在开发板的uboot下先ping通虚拟机ubuntu然后再尝试下载tftp 0x30000000 zImage-qt意思是将服务器上名为zImage-qt的文件下载到开发板内存的0x30000000地址处。 (7)镜像下载到开发板的DDR中后uboot就可以用movi指令进行镜像的烧写了。 注意 1如果你是用的windows下的tftp服务器那uboot的serverip就要设置为和windwos下tftp服务器的ip地址一样windows下的tftp服务器软件设置的时候就有个步骤是让你设置服务器的ip地址这个ip地址和主机windows必须在一个网段。 2整个过程中间环节比较多实际做的时候可能最后会下载不下来。这时候可能的问题非常多不要问我自己对照视频课程讲的思路来排查。譬如第一步应该先保证uboot和ubuntu可以ping通第二步再保证ubuntu中tftp服务器搭建没错第三步再实现tftp下载。如果第一步有问题参考网络设置部分第二步有问题tftp本地测试下载ok但是开发板就是不行有一个解决方案就是使用windows下的tftp服务器 2.1.8.2、nfs启动内核命令nfs (1)uboot中也支持nfs命令但是我基本没用过。 2.1.9.uboot的常用命令4 2.1.9.1、SD卡/iNand操作指令movi (1)开发板如果用SD卡/EMMC/iNand等作为Flash则在uboot中操作flash的指令为movi或mmc (2)movi指令是一个命令集有很多子命令具体用法可以help movi查看。 (3)movi的指令都是movi read和movi write一组的movi read用来读取iNand到DDR上movi write用来将DDR中的内容写入iNand中。理解这些指令时一定要注意涉及到的2个硬件iNand和DDR内存。 (4)movi read {u-boot | kernel} {addr} 这个命令使用了一种通用型的描述方法来描述movi 和 read外面没有任何标记说明每一次使用这个指令都是必选的一对大括号{}括起来的部分必选1个大括号中的竖线表是多选一。中括号[]表示可选参数可以有也可以没有 (5)指令有多种用法譬如 movi read u-boot 0x30000000意思就是把iNand中的u-boot分区读出到DDR的0x30000000起始的位置处。uboot代码中将iNand分成了很多个分区每个分区有地址范围和分区名uboot程序操作中可以使用直接地址来操作iNand分区也可以使用分区名来操作分区。注意这里的0x30000000也可以直接写作30000000意思是一样的uboot的命令行中所有数字都被默认当作十六进制处理不管你加不加0x都一样。 2.1.9.2、NandFlash操作指令nand (1)理解方法和操作方法完全类似于movi指令 2.1.9.3、内存操作指令mm、mw、md (1)DDR中是没有分区的只听说过对硬盘、Flash进行分区没听说过对内存进行分区····但是内存使用时要注意千万不能越界踩到别人了。因为uboot是一个裸机程序不像操作系统会由系统整体管理所有内存系统负责分配和管理系统会保证内存不会随便越界。然后裸机程序中uboot并不管理所有内存内存是散的随便用的所以如果程序员使用uboot的人自己不注意就可能出现自己把自己的数据给覆盖了。所以你思考下我们为什么把uboot放在23E00000地址处 (2)md就是memory display用来显示内存中的内容。 (3)mw就是memory write将内容写到内存中 (4)mm就是memory modify修改内存中的某一块说白了还是写内存如果需要批量的逐个单元的修改内存用mm最合适 2.1.9.4、启动内核指令bootm、go (1)uboot的终极目标就是启动内核启动内核在uboot中表现为一个指令uboot命令行中调用这个指令就会启动内核不管成功与否所以这个指令是一条死路。 (2)差别bootm启动内核同时给内核传参而go命令启动内核不传参。bootm其实才是正宗的启动内核的命令一般情况下都用这个go命令本来不是专为启动内核设计的go命令内部其实就是一个函数指针指向一个内存地址然后直接调用那个函数go命令的实质就是PC直接跳转到一个内存地址去运行而已。go命令可以用来在uboot中执行任何的裸机程序有一种调试裸机程序的方法就是事先启动uboot然后在uboot中去下载裸机程序用go命令去执行裸机程序 2.1.10.uboot的常用环境变量1 2.1.10.1、如何理解环境变量 2.1.10.2、环境变量如何参与程序运行 (1)环境变量有2份一份在Flash中另一份在DDR中。uboot开机时一次性从Flash中读取全部环境变量到DDR中作为环境变量的初始化值然后使用过程中都是用DDR中这一份用户可以用saveenv指令将DDR中的环境变量重新写入Flash中去更新Flash中环境变量。下次开机时又会从Flash中再读一次。 (2)环境变量在uboot中是用字符串表示的也就是说uboot是按照字符匹配的方式来区分各个环境变量的。因此用的时候一定要注意不要打错字了。 2.1.10.3、自动运行倒数时间bootdelay 2.1.10.4、网络设置ipaddr serverip (1)ipaddr是开发板的本地IP地址 (2)serverip是开发板通过tftp指令去tftp服务器下载东西时tftp服务器的IP地址。 (3)gatewayip是开发板的本地网关地址 (4)netmask是子网掩码 (5)ethaddr是开发板的本地网卡的MAC地址。 2.1.11.uboot的常用环境变量2 2.1.11.1、自动运行命令设置bootcmd (1)uboot启动后会开机自动倒数bootdelay秒如果没有人按下回车打断启动则uboot会自动执行启动命令来启动内核。 (2)uboot开机自动启动时实际就是在内部执行了bootcmd这个环境变量的值所对应的命令集。 (3)bootcmdmovi read kernel 30008000; bootm 30008000 意思是将iNand的kernel分区读取到DDR内存的0x30008000地址处然后使用bootm启动命令从内存0x30008000处去启动内核。 (4)set bootcmd printenv然后saveenv然后重启则会看到启动倒数后自动执行printenv命令打印出环境变量。这个小实验说明开机自动执行了bootcmd。 (5)set bootcmd ‘movi read kernel 30008000; bootm 30008000’ 2.1.11.2、uboot给kernel传参bootargs (1)linux内核启动时可以接收uboot给他传递的启动参数这些启动参数是uboot和内核约定好的形式、内容linux内核在这些启动参数的指导下完成启动过程。这样的设计是为了灵活为了内核在不重新编译的情况下可以用不同的方式启动。 (2)我们要做的事情就是在uboot的环境变量中设置bootargs然后bootm命令启动内核时会自动将bootargs传给内核。 (3)bootargsconsolettySAC2,115200 root/dev/mmcblk0p2 rw init/linuxrc rootfstypeext3 意义解释 consolettySAC2,115200 控制台使用串口2波特率115200. root/dev/mmcblk0p2 rw 根文件系统在SD卡端口0设备iNand第2分区根文件系统是可读可写的 init/linuxrc linux的进程1init进程的路径 rootfstypeext3 根文件系统的类型是ext3 (4)内核传参非常重要。在内核移植的时候新手经常因为忘记给内核传参或者给内核传递的参数不对造成内核启动不起来。 2.1.11.3、新建、更改、删除一个环境变量的方法 (1)新建一个环境变量使用set var value (2)更改一个环境变量使用set var value (3)删除一个环境变量使用set var 2.1.11.4、注意环境变量更改后的保存 (1)修改完成环境变量后一定要保存否则下次开机更改就又没了。 2.1.12.uboot中对Flash和DDR的管理 2.1.12.1、uboot阶段Flash的分区 (1)所谓分区就是说对Flash进行分块管理。 (2)PC机等产品中因为大家都是在操作系统下使用硬盘的整个硬盘由操作系统统一管理操作系统会使用文件系统帮我们管理硬盘空间。管理保证了文件之间不会互相堆叠于是乎使用者不用自己太过在意分区问题。 (3)在uboot中是没有操作系统的因此我们对Flash相当于硬盘的管理必须事先使用分区界定实际上在uboot中和kernel中都有个分区表分区表就是我们在做系统移植时对Flash的整体管理分配方法。有了这个界定后我们在部署系统时按照分区界定方法来部署uboot和kernel的软件中也是按照这个分区界定来工作就不会错。 (4)分区方法不是一定的不是固定的是可以变动的。但是在一个移植中必须事先设计好定死一般在设计系统移植时就会定好定的标准是 uboot:uboot必须从Flash起始地址开始存放也许是扇区0也许是扇区1也许是其他取决于SoC的启动设计uboot分区的大小必须保证uboot肯定能放下一般设计为512KB或者1MB因为一般uboot肯定不足512KB给再大其实也可以工作但是浪费 环境变量环境变量分区一般紧贴着uboot来存放大小为32KB或者更多一点。 kernelkernel可以紧贴环境变量存放大小一般为3MB或5MB或其他。 rootfs······ 剩下的就是自由分区一般kernel启动后将自由分区挂载到rootfs下使用 总结一般规律如下 (1)各分区彼此相连前面一个分区的结尾就是后一个分区的开头。 (2)整个flash充分利用从开头到结尾。 (3)uboot必须在Flash开头其他分区相对位置是可变的。 (4)各分区的大小由系统移植工程师自己来定一般定为合适大小不能太小太小了容易溢出不能太大太大了浪费空间 (5)分区在系统移植前确定好在uboot中和kernel中使用同一个分区表。将来在系统部署时和系统代码中的分区方法也必须一样。 2.1.12.2、uboot阶段DDR的分区 (1)DDR的分区和Flash的分区不同主要是因为Flash是掉电存在的而DDR是掉电消失因此可以说DDR是每次系统运行时才开始部署使用的。 (2)内存的分区主要是在linux内核启动起来之前linux内核启动后内核的内存管理模块会接管整个内存空间那时候就不用我们来管了。 (3)注意内存分区关键就在于内存中哪一块用来干什么必须分配好以避免各个不同功能使用了同一块内存造成的互相踩踏。譬如说我们tftp 0x23E00000 zImage去下载zImage到内存的0x23E00000处就会出错因为这个内存处实际是uboot的镜像所在。这样下载会导致下载的zImage把内存中的uboot给冲掉。
http://www.pierceye.com/news/825428/

相关文章:

  • 永安市住房与城乡建设局网站腾讯邮箱企业邮箱入口登录
  • 手机和wap网站建设wordpress链接 数据库
  • 1688网站简介青岛网站建设系统
  • 优秀网站的特点wordpress 腾讯云oss
  • 深圳专业做网站公司怎么做网站跳转
  • 设计教学网站推荐重庆大渝网
  • 网站建设询价邀请函二级建造师报名的官网
  • 沈阳个人网站建设表白网站制作软件
  • 开封+网站建设+网络推广网站建设及托管合同模板
  • 怎么看公司网站建设的时间苏州展厅设计公司排名
  • 新电商平台电脑优化软件哪个好用
  • 个人可以建网站咨询公司简介
  • 关于网站开发怎么找到做外贸的国内公司
  • 国外优秀摄影作品网站互联网项目推广方案
  • icp网站备案查询美容整形网站建设
  • 广州网站建设八爪鱼湖南网络公司排名
  • 网站公司名称大全龙元建设集团有限公司网站
  • 网站开发技术可行性分析邢台建设企业网站
  • 有一个网站 人物模型可以做各种动作沈阳军成网站建设
  • h5移动网站开发南京企业自助建站系统
  • 开发一个企业网站报价wordpress副标题字数
  • 芜湖哪家公司做网站不错江宁网站建设方案
  • 做网站公司赚钱吗?百度搜索下载
  • 手机购物网站模版企业信息系统查询系统官网江苏
  • 礼品行业网站建设北京网站设计精选刻
  • 六安论坛网站WordPress ftp 媒体库子目录
  • 网站域名com和cn应用商店免费下载
  • 建设营销型网站多少钱比较好的网站建设网站
  • 学校网站的建设需求搜索引擎优化的缺点包括
  • 牛牛襄阳做网站郑州网站建设市场