使用F1C200S从零制作掌机之Linux内核与文件系统移植

1 Linux内核

事实上对于F1C100S/F1C200S,Linux官方源码已经对licheepi nano进行支持。所以我们完全可以通过licheepi nano的配置文件进行移植。

可以使用官方的系统,也可以自己尝试移植试试。这里我自己体验一下移植,如果出现问题还可以与官方的系统对比,方便解决问题,达到学习的目的,不然遇到问题,真的是解决不了。

https://github.com/Lichee-Pi/linux 从这里查看官方的linux源码。

1.1 下载内核源码

进入Linux系统官网:

https://www.kernel.org/

image-20230901131412754

选择任意一项点击 [browse]

image-20230901131602222

在新打开页面选择 【summary】点击【tag】中的【…】切换下载

image-20230901131728993

然后选择需要的版本。或者使用下面的链接直接下载5.2版本

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/snapshot/linux-5.2.tar.gz

下载后完成后,将代码复制到Ubuntu虚拟机并解压源码。

tar -zxvf linux-5.7.1.tar.gz

1.2 配置编译

需要对Linux编译进行配置:

  • 指定架构类型
  • 指定交叉编译工具
  • 项目配置

指定架构,就这个很好理解,就是指定CPU类型,就是配置为Arm就行,交叉编译工具即为上一篇已经安装好的编译工具。

找到Linux内核代码中的Makefile文件:

修改如下配置:

ARCH              ?= arm
CROSS_COMPILE     ?=arm-linux-gnueabi-

如果没找到ARCH 或 CROSS_COMPILE字段,自己手动添加也行,如下图所示:

image-20230901145914687

事实上这两个字段可以不用指定,在进行make的时候加上对应的参数就行,这里为了避免麻烦,所以直接放到了makefile文件中。

接下来就是指定项目配置了,这个操作就是让Linux内核认F1C100S/F1C200S这颗soc。

进入内核源码中的arch/arm/configs目录中,可以看到有很多开发板的配置文件,其中sunxi_defconfig是全志的配置文件,但是该配置文件非常不全,需要额外配置大量的选项,一般选项多大上千个,这里先使用licheepi_nano的配置文件。

https://github.com/Lichee-Pi/linux/blob/nano-5.2-tf/arch/arm/configs/licheepi_nano_defconfig

下载该文件,然后将其放到arch/arm/configs/目录下。

然后通过终端进入Linux-5.2根目录,输入命令:

make clean
make ARCH=arm CROSS_COMPILE=arm-none-eabi- linux-licheepi_nano_defconfig
或者
make licheepi_nano_defconfig
make menuconfig

sudo apt-get install flex bison

进入图形配置界面,如图所示:

image-20230901151138725

该界面和u-boot配置一样,所以操作方式也是一样的,上下键移动选项,使用空格键进行选中或取消选择,同样通过空格键或回车键,进入子选项配置,通过Tab键选择保存和退出即可返回上级菜单或命令行界面,也可以直接双击Esc键返回上级目录。

1.3 配置TF卡设备树信息

在完成内核配置后还需要配置TF卡的设备树配置,否则即便是能正常运行内核,在加载文件系统的时候还是会有问题,在这里配置很简单:在linux-5.7.1/arch/arm/boot/dts 目录下,分别修改suniv-f1c100s.dtsisuniv-f1c100s-licheepi-nano.dts 两个文件。

1.3.1 修改suniv-f1c100s.dtsi文件

首先是 suniv-f1c100s.dsti,如果没有则在开头部分添加头文件:

#include <dt-bindings/clock/suniv-ccu-f1c100s.h>
#include <dt-bindings/reset/suniv-ccu-f1c100s.h>

在其中 soc { … } 中的 pio: … { … } 中添加一项 mmc0_pins,规定 mmc 设备引脚(参考原理图可知):

...
soc {
	...
	pio: pinctrl@1c20800 {
		...
		mmc0_pins: mmc0-pins {
			pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";
			function = "mmc0";
		};
	}
	...
}
...

前面是引脚声明,下面在 soc { … } 下再加入 mmc0,进行详细配置:

...
soc {
	...
	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>;
	};
	...
}
...
1.3.2 修改suniv-f1c100s-licheepi-nano.dts文件

先在根节点(即 / { … } 内)添加应该是电平配置的信息:

...
/ {
	...
	reg_vcc3v3: vcc3v3 {
		compatible = "regulator-fixed";
		regulator-name = "vcc3v3";
		regulator-min-microvolt = <3300000>;
      		regulator-max-microvolt = <3300000>;
	};
}
...

然后在最外层(之间在文件最后面)添加 mmc0 使能:

...
&mmc0 {
	vmmc-supply = <&reg_vcc3v3>
  • 25
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值