1.超详细【Uboot驱动开发】(二)uboot启动流程分析
2.嵌入式开发和单片机开发有什么区别
3.Linux学习 - 编译Uboot
4.Coremark及几款RISC-V处理器的源码比较
5.总结uboot的重要概念,不知道的源码看过来
6.鸿蒙系统体验之在IMX6ULL上体验鸿蒙系统
超详细【Uboot驱动开发】(二)uboot启动流程分析
本文将深入解析Uboot(BL2阶段)的启动流程,BL1阶段的源码详细流程会在后续文章中分享。首先,源码我们来看Uboot的源码执行流程,以EMMC作为启动介质为例。源码素材空间源码 Uboot启动流程大致如下:首先打开u-boot.lds文件,源码它是源码Uboot工程的关键链接脚本,指定入口地址ENTRY(_start)。源码通过查找u-boot.lds文件(通常在源码目录下),源码可以理解程序的源码组装过程。 进入程序执行,源码board_init_f()函数在common/board_f.c中,源码负责调用init_sequence_f进行初始化,源码包括串口、源码定时器、设备树和DM驱动模型等,还包括global_data结构体初始化。其中,reloc_xxx函数实现重定向功能,将Uboot镜像移到高端内存以避免内存冲突。 重定向的必要性和过程包括:当内存不足时,Uboot会将自身镜像移动到DDR的其他位置。具体步骤包括在arch/arm/lib/crt0.S文件内的处理。setup_reloc函数帮助我们跟踪重定向后的地址,便于调试。 后续,board_init_r负责后置初始化,如外设信息的初始化。最后,执行run_main_loop和main_loop函数,main_loop是Uboot的核心,处理kernel加载、命令行交互和预定义命令等任务。kubectl源码分析 在main_loop中,bootdelay_process负责启动倒计时,cli_loop则负责命令行交互。通过理解这些关键步骤,我们对Uboot的启动流程有了全面认识。深入了解部分则可根据个人兴趣逐步探索。 如果有疑问或需要进一步讨论,欢迎在评论区交流。参考文章链接如下:[0]:优化阅读体验
[1]:board_init_f的详细介绍
[2]:启动流程参考
[3]:main_loop的相关内容
嵌入式开发和单片机开发有什么区别
嵌入式开发和单片机开发的区别:嵌入式开发和单片机开发都是与嵌入式系统相关的领域,但它们在范围和应用上存在一些区别。
1.定义:
嵌入式开发是一种软硬件协同设计的开发过程,用于创建嵌入式系统,这些系统通常包含嵌入式处理器、嵌入式操作系统和应用软件。嵌入式开发可以涉及多种硬件平台,包括单片机。
单片机开发更具体,通常指在单片机上进行软件开发的过程。单片机是一种集成了处理器、存储器和各种输入输出接口的微控制器。
2.范围:
嵌入式开发的范围更广泛,可以包括在各种嵌入式系统中使用的软件和硬件的开发。这包括嵌入式系统中的各种组件,例如传感器、通信模块、用户界面等。
单片机开发更专注于使用单片机进行软件开发,侧重于嵌入式系统中的中央处理器。
3.复杂性:
嵌入式开发的复杂性因项目而异。它可以涉及到大型嵌入式系统,其中包含多个处理器、多个设备和复杂的软件架构。
单片机开发通常相对简化,提供的源码因为它通常涉及一个小型、独立的微控制器,用于执行特定的任务。
4.应用领域:
嵌入式开发可应用于各种领域,包括汽车、医疗设备、工业自动化、智能家居等。它在需要嵌入式计算能力的任何地方都有应用。
单片机开发通常更常见于相对简单的嵌入式系统,如家用电器、小型传感器、遥控器等。
总体而言:
嵌入式开发是一个更广泛的概念,而单片机开发是嵌入式开发领域中的一个具体方面。选择嵌入式开发还是单片机开发取决于项目的规模、复杂性和应用领域。
以上内容是由猪八戒网精心整理,希望对您有所帮助。
Linux学习 - 编译Uboot
在Linux学习中,编译Uboot是一项重要的技术任务。首先,选择合适的平台,比如Ubuntu ..5 LTS版本,可以使用野火提供的虚拟机镜像,或者自行下载官方镜像进行搭建。
安装编译工具和依赖使用APT工具可以快速完成,为后续的编译工作奠定基础。随后,获取uboot下载源代码,野火提供的链接包括Gitee和GitHub,选择合适的下载途径。
查看并切换uboot分支,直播之间源码通常仓库中维护着不同版本的uboot,使用命令如"git checkout ebf_v__imx"进行切换。若需下载特定分支的uboot,可通过命令指定。
编译Uboot分为NAND版本和EMMC版本,以EMMC版本为例,首先需要修改defconfig配置文件,将"mx6ull_fire_mmc_defconfig"改为"mx6ull_fire_nand_defconfig"。编译完成后的u-boot-dtb.imx文件即为目标文件。
在编译过程中,可能会遇到问题,如编译错误或文件命名冲突。此时,参考相关解决方案,例如知乎上的文章,可以有效解决问题。正点原子出厂的u-boot编译步骤包括下载源代码、修改相关文件、加载配置、编译并确认环境变量正确设置等。
编译完成后,确保bootargs值中包含正确的参数,例如"rootwait",否则可能导致启动错误。正确的bootargs参数格式为"bootargs=root=/dev/mmcblk1p2 rwrootwait rootfstype=ext4 console=ttymxc0,"。
以上步骤构成了完整的Uboot编译过程,通过实践与不断学习,可以深入掌握Linux下的Uboot编译技巧。
Coremark及几款RISC-V处理器的比较
CoreMark基准测试是由EEMBC提出,用于评估单核处理器性能的简化工具。其测试包括浮点数、整数、缓存、港资指标源码内存等任务,以CoreMark/MHz表示测试性能,数值越高表示性能越强。CoreMark包含四个主要工作负载:列表处理、矩阵操作、状态机、CRC计算。与复杂基准测试相比,CoreMark更轻量级且易于实现,适合嵌入式处理器性能评估。
要运行Coremark,可从GitHub下载项目源码,网址为github.com/eembc/coremark。移植项目时,使用git下载源代码至本地,然后编译运行。若需交叉编译,需修改Makefile配置环境并编译。
接下来,我们将对比几款RISC-V处理器在CoreMark测试中的表现。不同处理器的CoreMark得分受到CPU性能、存储器访问速度、编译器选择等多种因素影响。
StarFive VisionFive 1
StarFive VisionFive 1基于SiFive U内核,包含两个KB(D)和KB(I)L1缓存的内核,以及2MB L2缓存。SiFive U支持RVGC,但不支持RISC-V矢量扩展。
实际CoreMark测试结果如下:
单核:X CoreMark/MHz
多核:Y CoreMark/MHz
Sipeed Licheepi 4A
Licheepi 4A采用TH主控核心,包含4xC@1.G内核,支持RVGCV、4TOPS@int8 NPU和GFLOP GPU。板载GB bit LPDDR4X,GB eMMC,支持双4K显示输出和4K摄像头接入。
实际CoreMark测试结果如下:
单核:X CoreMark/MHz
多核:Y CoreMark/MHz
算能SG
SG基于高性能RISC-V内核C,主频2GHz,单SOC处理器有核,配备MB系统缓存,展现出强大的多核性能。
实际CoreMark测试结果如下:
单核:X CoreMark/MHz
单cpu多核:Y CoreMark/MHz
Banana Pi BPI-F3
BPI-F3是一款工业级8核RISC-V开源硬件开发板,采用进迭时空(SpacemiT)K1 8核RISC-V芯片,集成2.0 TOPs AI计算能力。它具备4G DDR和G eMMC,支持2个GbE以太网接口、4个USB 3.0和PCIe M.2接口,支持HDMI和双MIPI-CSI摄像头。
实际CoreMark测试结果如下:
单核:X CoreMark/MHz
多核:Y CoreMark/MHz
横向对比
通过上述测试结果,我们可以对比不同RISC-V处理器在CoreMark测试中的表现。不同处理器在单核和多核性能上有显著差异,这受到处理器架构、缓存、核心数量、存储器访问速度等因素的影响。选择合适的RISC-V处理器时,需综合考虑其性能、功耗、成本和生态系统等因素,以满足特定应用需求。
总结uboot的重要概念,不知道的看过来
本篇内容不讲解uboot源码,只总结面试中高频问到的重要知识点。内容适用于嵌入式新人了解uboot,对老手有复习和查漏补缺的作用。
1、PC机启动:上电后,BIOS程序初始化DDR内存和硬盘,从硬盘读取OS镜像到DDR,跳转执行OS。
2、嵌入式Linux系统启动:上电后执行uboot,初始化DDR、Flash,将OS从Flash读到DDR,启动OS。
3、uboot定义与作用:uboot属于bootloader,作为单线程裸机程序,主要作用是初始化硬件、内存、flash等,引导内核启动。
4、uboot启动阶段(不同平台差异):MTK平台:boot rom -> preloader -> lk -> kernel;RK平台:bootrom -> spl(miniloader) -> uboot -> trust -> kernel;NXP平台:bootrom -> bl2 -> ATF -> uboot -> kernel。
5、uboot支持多种启动方式:SPI Flash/eMMC/Nvme/SD/Hard Disk/U-Disk/net。启动方式不同,固件存放位置也不同。
6、掌握uboot的关键点:命令和环境变量。uboot启动后大部分工作在shell中完成,命令用于操作,环境变量如bootcmd和bootargs,用于设置启动参数。
7、bootargs参数详解:root用于指定rootfs位置,console用于设置控制台,mem用于指定内核使用内存大小,ramdisk_size用于设置ramdisk大小,initrd用于指定initrd参数,init用于指定启动脚本,mtdparts用于设置分区。
8、常用bootargs组合:文件系统为ramdisk、jffs2类型、nfs等不同情况下的bootargs设置示例。
总结,了解uboot是嵌入式开发的基础,掌握其启动过程和关键参数,对提高开发效率和解决问题有重要作用。
鸿蒙系统体验之在IMX6ULL上体验鸿蒙系统
请先下载以下文件,里面含有烧写软件:
鸿蒙内核Liteos-a的官方代码目前只支持海思的芯片,我作为首批开发者入驻华为一个多月,成功在ASK_IMX6ULL上移植了Liteos-a。
本文先让大家体验一下Liteos-a,后续会发布教程、视频、源码。
百问网开发了一款烧写软件:ask_imx6ull_flashing_tool,它的界面如下:
使用这软件,只需要一条USB线连接电脑和开发板USB OTG口,只需要点击一个按钮就可以体验鸿蒙系统。
1.1 熟悉ASK_IMX6ULL启动开关1.1.1 全功能版
ask_imx6ull全功能版支持USB、EMMC、SD/TF卡三种启动方式。使用后2种启动方式之前,需要先在EMMC或SD/TF卡上烧写系统。
板子背后画有一个表格,表示这3种方式如何设置。表格如下:
BOOT CFG
这3种启动方式的设置示意图如下:
其中的USB启动模式主要用来烧写系统。 注意:设置为USB启动时,不能先插上SD/TF卡。
1.1.2 MINI EMMC版
百问网 IMX6ULL EMMC版支持USB、EMMC、SD/TF卡三种启动方式。使用后2种启动方式之前,需要先在EMMC或SD/TF卡上烧写系统。 板子背后画有一个表格,表示这3种方式如何设置。表格如下:
这3种启动方式的设置示意图如下:
其中的USB启动模式主要用来烧写系统。 注意:设置为USB启动时,不能先插上SD/TF卡。
1.2 安装驱动程序
下载“ask_imx6ull烧写工具v4.zip” 后,把它解压可得如下目录:
运行上图中的程序。
1.2.2 连接USB OTG线
先把开发板设置为USB启动方式,接好2条USB线,开发板上电。
(1) 全功能版接线方式
(2) MINI EMMC版接线方式
1.2.3 安装IMX6ULL的USB驱动程序
通过USB下载或是烧写程序时,需要把开发板的OTG口用USB线连接到电脑。一般都会自动安装驱动,烧写软件的绿灯不亮时,则很有可能是驱动程序没有安装好,这时需要手工安装驱动程序。
要选择“连接到主机”,勾选“记住我的选择,以后不再询问”。也许你不慎点错了“连接到虚拟机”,那也没关系,在VMWARE的菜单中把“Freescale SE Blank 6ULL”或“Netchip USB download gadget”断开连接,如下图所示:
安装第2个驱动:当烧写工具的“设备已连接”绿灯亮起,就可以在“专业版”点击“运行”按钮,这时电脑会识别出“USB download gadget”设备,一般都会自动给它安装驱动程序,如下图:
如果没有自动安装好驱动程序(“固件已运行”绿灯没亮),先去
下载zadig并运行,然后参考下图安装驱动程序:
如果一切正常,烧写工具的2个绿灯都会亮,如下:
这就表示所有驱动都安装好了,可以重启开发板,就可以参考后面章节体验鸿蒙了。
1.3 鸿蒙文件在哪
在“ask_imx6ull烧写工具v4”目录下,
1.4 一键体验鸿蒙:下载到内存运行1.4.1 一键启动
把开发板设置为USB启动,接好2条USB线,装好驱动程序后,运行烧写工具,点击下图所示按钮,观察串口信息,可以看到板子启动进入鸿蒙系统了:
串口信息如下:
1.4.2 执行shell命令
执行help命令,可以看到支持的SHELL命令,如下:
1.4.3 执行数码相框GUI程序
注意:必须用“./bin/digitpic”,不能用绝对路径“/bin/digitpic” 注意:这个GUI程序是我们自己写得,很丑,与鸿蒙无关。
在板子屏幕上可以看到:
1.4.4 退出程序
执行task命令确定进程号,然后执行“kill -9 PID”杀掉进程,比如:
1.5 开机自动启动鸿蒙
把开发板设置为USB启动,接好2条USB线,装好驱动程序后,运行烧写工具.
先烧写,点击下图所示按钮:
然后设置默认系统,如下图所示:
最后,设置为EMMC启动,重新上电后就可以自动进入鸿蒙系统。