目录
0 前言
一 安装交叉编译器
二 u-boot
三 linux内核
四 根文件系统
2022/04月,搞了块荔枝nano板子
所需工具:
荔枝nano板*1、usb转ttl*1(板子上面没有转ttl芯片,故需要自己准备)、tf卡*1、Ubuntu虚拟机版本具体没啥要求*1
0 前言
首先,先说一下大概情况。
到手的nano板是不够的,自己准备tf卡、读卡器、转串口工具,还需要电烙铁,因为你得把排针焊上去。有的nano板子上自带flash,里面有代码,开盒通电就可以使用,里面还有demo,需要屏幕才能展示。屏幕涨价太快了,故本文没有涉及到屏幕的开发内容。
然后,说明一下大体的流程
以下各部分均可以分块完成,本流程中方法操作不对,也可以参考别人的流程
一 安装交叉编译器
在虚拟机中,首先为了编译器准备个文件夹,
# 创建文件夹 sudo mkdir /usr/local/arm #进入目录 cd /usr/local/arm
然后得到软件包,
#从网上得到交叉编译器的压缩包(也可以在别的网址get) wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz #解压 tar -vxJf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
然后需要修改环境变量,最后验证一下
# 修改环境变量(遇到不能运行的话去网上搜索问题,应该是缺少相应的包) sudo nano /etc/profile # 把它添加在最后保存退出 export PATH=$PATH:/usr/local/arm/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin # 安装相关库 sudo apt-get install lsb-core lib32stdc++6 # 重启,验证 arm-linux-gnueabi-gcc -v
完成后,会有一大串信息被打印出来,最后一行:
(下载+修改环境=ok)
二 u-boot
其实u-boot、linux内核、rootfs是三个一定程度上互相独立的,可以分别制作,组合起来,可以自己做一些,用别人的一些。三者都可以分别看作一个软件包,每一步的操作都需要在对应的软件包文件目录下进行。(这三者都是要先获得软件包,然后进行配置,之后进行编译)
安装
# 安装工具,接着走一遍,如果报错,就去百度,肯定是有包没安装,在继续apt-get sudo apt install gcc python swig python-dev bc device-tree-compiler # 获取u-boot git clone https://github.com/Lichee-Pi/u-boot.git -b nano-v2018.01
配置并编译
# 进入目录设置编译前的默认配置 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_defconfig #有了这个才可以可视化配置 sudo apt-get install libncurses5-dev # 进行可视化配置 make ARCH=arm menuconfig # 开始编译 -j是cpu线程数 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
由于该处的makefile文件默认的不是上边下载的编译器,故需要修改
sudo nano Makefile # 添加 ARCH ?= arm CROSS_COMPILE ?= arm-linux-gnueabi-
大概在248行左右,添加进入。
编译完成后会得到 u-boot-sunxi-with-spl.bin 文件,这个就是我们需要的,只要把它放在tf卡相应位置即可。
通过在终端里输入df命令可以查看sdb1和sdb2的信息(如果看不到,那就多插拔几次u盘,实在不行拔下来,静置5分钟才多插几次)
分区完之后
烧写操作:写进tf卡(dd复制操作),具体分区操作请见专栏里 tf分区操作。
# 找到内存卡,我的是/dev/sdb, # 为啥不是sdb1和sdb2,而是sdb,我感觉其实sdb也占了sdb1的位置。 sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
其实这里还有额外一步,因为u-boot需要引导进入内核,所以需要增加如下修改(如果不改就会卡在 进入内核 这一步骤)(借鉴自参考文献2)
sudo nano /include/configs/suniv.h
#define CONFIG_BOOTCOMMAND "fatload mmc 0:1 0x80800000 zImage; "
"fatload mmc 0:1 0x83000000 suniv-f1c100s-licheepi-nano.dtb; "
"bootz 0x80800000 - 0x83000000;"
#define CONFIG_BOOTARGS "console=ttyS0,115200 panic=5 root=/dev/mmcblk0p2 rootwait rw "
make ARCH=arm menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j12
将生成的u-boot-sunxi-with-spl.bin文件再烧录到TF卡(sdb的那一步)
三 linux内核
获取
git clone https://github.com/Lichee-Pi/linux.git --depth=1 -b nano-4.14-exp wget http://nano.lichee.pro/_static/step_by_step/lichee_nano_linux.config
配置并编译
mv lichee_nano_linux.config .config make ARCH=arm menuconfig sudo apt-get install libssl-dev make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
在这一步会生成两个文件:设备树文件dtb和镜像压缩文件zImage文件。
生成的zImage在 ./arch/arm/boot/zImage,拷贝到TF卡第一分区
生成的dtb文件在 ./arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb,拷贝到TF卡第一分区
#在linux目录下执行该命令,注意改成自己的分区1 cp arch/arm/boot/zImage /media/ice/CDE5-CBCF -d cp arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb /media/ice/CDE5-CBCF -d
完事之后sdb1分区:
四 根文件系统
该步骤也是下载文件包,配置,编译,因为编译时间实在是太长了,我直接用来官方提供的rootfs.tar镜像。这也就是我一开始说的可以随意组合。
将rootfs.tar镜像解压都放到sdb2分区:
到此为止就可以插卡启动了。
参考资料:
1.分区操作http:// https://whycan.cn/t_547.htmlhttp:// https://whycan.cn/t_547.html
2. tf卡烧录https://blog.csdn.net/qq_40611389/article/details/104032286?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.pc_relevant_default&utm_relevant_index=5https://blog.csdn.net/qq_40611389/article/details/104032286?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-3.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-3.pc_relevant_default&utm_relevant_index=5



