1、uboot是一个裸机程序,比较复杂。我们需要先将其编译生成bin文件,然后添加头文件,然后将其烧写进去,最后通过他来启动Linux。
2、uboot就是一个bootloader(启动加载器),作用就是用于启动Linux或其他系统和初始化DDR。
3、注意:
Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。当然了,bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核,bootloader 和 Linux 内核的关系就跟 PC 上的 BIOS 和 Windows 的关系一样,bootloader 就相当于 BIOS。所以我们要先搞定bootloader,很庆幸,有很多现成的 bootloader 软件可以使用,比如 U-Boot、vivi、RedBoot 等等,其中以 U-Boot 使用最为广泛,为了方便书写,本书会将 U-Boot 写为 uboot。
Uboot获取:
首先解压nxp的压缩包 ,然后配置,好了再编译。uboot 可以通过 mx6ull_alientek_emmc_defconfig 来配置,或者通过文件 mx6ull_alientek_emmc.h 来配置 uboot(其中有几节视频,专门用来讲解这个,配置也是在这个文件中进行配置的还有一个mx6ull_alientek_emmc.c,驱动啥的 我们需要修改的 都是在这两个文件中的)。还有另外一种配置 uboot 的方法,就是图形化配置。
就是改mx6ull_alientek_emmc.h 和mx6ull_alientek_emmc.c这两个文件,用到的时候再好好研究下把。
应该需要改的就是emmc也就是需要从其中读取镜像,还有网络,因为需要从网络中驱动。还有一个LCD驱动更改,因为需要用到屏幕。
1、起因:直接使用NXP 官方 I.MX6ULL EVK 开发板的 uboot 在正点原子 EMMC 版本 I.MX6ULL 开发板上的运行,会出现如下问题
2、具体工作
直接看手册,写的很详细
第一步修改,下面这个,应该就是让他编译我们的开发板的头文件和.c文件,我觉得如果直接在nxp提供的官方板上进行驱动的修改,那么就不用改下面这个文件。
mx6ull_14x14_evk_emmc_defconfig
添加开发板对应的头文件
复制include/configs/mx6ullevk.h,并重命名为 mx6ull_alientek_emmc.h
添加开发板对应的板级文件夹, 将 其 中 的 mx6ullevk.c 文 件 重 命 名 为mx6ull_alientek_emmc.c。还要修改很多配置,让编译这个板级文件夹。
3、LCD驱动
4、网络
太多了直接看文档或者视频
好了以后在uboot使用网络之前,先设置几个环境变量,设置好环境变量以后就可以在 uboot 中使用网络了
setenv ipaddr 192.168.1.55 //开发板 IP 地址
setenv ethaddr b8:ae:1d:01:00:00 //开发板网卡 MAC 地址
setenv gatewayip 192.168.1.1 //开发板默认网关
setenv netmask 255.255.255.0 //开发板子网掩码
setenv serverip 192.168.1.250 //服务器地址,也就是 Ubuntu 地址
saveenv //保存环境变量
mx6ull_alientek_emmc.h 中的宏CONFIG_EXTRA_ENV_SETTINGS 保存着这些环境变量的默认值
1、环境变量 bootcmd
bootcmd 保存着 uboot 默认命令,uboot 倒计时结束以后就会执行 bootcmd 中的命令。这些命令一般都是用来启动 Linux 内核的,比如读取 EMMC 或 者 NAND Flash 中的 Linux 内核镜像文件和设备树文件到 DRAM 中,然后启动 Linux 内核。
里面的内容浓缩出来就是以下四句
mmc dev 1 //切换到 EMMC
fatload mmc 1:1 0x80800000 zImage //读取 zImage 到 0x80800000 处
fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb //读取设备树到 0x83000000 处
bootz 0x80800000 - 0x83000000 //启动 Linux
要修改的话,可以在文件中,修改CONFIG_BOOTCOMMAND
#define CONFIG_BOOTCOMMAND \
"mmc dev 1;" \
"fatload mmc 1:1 0x80800000 zImage;" \
"fatload mmc 1:1 0x83000000 imx6ull-alientek-emmc.dtb;" \
"bootz 0x80800000 - 0x83000000;"
或者直接在 uboot 中设置 bootcmd 的值,这个值就是保存到 EMMC 中的
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ullalientek-emmc.dtb; bootz 80800000 - 83000000;'
2、环境变量 bootargs
视频讲解
uboot中用的不多,但Linux内核配置 用的比较多(linux自己的图形化配置,不是这个),他们的原理都是一样的,uboot比较简单,因为需要配置的东西比较少。
1、简介
2、使用方式(注意,新电脑需要安装ncurses库,具体详细安装过程可以看手册)
进入到uboot的源码根目录下。
首先默认配置一遍,执行一次就好了 除非清空了一遍
make mx6ull_alientek_emmc_defconfig //默认配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_defconfig//也就是这个
输入make menuconfig。打开图形化配置界面。
可以开启DNS啥的
当我们配置好了,保存一下,相当于把.config文件给你重新copy了一份。下次用的时候通过图形化配置界面重新加载,然后生成
参考,讲的很详细
1、编译
找到解压路径输入指令编译
(1)通过shell脚本编译(也可以一句一句的输 一共三句)
vi mx6ull_alientek_emmc.sh//创建shell脚本
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- V=1 -j4
使用shell脚本第一行必须这样写: #!/bin/bash
chmod 777 mx6ull_alientek_emmc.sh//给脚本可以执行的权限,此时这个文件就会变绿色 也就是可以执行的样子
./mx6ull_alientek_emmc.sh//执行shell脚本
(2)为了方便开发,可以直接在uboot的顶层makefile中将变量定死,这样就可以直接输命令
vi makefile//然后找到图片所在位置进行代码的添加
编译完成以后,生成u-boot.bin文件,还需要向其添加头部信息然后再烧录进去。uboot会自动使用其自带的/tools/mkimage软件添加头部信息,生成u-boot.imx。
视频教程
第三期最后一部分就是专门讲解这一块烧写的。
将uboot烧写到SD卡里面,然后通过sd卡启动。以后带有调试性质的开发,uboot都是烧写到sd卡里面,因为方便烧写。
因为正点原子关键部件和nxp的板子一样的,所以直接用也没问题,就有些地方有些改变,所以需要后面的配置(一个开发板也好运行uboot,DDR或者叫DRAM,串口,SD、EMMC、NAND。板子能工作。)
烧写,然后通过sd卡启动就可以运行uboot了
./imxdownload u-boot.bin /dev/sdb
3、测试结果
视频详解
1、help:查看帮助信息
2、printenv:信息查询
3、setenv:设置环境变量,也可以自定义环境变量,也可以删除环境变量(设置为空值,也就是没有值,就是删除)
4、saveenv命令:保存环境变量。
512MB字节DDR版本的核心板,DDR范围就是0X80000000- 0X9FFFFFFF(这里的1就是1byte,0x9FFFFFFF+1-0X8000000的值转为十进制/1024/1024=512MB)。对于256MB的DDR来说,那就0X80000000~0X8FFFFFFF。
视频教程:EMMC是第六分钟开始
1、首先查看EMMC里面是否有系统,linux镜像zImage和.dtb文件。
先将当前设备切换到EMMC:
mmc dev 1 //切换到EMMC
fatls mmc 1:1 //查看EMMC1的分区1里面的文件
2、将zIimage和.dtb读取到DRAM中
fatload mmc 1:1 80800000 zImage //将zimage下载到DDR的0x80800000处
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb //将dtb读取到0X83000000
bootz 80800000 – 83000000 //启动内核
如果内核启动成功,说明uboot支持emmc启动,验证成功。
fatload :将指定文件读取到DRAM中
将EMMC分区1中的zIimage文件读取到DRAM中的0x80800000地址处。
fatload mmc 1:1 80800000 zImage
同理,读取设备树
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb
bootz 有三个参数,addr 是 Linux 镜像文件在 DRAM 中的位置,initrd 是 initrd 文件在
DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可,fdt 就是设备树文件在 DRAM 中
的地址。
bootz 80800000 - 83000000
和上面的基本相同,只是镜像和设备树是通过网络传过来的
1、通过Windows10中直接拷贝过来的首先需要给他权限
2、通过tftp传输到开发板上(直接执行下面的代码就可以了)
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000
这样就可以不用每次都通过sd卡了,直接用uboot
1、首先cp到tftpboot文件夹下
cp ./printf.bin /home/ni/linux/tftpboot/ -f
2、下载程序到开发板
tftp 87800000 printf.bin
3、跳转运行
go 87800000
开发板ping不同主机
虚拟机这块的设置到第三步就ok了 第四步不用搞
文章浏览阅读451次。dev/mem: 物理内存的全镜像。可以用来访问物理内存。/dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容。调试嵌入式Linux内核时,可能需要查看某个内核变量的值。/dev/kmem正好提供了访问内核虚拟内存的途径。现在的内核大都默认禁用了/dev/kmem,打开的方法是在 make menuconfig中选中 device drivers --> ..._dev/mem 源码实现
文章浏览阅读7.1k次,点赞2次,收藏19次。vxe-table,一个小众但功能齐全并支持excel操作的vue表格组件_vxe-table
文章浏览阅读62次。参考:http://www.ruanyifeng.com/blog/2016/01/babel.htmlBabelBabel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行// 转码前input.map(item => item + 1);// 转码后input.map(function (item) { return item..._让开发环境支持bable
文章浏览阅读2.8k次,点赞6次,收藏29次。摘要:FPGA视频处理FIFO的典型应用,视频输入FIFO的作用,视频输出FIFO的作用,视频数据跨时钟域FIFO,视频缩放FIFO的作用_fpga 频分复用 视频
文章浏览阅读575次。【代码】R语言:设置工作路径为当前文件存储路径。_r语言设置工作目录到目标文件夹
文章浏览阅读452次。格式:background: linear-gradient(direction, color-stop1, color-stop2, ...);<linear-gradient> = linear-gradient([ [ <angle> | to <side-or-corner>] ,]? &l..._background线性渐变
文章浏览阅读1k次,点赞26次,收藏8次。第十三届蓝桥杯青少年组python编程省赛真题一、题目要求(注:input()输入函数的括号中不允许添加任何信息)1、编程实现给定一个正整数N,输出正整数N中各数位最大的那个数字。例如:N=132,则输出3。2、输入输出输入描述:只有一行,输入一个正整数N输出描述:只有一行,输出正整数N中各数位最大的那个数字输入样例:
文章浏览阅读2.2k次。一个网络协议主要由以下三个要素组成:1.语法数据与控制信息的结构或格式,包括数据的组织方式、编码方式、信号电平的表示方式等。2.语义即需要发出何种控制信息,完成何种动作,以及做出何种应答,以实现数据交换的协调和差错处理。3.时序即事件实现顺序的详细说明,以实现速率匹配和排序。不完整理解:语法表示长什么样,语义表示能干什么,时序表示排序。转载于:https://blog.51cto.com/98..._网络协议三要素csdn
文章浏览阅读153次。主要的思想,将所有的系统都可以看作两部分,真正的数据log系统和各种各样的query engine所有的一致性由log系统来保证,其他各种query engine不需要考虑一致性,安全性,只需要不停的从log系统来同步数据,如果数据丢失或crash可以从log系统replay来恢复可以看出kafka系统在linkedin中的重要地位,不光是d..._the log: what every software engineer should know about real-time data's uni
文章浏览阅读746次。伟大是熬出来的 目录 前言 引言 时间熬成伟大:领导者要像狼一样坚忍 第一章 内圣外王——领导者的心态修炼 1. 天纵英才的自信心 2. 上天揽月的企图心 3. 誓不回头的决心 4. 宠辱不惊的平常心 5. 换位思考的同理心 6. 激情四射的热心 第二章 日清日高——领导者的高效能修炼 7. 积极主动,想到做到 8. 合理掌控自己的时间和生命 9. 制定目标,马..._当狼拖着受伤的右腿逃生时,右腿会成为前进的阻碍,它会毫不犹豫撕咬断自己的腿, 以
文章浏览阅读285次。在当今的大数据时代,人们对高速度和高带宽的需求越来越大,迫切希望有一种新型产品来作为高性能计算和数据中心的主要传输媒质,所以有源光缆(AOC)在这种环境下诞生了。有源光缆究竟是什么呢?应用在哪些领域,有什么优势呢?易天将为您解答!有源光缆(Active Optical Cables,简称AOC)是两端装有光收发器件的光纤线缆,主要构成部件分为光路和电路两部分。作为一种高性能计..._aoc 光缆
文章浏览阅读2.2k次。在“桌面”上按快捷键“Ctrl+R”,调出“运行”窗口。接着,在“打开”后的输入框中输入“Gpedit.msc”。并按“确定”按钮。如下图 找到“用户配置”下的“Windows设置”下的“Internet Explorer 维护”的“连接”,双击选择“自动浏览器配置”。如下图 选择“自动启动配置”,并在下面的“自动代理URL”中填写相应的PAC文件地址。如下..._設置proxy腳本