本次主要参考:
http://nano.lichee.pro/build_sys/bootargs.html
https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/index.html
https://www.cnblogs.com/twzy/p/15355842.html
https://blog.csdn.net/p1279030826/article/details/113368485
(如果方便请给这几位大佬一个关注)
接下来将会在F1C200S的RAM中运行linux
以下在云服务器的终端上操作
1、获取源码,以下命令:
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.7.1.tar.gz
下载完之后解压,然后进入文件目录。
2、修改源码
2.1、打开顶层Makefile文件,在第362行插入,以下代码。
ARCH = arm
CROSS_COMPILE = arm-linux-gnueabi-
完成之后,保存退出。
2.2、加入配置文件。
2.2.1、下载配置文件执行以下命令:
wget https://files.cnblogs.com/files/twzy/linux-licheepi_nano_defconfig.zip
下载完成之后,解压出linux-licheepi_nano_defconfig文件,然后将其放到arch/arm/configs/目录下
2.2.2、使配置文件生效。执行以下命令:
make linux-licheepi_nano_defconfig
make menuconfig
无需操作,直接通过Tab键选择保存和退出即可。
3、因为文件系统会放到SD卡上,修改SD卡设备树信息。
3.1、修改suniv-f1c100s.dtsi文件
打开linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s.dtsi文件。
在墨云大佬的文档中,有以下一段话。我的代码里面有,需要自己注意一下。
首先添加头文件(如果有则忽略)
#include <dt-bindings/clock/suniv-ccu-f1c100s.h>
#include <dt-bindings/reset/suniv-ccu-f1c100s.h>
在soc->pio 下(第100行)添加如下代码:
mmc0_pins: mmc0-pins {
pins = “PF0”, “PF1”, “PF2”, “PF3”, “PF4”, “PF5”;
function = “mmc0”;
};
在soc下(第113行)添加如下代码:
mmc0: mmc@1c0f000 {
compatible = “allwinner,suniv-f1c100s-mmc”,
“allwinner,sun7i-a20-mmc”;
reg = <0x01c0f000 0x1000>;
clocks = <&ccu CLK_BUS_MMC0>,
<&ccu CLK_MMC0>,
<&ccu CLK_MMC0_OUTPUT>,
<&ccu CLK_MMC0_SAMPLE>;
clock-names = “ahb”,
“mmc”,
“output”,
“sample”;
resets = <&ccu RST_BUS_MMC0>;
reset-names = “ahb”;
interrupts = <23>;
pinctrl-names = “default”;
pinctrl-0 = <&mmc0_pins>;
status = “disabled”;
#address-cells = <1>;
#size-cells = <0>;
};
完成之后,保存退出。
3.2、修改suniv-f1c100s-licheepi-nano.dts文件
打开linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts文件。
在第21行添加以下代码:
reg_vcc3v3: vcc3v3 {
compatible = “regulator-fixed”;
regulator-name = “vcc3v3”;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
在文档的最后也就是第35行添加以下代码:
&mmc0 {
vmmc-supply = <®_vcc3v3>;
bus-width = <4>;
broken-cd;
status = “okay”;
};
完成之后,保存退出。
4、将Debug串口由uart0改为uart1
4.1、修改suniv-f1c100s.dtsi文件
打开linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s.dtsi文件。
将第95行改为如下:
uart1_pins_a: uart1-pins-pa {
pins = “PA2”, “PA3”;
function = “uart1”;
};
完成之后,保存退出。
4.2、修改suniv-f1c100s-licheepi-nano.dts文件
打开linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts文件。
将第14行改为如下:
serial1 = &uart1;
将第18行改为如下:
stdout-path = “serial1:115200n8”;
将第29~33行改为如下:
&uart1 {
pinctrl-names = “default”;
pinctrl-0 = <&uart1_pins_a>;
status = “okay”;
};
完成之后,保存退出。
5、开始进行编译。
执行以下命令(根据编译环境实际条件修改):
make -j4
6、编译完成,就会在在linux-5.7.1/arch/arm/boot目录下生成内核文件:zImage,在linux-5.7.1/arch/arm/boot/dts目录下设备树文件:suniv-f1c100s-licheepi-nano.dtb 。
以下操作必须保证板载flash为空没有烧录u-boot;如果插入了SD卡,则SD中不能烧录u-boot。
将u-boot-sunxi-with-spl.bin,zImage,suniv-f1c100s-licheepi-nano.dtb下载到sunxi-fel.exe同级目录下。
用两根type-c线将电脑与CherryPi-F1C200S连接起来,在串口终端以115200 8n1配置打开串口。
按一下板载RST键后,在windows命令终端进入到sunxi-fel.exe同级目录下,执行以下命令可以看到串口终端有log打印(因为没有文件系统,最终会卡住停止打印log):
sunxi-fel -p uboot u-boot-sunxi-with-spl.bin write 0x80008000 zImage write 0x80c08000 suniv-f1c100s-licheepi-nano.dtb
QQ:763314235,会在第一时间处理。