首页 > 系统相关 >野火Linux uboot编译/烧录/移植学习

野火Linux uboot编译/烧录/移植学习

时间:2023-05-13 15:55:25浏览次数:51  
标签:烧录 uboot Linux lib32ncurses5 命令 内核 软件包

首先,要说野火的linux驱动的pdf做得不是很好,代码内容匆匆略过。

后来才发现野火有专门的网页,这是驱动部分的章节 : https://doc.embedfire.com/lubancat/build_and_deploy/zh/latest/index.html

代码都可以下载!!!

预备:添加编译器相关

①学习:立即生效

添加交叉工具链,需要修改/etc/profile

修改完成后,需要立即生效(不需要重启),可以使用如下命令:

source /etc/profile

 ②折腾:缺少32位库文件问题

如果遇到环境变量配置以后,能够找到版本(也就是说 输入 命令的开头按tab以后能够出现补全),如果还有问题,这是因为64位下运行32编译器缺少相应的库文件,所以运行时会报错

那么只需要添加对于 32 位的环境即可:

sudo apt-get install lib32ncurses5  lib32z1

 ③学习:查看磁盘情况命令:

使用df

df命令是用来查看文件系统中硬盘的使用状况的,也可以用来列出系统中挂载的硬盘,使用-h选项可以以人类可读的格式输出硬盘使用状况:

④折腾:E: Unable to locate package lib32ncurses5最新解决方案(无法定位软件包)

原因:
从上面这个报错其实也知道原因了,就是在“更新源地址平台上”找不到相应的“lib32ncurses5”软件包。找不到软件包通常是软件包名输入错误,或者说,没有这个软件包了,有些软件包可能会被移除或被其它的软件包替代了等等。

解决方法:
将apt-get install lib32ncurses5改为apt-get install lib32ncurses5-dev

总结:
这是由于不同版本的Kali Linux,它的源软件包名字会发生一些局部的变化,这都是很正常的。
低版本的Kali Linux(基于Debian)通常是用第一个命令是没任何问题的。
高版本的Kali Linux(基于Debian)就必须得用第二个命令了,否则就会报“E: 无法定位软件包 lib32ncurses5”这个错误。
未来可能这个软件包名字还会发生其它的变化,大家一定要学会灵活运用。
这里在几个报错的安装命令后加-dev就可以解决,亲测有效。分别是
*apt-get install lib32ncurses5-dev​ 和 apt-get install lib32z1​-dev*

转载链接https://www.fujieace.com/kali-linux/lib32ncurses5.html

⑤、②④的最终解决

 经过上面的尝试,

arm-none-eabigcc: not found

问题都没解决。

最终通过直接在库中下载解决的,输入以下命令:

sudo apt install  gcc-arm-none-eabi

 

 

1. Linux系统构成简单介绍

1. 一个完整的linux系统,通常包含了Uboot、kernel、设备树以及根文件系统。

2.  Uboot的全称 Universal Boot Loader。主要作用是用来启动操作系统内核,它分为两个阶段,即boot + loader, boot阶段启动系统,初始化硬件设备,建立内存空间映射图,将系统的软硬件带到一个合适的状态, loader阶段将操作系统内核文件加载至内存,之后跳转到内核所在地址运行。

3. 设备树是一种描述硬件的数据结构,它把这些硬件设备的信息, 而这个文件,就是Device Tree(设备树),设备树包括设备树源码(Device Tree Source,DTS)文件、 设备树编译工具(Device Tree Compiler,DTC)与二进制格式设备树(Device Tree Blob,DTB), DTS包含的头文件格式为DTSI,其关系如下图所示:

 

 Uboot和Linux不能直接识别DTS文件, 而DTB可以被内核与BootLoader识别解析,通常在制作NAND Flash、SD Card启动镜像时, 通常会为DTB文件留下一部分存储区域以存储DTB,在BootLoader启动内核时,会先读取DTB到内存,再提供给内核使用。   4. 根文件系统(rootfs)是linux在初始化时加载的第一个文件系统, 根文件系统包括根目录和真实文件系统,它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。  

2. Uboot的介绍

1. BootLoader是一段小程序,它在系统上电时执行,通过这段小程序可以将硬件 设备进行初始化,如CPU、SDRAM、Flash、串口、网络等,初始化完毕后调用操作系统内核。 2. uboot 命令:可使用 tab 自动补全命令。 当需要具体使用哪个命令时,可使用 “help 命令” 或 “? 命令” 的方式查看具体命令的使用说明。 3. uboot 启动内核过程: bootcmd与bootargs可以说是uboot最重要的两个环境参数, uboot执行完毕之后,如果没有按下回车,则会自动执行bootcmd命环境参数里的内容, 而bootargs则是传递给内核的启动参数。 使用 printenv bootcmd 可查看bootcmd的内容。
 => printenv bootcmd
 bootcmd=run distro_bootcmd

3. Uboot的编译

 1. git 查看所有分支命令:

git branch -a

 选择/切换分支命令

git checkout ebf_v2020_10_imx(上一个命令打印出的一个分支名)

2. uboot 编译的命令如下:

1   sudo make distclean #清除上次生成的编译环境
2   sudo make ARCH=arm CROSS_COMPILE=arm-none-eabi- mx6ull_fire_mmc_defconfig #加载板级配置文件
4   sudo make ARCH=arm CROSS_COMPILE=arm-none-eabi-  #编译uboot

3. 编译生成的u-boot-dtb.imx文件就是我们想要文件。

4. Uboot的烧录

方式一:使用SD卡烧录

1. 使用lsblk命令插件磁盘设备,产生形如下面的代码.

embedfire@embedfire-VirtualBox:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0    91M  1 loop /snap/core/6350
loop1    7:1    0   2.3M  1 loop /snap/gnome-calculator/260
loop2    7:2    0    13M  1 loop /snap/gnome-characters/139
loop3    7:3    0 140.7M  1 loop /snap/gnome-3-26-1604/74
loop4    7:4    0   3.7M  1 loop /snap/gnome-system-monitor/57
loop5    7:5    0  34.6M  1 loop /snap/gtk-common-themes/818
loop6    7:6    0  14.5M  1 loop /snap/gnome-logs/45
sda      8:0    0   100G  0 disk
└─sda1   8:1    0   100G  0 part /
sdb      8:16   1  14.9G  0 disk    //sdb是我们想要烧录的对象.
sr0     11:0    1  58.3M  0 rom  /media/embedfire/VBox_GAs_6.1.18

2. 使用dd命令进行烧录

sudo dd iflag=dsync oflag=dsync if=u-boot-dtb.imx of=/dev/sdb seek=2

5. Uboot的移植

1.bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH, SD, MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。

2. 有很多现成的 bootloader 软件可以使用,比如 U-Boot、 vivi、 RedBoot 等等,其中以 U-Boot 使用最为广泛。

3. 

标签:烧录,uboot,Linux,lib32ncurses5,命令,内核,软件包
From: https://www.cnblogs.com/FBsharl/p/17396478.html

相关文章

  • linux移植流程
    在移植Linux之前我们需要先移植一个bootloader代码,这个bootloader代码用于启动Linux内核,bootloader有很多,常用的就是U-Boot。移植好U-Boot以后再移植Linux内核,移植完Linux内核以后Linux还不能正常启动,还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些......
  • linux 下新建显示器分辨率
    1.输入cvt19201080(假设需要添加的分辨率为1920x1080),获取ModeLine#1920x108059.96Hz(CVT2.07M9)hsync:67.16kHz;pclk:173.00MHzModeline"1920x1080_60.00"173.0019202048224825761080108310881120-hsync+vsync2.把ModeLine复制下来,用......
  • linux学习day02
    cd的使用:. 当前目录 .. 上一层目录 ~ 当前用户家目录  -前一个工作目录(前一级)路径相对路径:相对于自己的目标文件的位置,而建立出的目录路径,当所处位置不同时,相对路径就会发生变化。绝对路径:文件在硬盘上真正存在的路径,任何人引用时所有的路径都是一样的用户组......
  • Linux提权
    Linux提权目录Linux提权一、Linux-内核提权二、SUID提权三、计划任务提权四、环境变量劫持提权五、SUDO提权六、通配符(ws)提权七、明文ROOT密码提权一、Linux-内核提权内核提权是利用Linux内核的漏洞进行提权的。内核漏洞进行提权一般包括三个环节:1、对目标系统进行信息收集,......
  • linux 中 查看cpu 信息
     001、型号[root@PC1test]#cat/proc/cpuinfo|grepname|cut-f2-d:|uniq-c612thGenIntel(R)Core(TM)i5-12500H6:总核心数12th:12代处理器Gen:genunie,正式版Intel(R):厂商 002、物理CPU个数[root@PC1test]#cat/proc/cpuinfo|grep"physi......
  • linux 系统中查看总内存、总硬盘、总逻辑CPU数目
     001、总内存[root@PC1test]#free-htotalusedfreesharedbuff/cacheavailableMem:3.7G830M1.8G38M1.1G2.5GSwap:3.9G0B3.9G  002、......
  • CQRS读写分离MySQL数据库如何部署至Linux
    FearlessGuo首先有一台可以使用的Linux服务器,可以自行购买,当然也可以白嫖。有一款可以连接Linux的软件,我用的是putty在Linux上下载docker镜像,类似应用商店。安装过程参阅下方链接Linux安装Docker完整教程_docker安装_风随心飞飞的博客-CSDN博客下载mysql镜像,查看版本本次......
  • Linux注册为系统服务
    0x01创建一个新的systemd服务配置文件例如myscript.service:sudonano/etc/systemd/system/myscript.service0x02在文件中添加以下内容[Unit]Description=MyScriptServiceAfter=network.target[Service]ExecStart=/path/to/myscript.shRestart=always[Install]Wa......
  • Rocky 9 Linux 软件安装 neovim 和 git
    目录编辑器Neovim版本控制工具GitRHEL系列软件安装介绍软件安装包简介源码包安装rpm包安装yum&dnf在线安装脚本安装包rockyLinux介绍软件安装我主要挑了编辑器neovim和版本管理控制工具Git进行介绍。通常情况,部署完Linux发行版,自带vim工具,既然有了vim,那就来点新的......
  • LFS - Linux From Scratch 从零开始全记录 - 1 准备篇
    上次折腾LFS已经是好几年前了,只记得最后用VMware引导成功了,好多技术细节已经不记得了。趁着最近有空,再来折腾一次。这一次用的一台新的Win10PC,目标是在一个U盘上构建LFS,然后用U盘引导物理机,顺便记录一下整个过程。准备阶段下载虚拟机、Ubuntu镜像下载安装Microso......