一、前言

目前没有前言

二、准备工作

准备太久了

三、PCB绘制

不是我绘制的

四、下载编译工具链

我下的是arm-linux-gnueabi-

五、u-boot移植

1、下载u-boot

git clone https://github.com/Lichee-Pi/u-boot.git
git branch -a  # 查看分支,我们使用的是nano-v2018.01u-boot
git checkout nano-v2018.01u-boot  # 切换到nano-v2018.01u-boot这个分支

2、选取config配置

考虑到水平有限,我们采用从现有的配置上进行更改。或者,我完全不进行更改,就直接使用了。

对几个config简单介绍:

f1c100s_nano_uboot_defconfigSPI Flash支持版

licheepi_nano_defconfig:不带SPI Flash,从TF卡启动

licheepi_nano_spiflash_defconfig:从SPI设备启动

其实上面三种我也分不清楚,我第一次采用的是 licheepi_nano_defconfig。我也找不到 f1c100s_nano_uboot_defconfig,但是在可以找到,这个是荔枝派的 u-boot,可能毕竟这款 f1c100s是国产芯片,在GitHub上面找不到。

选取config操作

cd ~/u-boot  # 切换到 下载的 u-boot 的根目录
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_defconfig  
# 参数介绍:
# ARCH=arm 是arm架构的
# CROSS_COMPILE=arm-linux-gnueabi-  是之前的下载的编译工具链
# licheepi_nano_defconfig 选取的默认config

3、可视化配置

打开菜单命令

make ARCH=arm menuconfig
# 之后上下键进行移动
# 空格或者回车进行选择
# 左右可以选择下方菜单
# ctrl+退格才能删除已经填入的默认参数

参数讲解

注意下面这两个参数就行

image-20220305195147976

boot arguments

  • console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw

console=ttyS0,115200 表示终端为ttyS0即串口0,波特率为115200;

**panic=5 **字面意思是恐慌,即linux内核恐慌,其实就是linux不知道怎么执行了,此时内核就需要做一些相关的处理,这里的5表示超时时间,当Linux卡住5秒后仍未成功就会执行Linux恐慌异常的一些操作。

rootwait 该参数是告诉内核挂在文件系统之前需要先加载相关驱动,这样做的目的是防止因mmc驱动还未加载就开始挂载驱动而导致文件系统挂载失败,所以一般bootargs中都要加上这个参数。

root=/dev/mmcblk0p2 表示根文件系统的位置在mmc的0:2分区处,/dev是设备文件夹,内核在加载mmc中的时候就会在根文件系统中生成mmcblk0p2设备文件,这个设备文件其实就是mmc的0:2分区(这里对应TF卡的第二个分区:rootfs),这样内核对文件系统的读写操作方式本质上就是读写/dev/mmcblk0p2该设备文件。

earlyprintk 参数是指在内核加载的过程中打印输出信息,这样内核在加载的时候终端就会输出相应的启动信息。rw表示文件系统的操作属性,此处rw表示可读可写。

bootcmd

  • load mmc 0:1 0x80008000 zImage;load mmc 0:1 0x80c08000 suniv-f1c100s-licheepi-nano.dtb;bootz 0x80008000 - 0x80c08000;

image-20220305195531843

、遇到问题不要慌

(1) execute 'swig'

没有swig这个东西,安装即可:sudo apt install swig

swig:我从网上了解到是一个将C/C++的类封装成库,给Python、Lua、PHP等脚本语言调用。(题外话)

、参考链接

参考博客

参考荔枝派

六、Linux的移植

1、分区操作

​ 一个硬盘对于Linux来说,需要进行挂载命令是:mount,一般插上自动挂载),然后再能使用,然后需要卸载(命令:umount)才能操作,如格式化,分区之类的。我们借助了Ubuntu下图形化工具——Gparted,命令行进行下载就行了。

​ 然后,买到手的sd卡,可能已经分区了,有一个主分区。如果没法删除,或者进场出现例如*/dev/sdb contains a mounted filesystem*,我的建议,使用一个全0的映像文件写入sd卡,将前面的数据覆盖。

​ 之后便是分区了,将只有一个未分区的,且没有任何分区的sd卡连接Ubuntu

分区1、boot

新建一个分区

之前剩余空间为1M,新大小为32M,文件系统为**fat16,卷标就设置为boot**

对于之前的1M,是留给**uboot**的,而且在gparted是看不到的

图片来源于网络

image-20220314221728714

分区2、rootfs

新建一个分区

之前剩余空间为0M,新大小为100M,文件系统为**ext4,卷标就设置为rootfs**

图片来源于网络

image-20220314221807562

最后的效果

image-20220314221850652

2、编译 Linux

更改设备树

七、编译rootfs