首先,要说野火的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