生成可烧写的文件
如果您有S3C2440或其他单片机的学习经验,可以知道程序的二进制版本,比如lcd.bin可以直接烧写到Flash上。它们是自启动的,什么意思?比如一上电,运行的是lcd.bin前面的代码,它会初始化内存,把自己从Flash上复制到内存里去执行。请记住:自己把自己复制到内存。
但是对于IMX6ULL,烧写在EMMC、SD/TF卡上的程序,并不能“自己复制自己”,是“别人把它复制到内存里”。一上电首先运行的是boot ROM上的程序,它从EMMC、SD/TF卡上把程序复制进内存里。
- 生成镜像文件
# 安装mkimage,安装出错,多试几次
sudo apt install u-boot-tools
sudp apt-get update
# 复制imximage、imx6ull.lds(后续C用的着)到虚拟机中去
git clone https://e.coding.net/weidongshan/noos/doc_and_source_for_mcu_mpu.git
doc_and_source_for_mcu_mpu\IMX6ULL\source\02_录制视频时现场编写的源码\03_led_s\tools
# 得到了一个led.imx文件
mkimage -T imximage -n ./imximage.cfg.cfgtmp -e 0x80100000 -d led.bin led.imx
cat 1k.bin led.imx > led.img
# led.imx不可以烧录,还需要让led.imx偏移1K字节,在其前面写入1K字节的空数据
# 使用命令得到1K空字节的文件。dd命令是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
# 首先if=/dev/zero表示输入文件为/dev/zero
# /dev/zero,是一个输入设备,你可你用它来初始化文件,该设备无穷尽地提供0
dd if=/dev/zero of=1k.bin bs=1024 count=1
# 合并为led.img文件
cat 1k.bin led.imx > led.img