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

志愿北京网站注册展示型网站 带后台

志愿北京网站注册,展示型网站 带后台,wordpress文库管理,wordpress每页显示文章这篇文章是一个读者昨晚发给我的#xff0c;文章很长#xff0c;里面的细节也比较多#xff0c;但是微信公众号只能发 50000 字的文章#xff0c;如果想阅读全文。请发送「 uboot和Linux内核移植 」到公众号后台获取下载链接。这篇文章是一个读者昨晚发给我的#xff0c;文… 这篇文章是一个读者昨晚发给我的文章很长里面的细节也比较多但是微信公众号只能发 50000 字的文章如果想阅读全文。请发送「 uboot和Linux内核移植 」到公众号后台获取下载链接。这篇文章是一个读者昨晚发给我的文章很长里面的细节也比较多但是微信公众号只能发 50000 字的文章如果想阅读全文。请发送「uboot和Linux内核移植 」到公众号后台获取下载链接。一、uboot学习前传 11.1为什么要有uboot 11.1.1.计算机的主要部件 11.1.2 .PC机的启动过程 11.1.3.典型嵌入式linux系统启动过程 11.1.4. android系统启动过程 11.1.5.总结uboot到底是干嘛的 11.2 为什么是uboot 21.2.1 .uboot从哪里来 21.2.2 .uboot的发展历史 21.2.3. uboot的版本号问题 21.2.4. uboot的可移植性的正确理解 21.2.5.总结时势造英雄任何牛逼的东西都是时代的产物 21.3 uboot必须解决哪些问题 21.3.1.能自身开机直接启动 21.3.2.能引导操作系统内核启动并给内核传参 21.3.3.能提供系统部署功能 31.3.4.能进行SoC级和板级硬件管理 31.3.5.uboot的生命周期 31.4 uboot的工作方式 31.4.1.从裸机程序镜像uboot.bin说起 31.4.2.uboot的命令行式shell界面 41.4.3.掌握uboot使用的2个关键点命令和环境变量 41.4.4.思考结合ARM裸机部分进行理解和印证 41.5 uboot的常用命令 41.5.1.类似linux终端的行缓冲命令 41.5.2.有些命令有简化的别名 41.5.3.有些命令会带参数注意格式是固定的 51.5.4.命令中的特殊符号譬如单引号 51.5.5.有些命令是一个命令族譬如movi 51.5.6.第一个命令printenv/print 51.5.7.设置添加/更改环境变量setenv/set 51.5.8.保存环境变量的更改saveenv/save 51.5.9.网络测试指令ping 61.5.10.tftp下载指令tftp 61.5.11.SD卡/iNand操作指令movi 71.5.12.NandFlash操作指令nand 71.5.13.内存操作指令mm、mw、md 71.6 开发板和主机的ping通 81.6.1.开发板运行linux下和主机Windows的ping通 81.6.2.开发板运行linux下和虚拟机ubuntu的ping通 81.6.3.开发板运行uboot下和主机Windows的ping通 81.6.4.开发板运行uboot下和虚拟机ubuntu的ping通 91.7 uboot的常用环境变量 91.7.1.环境变量如何参与程序运行 91.7.2.自动运行倒计时bootdelay 91.7.3.网络设置ipaddr serverip 91.7.4.自动运行命令设置bootcmd 91.7.5.uboot给kernel传参bootargs 91.7.6.新建、更改、删除一个环境变量的方法 101.7.7.注意环境变量更改后的保存 101.8 uboot中对Flash和DDR的管理 101.8 .1.uboot阶段Flash的分区 101.8 .2.uboot阶段DDR的分区 11二、Shell和Makefile 112.1 Shell介绍 112.1.1.Shell是什么 112.1.2.shell概指一类编程语言在shell中用于编写程序的语言 112.1.3.shell脚本的运行机制解释执行没有编译和链接的过程 112.2 写shell程序 122.2.1.文本编辑器 122.2.2.shell程序的运行方法 122.2.3.shell程序注意事项 122.2.4.shell不神秘 122.3 shell编程学习 132.3.1.shell中的变量定义、初始化、赋值和引用 132.3.2.shell中无引号、单引号、双引号的区别 132.3.3.shell中调用linux命令 142.4 shell中的选择分支结构 142.5 shell中的循环结构 152.6 Makefile基础回顾 172.6.1.Makefile的作用和意义 172.6.2.目标、依赖、命令 172.6.3.通配符%和Makefile自动推导规则 182.6.4.Makefile中定义和使用变量 182.6.5.伪目标.PHONY 182.6.6.Makefile的文件名 182.6.7.Makefile中引用其他Makefileinclude指令 182.7 Makefile补充学习 182.7.1.Makefile中的注释 # 182.7.2.命令前面的用来静默执行 182.7.3.Makefile中几种变量赋值运算符 192.7.4.Makefile的环境变量 202.7.5.Makefile中的通配符 202.7.6.Makefile的自动变量 20三、零距离体验uboot 203.1 X210官方uboot配置编译实践 203.1.1.找到官方移植好的ubootBSP概念 213.1.2.在linux源生目录下配置编译 213.1.3.配置 213.1.4.编译得到uboot.bin 213.2 uboot的源码目录分析 223.2.1.九鼎官方uboot和三星原版uboot对比 223.2.2.各文件介绍 223.2.3.各文件夹介绍 233.3 SourceInsight的基本使用 253.3.1.为什么要使用SourceInsight 253.3.2.建立工程及添加文件 253.3.3.解析工程文件 263.3.4.常用技巧 26四、uboot配置和编译过程详解 264.1 uboot主Makefile分析 264.1.1.uboot version确定Makefile的24-29行 264.1.2.HOSTARCH和HOSTOS 264.1.3.静默编译50-54行 274.1.4.两种编译方法 274.1.5.OBJTREE、SRCTREE、TOPDIR 274.1.6.MKCONFIGMakefile的101行 274.1.7.include $(obj)include/config.mk133行 284.1.8.ARCH CROSS_COMPILE 284.1.9.$(TOPDIR)/config.mk主Makefile的185行 294.1.10.第一个目标all主Makefile的第291行 304.2 uboot配置过程mkconfig详解 304.3 uboot的u-boot.lds链接脚本 32五、uboot源码分析1-启动第一阶段 335.1 start.S的引入 335.1.1. u-boot.lds中找到start.S入口 335.1.2. SI中如何找到文件 335.1.3. SI中找文件技巧 335.2 start.S解析 335.2.1.不简单的头文件包含 345.2.2.启动代码的16字节头部 345.2.3.异常向量表的构建 355.2.4.有点意思的deadbeef 355.2.5.TEXT_BASE等 365.2.6.107行CFG_PHY_UBOOT_BASE 365.2.8.设置CPU为SVC模式149行 365.2.9.设置L2、L1cache和MMU 365.2.10.识别并暂存启动介质选择 365.2.11.设置栈SRAM中的栈并调用lowlevel_init 375.3 lowlevel_init.S解析 375.3.1.检查复位状态 375.3.2.IO状态恢复 375.3.3.关看门狗 385.3.4.一些SRAM SROM相关GPIO设置 385.3.5.供电锁存 385.3.6.判断当前代码执行位置 385.3.7.system_clock_init 395.3.8.mem_ctrl_asm_init 395.3.9.uart_asm_init 405.3.10.tzpc_init 405.3.11.pop {pc}以返回 405.4 回到start.S解析 405.4.1.再次设置栈DDR中的栈 405.4.2.再次判断当前地址以决定是否重定位 415.5 uboot重定位详解 415.6 start.S继续解析1 425.6.1.关于虚拟地址和物理地址 425.6.2.地址映射原理 435.6.3.什么是页表(转换表)呢 435.6.4.uboot中虚拟地址映射采用了段模式 435.6.5uboot中的映射页表 465.6.6.MMU单元的作用 465.6.7.地址映射的额外收益1访问控制 465.6.8.地址映射的额外收益2cache 465.7 start.S继续解析2 475.7.1.使能域访问cp15的c3寄存器 475.7.2.设置TTBcp15的c2寄存器 475.7.3.使能MMU单元cp15的c1寄存器 475.7.4.找到映射表待分析 485.8 start.S继续解析3 485.8.1.再三次设置栈 485.8.2.清理bss 485.8.3. ldr pc, _start_armboot 485.8.4.总结uboot的第一阶段做了哪些工作 49六、uboot源码分析2-启动第二阶段 506.1.start_armboot函数简介 506.1.2.一个很长的函数组成uboot第二阶段 506.1.3. 宏观分析uboot第二阶段应该做什么 506.1.4.思考uboot第二阶段完结于何处 506.2 start_armboot解析1 516.2.1. init_fnc_t 516.2.2. DECLARE_GLOBAL_DATA_PTR 516.3内存使用排布 526.3.1.为什么要分配内存 526.3.2.内存排布 526.3.3. uboot运行过程中的存储分布图解 526.4 start_armboot解析2 536.4.1. for循环执行init_sequence 536.4.2. int cpu_init(void) 556.4.3. int board_init(void) 556.4.4. int interrupt_init(void) 576.4.5. int env_init(void) 586.4.6. int init_baudrate(void) 596.4.7. int serial_init(void) 596.4.8. int console_init_f(void) 596.4.9. int display_banner(void) 596.4.10 int print_cpuinfo(void) 606.4.11. int checkboard(void) 606.4.12. int init_func_i2c(void) 616.4.13. int dram_init(void) 616.4.14. int display_dram_config(void) 616.4.15. CFG_NO_FLASH 616.4.16. 初始化堆管理器 mem_malloc_init 626.4.17. 开发板独有初始化mmc初始化 626.4.18. env_relocate 626.4.19. IP地址、MAC地址的确定 636.4.20. int devices_init (void) 636.4.21. void jumptable_init (void) 636.4.22. console_init_r () 636.4.23. void enable_interrupts (void) 646.4.24. loadaddr、bootfile两个环境变量 646.4.25. board_late_init (void) 646.4.26. int eth_initialize(bd_t *bis) 646.4.27. x210_preboot_init(void)LCD和logo显示 646.4.28. check menukey to update from sd 656.4.29. main_loopuboot的归宿 656.4.30. 启动过程特征总结 66七、uboot源码分析3-uboot如何启动内核 667.1 uboot和内核到底是什么 667.1.1. uboot是一个裸机程序 667.1.2.内核本身也是一个裸机程序 667.1.3.部署在SD卡中特定分区内 667.1.4.运行时必须先加载到DDR中链接地址处 677.1.5.内核启动需要必要的启动参数 677.2. 启动内核第一步加载内核到DDR中 677.2.1.静态内核镜像在哪里 677.2.2.镜像要放在DDR的什么地址 673.zImage和uImage的区别联系 677.3.1. bootm命令对应do_bootm函数 687.3.2. vmlinux和zImage和uImage 687.4 zImage启动细节 697.4.1. LINUX_ZIMAGE_MAGIC 697.4.2. image_header_t 697.5 uImage启动 707.6 do_bootm_linux函数 707.6.1.找到do_bootm_linux函数 707.6.2.镜像的entrypoint 707.6.3.机器码的再次确定 707.6.4.传参并启动概述 707.7传参详解 717.7.1. tag方式传参 717.7.2. x210_sd.h中配置传参宏 717.7.3.移植时注意事项 717.8 uboot启动内核的总结 71八、uboot源码分析4-uboot的命令体系 728.1 uboot命令体系基础 728.1.1.使用uboot命令 728.1.2. uboot命令体系实现代码在哪里 728.1.3.每个命令对应一个函数 728.1.4.命令参数以argcargv传给函数 728.2 uboot命令解析和执行过程分析 728.2.1.从main_loop说起 728.2.2关键点分析 738.3 uboot如何处理命令集1 738.3.1.可能的管理方式 738.3.2.命令结构体cmd_tbl_t 738.3.2. uboot实现命令管理的思路 748.4 uboot如何处理命令集2 748.4.1. uboot命令定义具体实现分析 748.4.2. find_cmd函数详解 758.5 uboot中添加自定义命令 768.5.1.在已有的c文件中直接添加命令 768.5.2.自建一个c文件并添加命令 76九、uboot源码分析5-uboot的环境变量 779.1 uboot的环境变量基础 779.1.1.环境变量的作用 779.1.2.环境变量的优先级 779.1.3.环境变量在uboot中工作方式 779.2.环境变量相关命令源码解析 789.2.1. printenv 789.2.2. setenv 799.2.3. saveenv 809.2.4. getenv 809.2.5. getenv_r 81十、uboot源码分析6-uboot的硬件驱动部分 8110.1 uboot与linux驱动 8110.1.2. uboot的虚拟地址对硬件操作的影响 8110.1.3. uboot借用移植了linux驱动 8110.2 iNand/SD驱动解析 8210.2.1.从start_armboot开始 8210.2.2. mmc_initialize 8210.2.3. cpu_mmc_init 8210.2.4. smdk_s3c_hsmmc_init 8210.2.5. s3c_hsmmc_initialize 8210.2.6. find_mmc_device 8310.2.7. mmc_init 8310.2.8. 总结 8310.2.9. struct mmc 8410.2.10.分离思想 8410.2.11.分层思想 84十一、uboot的移植1-从三星官方uboot开始移植 8411.1移植前的准备工作 8411.1.1.三星移植过的uboot源代码准备 8511.1.2. SourceInsight准备 8511.1.3.便捷的文件传输工具sshsecureshell 8511.2 ubuntu14.04上网及安装openssh 8511.2.1. ubuntu14.04上网问题 8511.2.2.搭建openssh环境 8611.3 移植初体验 8611.3.1.直接编译三星移植版uboot尝试运行 8611.3.2.代码分析问题查找 8611.4时钟和DDR的配置移植 8711.4.1.确认时钟部分的配置 8711.4.2. DDR配置信息的更改 8711.5 将DDR端口0地址配置为30000000开头 8711.4.1. DDR初始化参数更改 8711.4.2. smdkv210single.h中相关宏定义修改 8811.4.3.虚拟地址映射表中相应修改 8811.4.4.修改DMC0的配置参数 8811.4.5.修改修改虚拟地址到物理地址的映射函数 8911.5 iNand驱动问题的解决 8911.5.1.先从现象出发定位问题 8911.5.2.网络搜索解决方案 8911.5.3.尝试修改代码解决问题 8911.5.4.推测和实验验证SD卡和iNand的区别 9011.6 一些小问题的修补 9011.6.1控制台串口更换为串口0 9011.6.2修改默认网络地址设置 9011.6.3修改行提示符 9111.6.1总结 91一、uboot学习前传1.1为什么要有uboot1.1.1.计算机的主要部件(1)计算机系统就是由CPU来做核心进行运行的系统。典型的计算机系统有PC机台式机笔记本、嵌入式设备手机、平板电脑、游戏机、单片机家用电器像电饭锅、空调。(2)计算机系统的组成部件非常多 不同计算机的组成部件也不同。但是所有的计算机系统运行时都需要的主要核心部件都是3个东西CPU 外部存储器Flash/ 硬盘 内部存储器DDR SDRAM/ SDRAM/ SRAM。1.1.2 .PC机的启动过程(1)典型的PC机的部署BIOS程序部署在PC机主板上随主板出厂时就已经预制了操作系统部署在硬盘上内存在掉电时无作用CPU在掉电时不工作。(2)启动过程PC上电后先执行BIOS程序实际上PC的BIOS保存在NorFlash,BIOS程序负责初始化DDR内存负责初始化硬盘然后从硬盘上将OS镜像读取到DDR中然后跳转到DDR中去执行OS直到启动OS启动后BIOS就无用了。1.1.3.典型嵌入式linux系统启动过程(1)嵌入式系统的部署和启动都是参考的PC机的。只是设备上有一些差别。(2)典型嵌入式系统的部署uboot程序部署在Flash能作为启动设备的Flash上OS部署在Flash嵌入式系统中使用了Flash代替了硬盘内存在掉电时无作用CPU在掉电时不工作。(3)启动过程嵌入式系统上电后先执行uboot然后ubbot负责初始化DDR、初始化Flash然后将OS从Flash中读取到DDR中然后启动OSOS启动后uboot无用了。总结嵌入式系统和PC机的启动过程几乎没有两样只是BIOS成了uboot硬盘成了Flash。1.1.4. android系统启动过程(1)android系统的启动和linux系统前面讲的典型的嵌入式系统启动几乎一样。几乎一样意思就是前面完全一样只是在内核启动后加载根文件系统不同了。(2)可以认为启动分为2个阶段第一个阶段是uboot到OS启动第二个阶段是OS启动后到rootfs加载到命令行执行现在我们主要研究第一个阶段android的启动和linux的差别在第二阶段。1.1.5.总结uboot到底是干嘛的(1)uboot主要作用是用来启动操作系统内核的。(2)uboot还主要负责部署整个计算机系统。(3)uboot中还有操作Flash等板子上硬盘的驱动。(4)uboot还得提供一个命令行界面供人机交互。1.2 为什么是uboot1.2.1 .uboot从哪里来(1)uboot是SourceForge上的开源项目(2)uboot项目的作者是由一个德国人最早发起的(3)uboot就是由一个人发起然后由整个网络上所有感兴趣的人共同维护发展而来的一个BootLoader1.2.2 .uboot的发展历史(1)自己使用的小开源项目。(2)被更多人认可使用(3)被SoC厂商默认支持。总结uboot经过多年发展已经成为事实上的业内bootloader标准。现在大部分的嵌入式设备都会默认使用uboot来做为bootloader。1.2.3. uboot的版本号问题(1)早期的uboot的版本号类似于这样uboot1.3.4。后来版本号便成了类似于uboot-2010.06。(2)uboot的核心部分几乎没怎么变化越新的版本支持的开发板越多而已对于一个老版本的芯片来说新旧版本的uboot并没有差异。1.2.4. uboot的可移植性的正确理解(1)uboot就是universal bootloader通用的启动代码通用的意思就是在各种地方都可以用。所以说uboot具有可移植性。(2)uboot具有可移植性并不是说uboot在哪个开发板都可以随便用而是说uboot具有在源代码级别的移植能力可以针对多个开发板进行移植移植后就可以在这个开发板上使用了。1.2.5.总结时势造英雄任何牛逼的东西都是时代的产物uboot的出现是一种必然如果没有uboot也会有另一个bootloader来代替。1.3 uboot必须解决哪些问题1.3.1.能自身开机直接启动(1)一般的SoC都支持多种方式启动譬如SD卡启动、NorFlash启动、NandFlash启动等……  uboot要能够开机启动必须根据具体的SoC的启动设计来设计uboot(2)uboot必须进行和硬件相对应的代码级别的更改和移植才能够保证可以从相应的启动介质启动。uboot中第一阶段的start.S文件就是具体处理了这一块。1.3.2.能引导操作系统内核启动并给内核传参(1)uboot的终极目标就是启动内核(2)linux内核在设计的时候设计为可以被传参。也就是说我们可以在uboot中事先给linux内核准备一些启动参数放在内存中特定的位置然后传给内核内核启动后会到这个特定的位置去取uboot传给它的参数然后在内核中解析这些函数这些函数将来被用来指导linux内核的启动过程。1.3.3.能提供系统部署功能(1)uboot必须能够被人借助而完成整个系统包括uboot、kernel、rootfs等的镜像在Flash上的烧录下载工作。(2)裸机中刷机就是利用uboot中的fastboot功能将各种镜像烧录到iNand中然后从iNand启动。1.3.4.能进行SoC级和板级硬件管理(1)uboot中实现了一部分硬件的控制能力uboot中初始化了一部分硬件因为uboot为了完成一些任务必须让这些硬件工作。譬如uboot要实现刷机必须能驱动iNand譬如uboot要在刷机时LCD上显示进度条就必须能驱动LCD譬如uboot能够通过串口提供操作界面就必须驱动串口譬如uboot要实现网络功能就必须驱动网卡芯片。(2)SoC级譬如串口就是SoC内部外设板级就是SoC外面开发板上面的硬件譬如 网卡、iNand1.3.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命令而启动内核命令一旦执行就回不来了。总结 一切都是为了启动内核。扫码或长按关注回复「 篮球的大肚子」进入技术群聊
http://www.zqtcl.cn/news/21095/

相关文章:

  • wordpress获取站点链接wordpress 手机 自适应
  • 有个网站可以学做ppt网站设计制作什么时候好
  • 网站备案 主办单位备案网站的规则
  • 广东住房和城乡建设厅网站造价全网客源app
  • 个人如何建设电子商务网站成都中小企业申请网站
  • 政务网站系统免费seo视频教程
  • 做淘宝客网站要注意什么哪个网站可以用来做读书笔记
  • 浙江创业建设公司网站营销培训机构哪家最专业
  • 档案信息网站开发利用软文平台发布
  • 做个公司网站要多少钱鞍山市住房和城乡建设网站
  • 备案网站主办者承诺书友链交换平台
  • 河南省住房和建设厅门户网站有域名有空间怎么做网站
  • 旅游攻略网站免费可商用网站
  • 自己怎么建个网站专门做正品的网站
  • 有关网站开发的国外书籍网站建设服务商推荐
  • 教育类电商网站建设厅的工程造价网站
  • 哪些浏览器可以看禁止访问的网站增城网站建设怎么选择
  • 个人备案网站可以做新闻站吗哪个网站可以做投资回测
  • 辽宁省网站备案要求义乌市建设局网站
  • 电子商务网站建设收益工业设计手绘
  • 网站建设员注册域名后怎么建站
  • 成都龙泉网站建设佛山做网站费用
  • 用hexo做网站网络推广培训资料
  • 谷歌怎么建网站如何做企业官网
  • 建设工程查询市场价网站asp 绿色环保企业网站源码 v1.1
  • 中国国家住房和城乡建设部网站互联网网站建设方案
  • 网站备案中页面如何设置网站域名
  • 做网站是什么专业什么工作网站必须天天更新吗
  • 求一个做健身餐的网站广州网站建设(信科网络)
  • 美食网站素材wordpress动态页面