前言

一开始只想要裸机搭建,不想弄那么麻烦!画的板子是没有flsh,本来还以为内置Flash,误认为DDR1的64MB是内存,实际上是RAM,所以根本无法运行
启动顺序是先找SD卡然后FLASH,如果这两个都没有就会进入FLE模式。
昨天买了SD卡托来放内存卡,今天研究了一天才基本把SD卡分区理顺!也烧录进去了,uboot正常运行,kernel也能正常加载,只是最后的rootfs文件系统失败,后续再想想办法,应该是自己编译出了问题,别人的rootfs是能正常读取进入! –20250917

一、开发环境搭建

  • 注:因为一直在使用ESP-IDF的开发环境,因此在这基础上添加的话很多基础开发程序都可以通用

0.准备工作

1
2
3
4
#安装vim:
sudo apt-get install vim
#安装git工具
sudo apt-get install git

1.交叉编译工具链安装(这是F1C200S使用)

  • 注:芯片和架构不同都所使用的工具链也不同

对于F1C200S,使用的交叉工具链必须高于,使用的交叉工具链必须高于6.0。
本文选择7.2.1进行u-boot和kernel的编译。
官网下载链接
下载后解压

  • 注:可以使用wget命令直接下载,如果太慢的话使用迅雷会快些
1
tar -vxjf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz

或右键提取

在/usr/local目录下新建arm-linux-gcc目录

1
sudo mkdir /usr/local/arm-linux-gcc

进入解压目录下:

1
cd gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/

将该目录下 的所有文件复制到新建的目录下:

1
sudo cp -rd * /usr/local/arm-linux-gcc/

最后需要添加该工具链的环境变量使其可以在任何目录下执行,打开/etc/profile文件

1
sudo vim /etc/profile

在文件末尾 添加以下内容

1
PATH=$PATH:/usr/local/arm-linux-gcc/bin

添加完毕,使路径生效

1
source /etc/profile
  • 注:主要是将工具链添加到环境变量中,因为自己为多环境,所以改成了alist别名方式,通过不同shell设置不同环境

验证:

1
arm-linux-gnueabi-gcc -v

安装32位动态链接库
为了后续移植Linux系统中出现库缺失问题,这里可以一次系统中出现库缺失问题,这里可以一次性将可能需要的库全部安装,执行如下命令即。

1
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev gcc-multilib x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev g++-multilib tofrodos python-markdown libxml2-utils libssl-dev swig python-dev
  • 注:这里还是根据编译报错的时候再添加,最后发现添加 swig和libxx类即可,其他的软件其实已经都有了,还有python需要使用Python2,3版本会报错,因此,需切换指向python–>python2.7

2. u-boot移植

  • 注:后续可以使用其他uboot看看,根据这个步骤下去编译出来的uboot可以运行

这里采用licheePI nano的u-boot来进行移植。在终端输入如下命令克隆u-boot:

1
git clone https://github.com/Lichee-Pi/u-boot.git -b nano-v2018.01

注:如果太慢的话使用gitee也可以 u-boot-licheepi

克隆完毕文件会保存在当前目录 下,进入该目录

1
cd u-boot

在该文件夹下有很多分支,我们可以查看所使用如命令:

1
git branch -a

现在我们使用的是nano开发板,所以将当前分支切换到nano分支,命令如下:

1
git checkout nano-v2018.01

或者直接下载切换到分支下载zip

u-boot默认的没有指定交叉工具链和架构,因此在编译之前需要芯片默认的没有指定交叉工具链和架构,因此在编译之前需要芯片u-boot的交叉编译器在u-boot的根目录下中Makefile文件中定义了。打开文件中定义了。打开Makefile文件。
将# set default to nothing for native builds下面改为

1
2
ARCH=arm
CROSS_COMPILE=arm-linux-gnueabi-

config文件夹中有
licheepi_nano_defconfig和licheepi_nano_spiflash_defconfig配置文件
前者表示为,前者表示为TF卡启动,后者表卡启动,后者表示从SPI设备启动,这里使用前者。
下一步:

1
2
cd ..
make licheepi_nano_defconfig

配置完成后就可以进入图形界面行了,执make menuconfig命令:

1
make menuconfig

更改bootcmd

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

传参bootarg
Y 选中 Enable boot arguments

下面一行Enter输入参数

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

注:这里这样写的时候在boot中是读取不到SD02分区,因为是ext4格式,可以在boot环境中改成如下也行

1
2
3
4
5
6
7
8
9
10
11
12
13
# 修改bootargs(在U-Boot命令行执行)
setenv bootargs "console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rw init=/sbin/init rootwait"
boot # 重新启动

# 执行启动命令(根据实际引导方式,如从SD卡启动内核)
bootz 0x80008000 - 0x80000000 # 0x80008000为内核地址,0x80000000为设备树地址(F1C100s可能无需设备树)

# 修改 bootargs,添加 rootdelay=5(等待 5 秒再挂载根分区)
setenv bootargs "console=ttyS0,115200 panic=5 rootwait rootdelay=5 root=/dev/mmcblk0p2 rootfstype=ext4 earlyprintk rw"

# 保存并启动
saveenv
run bootcmd

编译u-boot

1
make -j2

编译生成

1
u-boot-sunxi-with-spl.bin

编译uboot的时候报错 No module named _libfdt

解决:
默认python版本切换成python2,参考:Linux下切换python版本(python2和python3版本切换)

1
2
3
4
5
//删除当前默认版本
sudo rm /usr/bin/python

//切换到 python2
sudo ln -s /usr/bin/python2 /usr/bin/python

3. kernel 移植

注:wget太慢的话可以先使用迅雷下载,特别是linux-4.15.18.tar.xz文件跑了好久都没下好

  • 编译后报错configure: error: you should not run configure as root

具体日志如下:

1
2
3
checking whether mknod can create fifo without root privileges... configure: error: in `/home/docker/openwrt/build_dir/host/tar-1.34':
configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
See `config.log' for more details

在错误提示中也有说明了
解决方案:

1
export FORCE_UNSAFE_CONFIGURE=1

下载kernel
修改主目录Makefile

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

注:这里根据这个方法也能编译得出文件,但运行后发现没有加载SD卡MMC模式,后来就找其他方法手动修改添加了

arch/arm/boot/dts

目录下,分别修改suniv-f1c100s.dtsi、suniv-f1c100s-licheepi-nano.dts 两个文件

适配TF卡

修改suniv-f1c100s.dtsi文件

首先添加头文件(如果有则忽略)

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

在soc->pio 下添加如下代码

1
2
3
4
mmc0_pins: mmc0-pins {
pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";
function = "mmc0";
};

soc下添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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>;
};

修改suniv-f1c100s-licheepi-nano.dts文件,在根节点添加如下代码

1
2
3
4
5
6
reg_vcc3v3: vcc3v3 {
compatible = "regulator-fixed";
regulator-name = "vcc3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};

外部添加mmc0使能代码

1
2
3
4
5
6
&mmc0 {
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
};

下载licheepi_nano的配置文件
linux-licheepi_nano_defconfig文件

然后将其放到arch/arm/configs/目录下

回到主目录,

1
make linux-licheepi_nano_defconfig

编译

1
make -j2

编译完毕后在就会生成zImage文件和dtb文件,zImage在arch/arm/boot目录下,dtb在arch/arm/boot/dts目录下目录下。

4 rootfs移植

注:今天尝试了好多次还是失败,读取ini文件的时候就不行,好像是没有权限,使用别人的rootfs就可以 20250917
**注:今天这个问题已经解决 20250918
是因为架构体系选择错了 【架构体系,这里选择arm926t,因为F1C200S/F1C100S的架构就是这个架构】
根文件系统–从零开始自制linux掌上电脑(F1C200S)
**

安装buildroot2018.2.11版本 https://buildroot.org/downloads/

1
2
make clean
make menuconfig

进入Target options

图框中指定了编译时使用的库类型,我们这里选择(both static and shared)选项,即同时使用静态库和动库。剩下的我们使用默认即可,将光标移动到上,然后按Enter保存。
保存后,回到上一级配置界面然进入第三个Toolchain选项,配置如图选项,配置如图:
黄色框中的选项尽可能勾,因为后面移植QT5的时候需要用到C++相关库,如果这里没有勾选QT5选型将无法勾选。

第四个 System configuration配置如图:

更改启动密码。
编译完毕后可以在output/images目录下找到rootfs.tar。

一、 格式化TF卡

1. linux命令行格式化

注:如果格式化不对可以使用 wipefs 清除磁盘上的文件系统签名、分区表签名等信息

1
2
3
4
5
lsblk	# 确认 SD 卡设备名
wipefs /dev/sdb # 查看 SD 卡上的签名信息
sudo wipefs -a /dev/sdb #清除所有签名和分区表信息
sudo wipefs /dev/sdb # 无输出则表示已清除
lsblk /dev/sdb # 无分区信息

1.1 找到U盘位置(已挂载)

1
sudo fdisk -l

如图,我的在/dev/sdb

1.2 格式化U盘

1
sudo  mkfs  -t  vfat  /dev/sdb

-t 后面是格式化为哪种文件系统格式,vfat就是fat32格式,最后加U盘位置
有时候被占用了无法格式化,需要先卸载u盘,挂载u盘后会在/media/user 下找到
使用umount 卸载

注:这里经常无法卸载,后边使用ubuntu系统自带的硬盘管理来卸载即可

2 gparted格式化 删除分区
安装 gparted

1
sudo apt-get install gparted

二、 将uboot写入到sd卡到8k偏移处

1
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

三、 新建分区

1 新建BOOT分区,存放linux kernel

2 新建rootfs分区 存放根文件系统

3 将下列三个文件拷贝到BOOT分区

1
2
3
4
5
6
7
1 boot.scr  //看了几个教程都没有提及到这个问题 要搞清楚 荔枝派自带

2 zimage 目录 arch/arm/boot

3 suniv-f1c100s-licheepi-nano.dtb 目录 arch/arm/boot/dts
//命令
sudo cp boot.scr suniv-f1c100s-licheepi-nano.dtb zImage /media/wd/BOOT -rf

4 将rootfs.tar解压到rootfs

1
sudo tar -xvf rootfs.tar  -C /media/wd/rootfs

F1C100s 制作 SD 卡启动

1. SD 卡分区

  • SD 卡分为两个分区:
    • 第1分区:FAT32 格式,用于放置内核镜像、设备树文件和启动脚本(如 boot.scr)。
    • 第2分区:ext4 格式,用于放置根文件系统(rootfs)。

示例分区表:

1
2
/dev/mmcblk0p1 *     2048   18431   16384    8M  c W95 FAT32 (LBA)
/dev/mmcblk0p2 18432 7774207 7755776 3.7G 83 Linux
  • 其中第1分区从第2048扇区(约1MB)开始。

2. U-Boot 写入说明

  • U-Boot 是裸机启动程序,不能作为普通文件放在 FAT 分区里。

  • 正确做法是将 U-Boot 二进制文件(通常为 u-boot-sunxi-with-spl.bin)写入 SD 卡的前 1MB 空间,通常从 8KB(seek=8)处开始写入

  • 写入命令示例:

    1
    sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8 conv=fsync
  • 这样写不会破坏 SD 卡的 MBR 和分区表,也不会影响 FAT/ext4 分区。


3. boot.env 与 boot.scr 的关系

  • boot.env 是一个纯文本格式的 U-Boot 脚本,里面写启动命令。
  • U-Boot 不会直接识别 boot.env,必须用 mkimage 工具将其转换成二进制脚本文件 boot.scr

转换命令:

1
mkimage -C none -A arm -T script -d boot.env boot.scr
  • 生成的 boot.scr 放入 FAT 分区根目录,U-Boot 启动时会自动执行。

4. F1C100s 启动流程

  1. 设备上电后,硬件首先读取 SD 卡前部的 U-Boot。
  2. U-Boot 初始化硬件,挂载第1分区(FAT32)。
  3. U-Boot 加载并执行 boot.scr 脚本。
  4. 脚本加载内核(zImage)和设备树文件(.dtb)。
  5. 启动 Linux 内核,挂载根文件系统(ext4 分区)。

5. 如何写入 U-Boot 不破坏分区

  • 查看分区起始扇区:
1
2
sudo fdisk -l /dev/mmcblk0
AI运行代码bash1
  • 确认第1分区起始扇区(通常≥2048,代表1MB起始)。
  • 使用 dd 命令跳过前8KB,写入 U-Boot:

四、应用编译

驱动开发过程中有时候需要编写简单的应用测试程序,由于编译根文件用的buildroot,所以在编译应用程序也用同样的交叉工具链。
进入buildroot主目录,进入output/host/,
在 usr/local 目录下新建一个 arm-gcc-app 目录:

1
sudo mkdir /usr/local/arm-gcc-app

然后将 output/host/目录下的文件全部拷贝到/usr/local/arm-gcc-app/目录下:

1
sudo cp -a ./* /usr/local/arm-gcc-app/

接下来我们添加环境变量,打开/etc/profile 文件,在末尾添加路径:

注意: 加export是环境变量,在/etc/profile加载后别处可以引用。不加就是普通变量了,只能文件内用。
验证:在终端中输入 arm-linux-,然后双击 Tab 按键,此时会出
现如下内容:

五、工具安装

1.串口传输工具Lrzsz

感谢万能的坑友,我搜索了一下,buildroot中确实有这个功能,不需要下载;,找到了它位于这个目录中:
Target packages —>
Networking applications —>
[v] lrzsz
勾选之后,编译,根文件系统中就有这个工具了。

六、问题记录

第一次进入linux,命令号只显示#号

解决 修改/etc/profile

在末尾处 输入 重启板子即可

1
export PS1='[\u\@\h: \w\a]$'

慎用空格、TAB

在编写一个Makefile工具时,出现Makefile:7: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.这个问题,
将空格用TAB键代替
用vim编辑makefile 错误的会现红色

VIM非正常退出

参考链接:https://blog.csdn.net/sunsi_10/article/details/78232207
交换文件 “~/.add.py.swp” 已存在! 以只读方式打开([O]), 直接编辑((E)), 恢复(®), 删除交换文件((D)), 退出((Q)),中止((A)):

产生原因:文件的非正常关闭。

解决办法:删除add.py.swp文件,该文件是隐藏文件所以使用la查看,使用语句rm -r add.py.swp删除该文件,再次打开文件不会产生该问题。

快捷方式目录

进入 /usr/share/applicatoions,找到所需的软件的快捷方式,拷贝到桌面就可以了。

参考:https://blog.csdn.net/weixin_45881223/article/details/126145992


其他方法

全志f1c100s系统部署TF卡指导_linux5版本

1、安装交叉编译链Lib

此交叉链接只能编译uboot、linux内核、rootfs。编译具体程序的时候需要使用rootfs中的交叉编译链。

1.1、下载交叉编译链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
下载
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 cp -r ./gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi /opt/
设置全局
sudo gedit /etc/bash.bashrc
# 在文件末尾 添加以下内容
PATH="$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin"
# 添加完毕
# 使路径生效
source /etc/bash.bashrc
此时可用 arm-linux-gnueabi-gcc -v 进行测试

1.2、安装一些lib

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install python
sudo apt-get install swig
sudo apt-get install python-dev
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install zlib1g-dev libssl-dev
sudo apt install libssl-dev
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install automake
sudo apt-get install texinfo
sudo apt install pkg-config
sudo apt install pkgconf
sudo apt-get install git

2、编译uboot

2.1、克隆uboot版本

1
2
3
4
5
6
git clone https://github.com/Lichee-Pi/u-boot.git
cd u-boot
# 查看分支
git branch -a
# 切换到 Nano 分支
git checkout -f nano-v2018.01

2.2、选择TF或者SPI版本

MenuConfig

1
2
# 进行可视化配置,我没有配置,直接按默认就行了
make ARCH=arm menuconfig

TF版本

1
2
此处告知make采用arm-linux-gnueabi下的所有交叉编译工具,目标架构为Arm
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_defconfig

SPI版本

1
2
此处告知make采用arm-linux-gnueabi下的所有交叉编译工具,目标架构为Arm
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_spiflash_defconfig

2.3、开始编译

1
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4

编译完成后在u-boot目录下找到u-boot-sunxi-with-spl.bin文件即为可烧录的文件

2.4、烧录uboot

因为没有原生的ubuntu系统,所以只能在windows下烧录,下载如下工具:

短接spi flash的1和4脚,然后不要插TF卡,上电后f1c100s自动进入了烧录模式,测试可以烧录uboot

2.5、uboot适配屏幕

1
2
3
4
5
6
7
8
9
10
11
12
13
进入uboot配置界面
make ARCH=arm menuconfig

选择arm-architecture
使能Enable graphical uboot console on HDMI, LCD or VGA

LCD panel timing details输入详细参数 对于800x480的屏幕

x:480,y:272,depth:18,pclk_khz:10000,le:42,ri:8,up:11,lo:4,hs:1,vs:1,sync:3,vmode:0

x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0
编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4

2.6、uboot的启动脚本

建立文件 boot.cmd

1
2
3
4
setenv bootargs console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 rw
load mmc 0:1 0x80C00000 suniv-f1c100s-licheepi-nano.dtb
load mmc 0:1 0x80008000 zImage
bootz 0x80008000 - 0x80C00000

使用u-boot源码,在其下的tools目录中有一个mkimage工具生成boot.scr

1
./mkimage -C none -A arm -T script -d ../../boot.cmd ../../boot.scr

得到的boot.scr需要放到分区的第一个分区文件

3、分区TF卡

3.1、将TF卡分两个区

分区1用于存放系统启动和内核相关文件,格式化为FAT,一般只需要分配32MiB空间

  • boot.scr (指引u-boot加载内核的文件)
  • zImage (系统内核)
  • suniv-f1c100s-licheepi-nano.dtb (设备树文件)

分区2用于存放根文件系统,格式化为ext4格式,分配所有剩余的空间

3.2、分区工具GParted

直接安装即可,为图形工具

1
sudo apt-get install gparted

插入TF卡,进行分区

1
2
3
前面可以预留2MB空间
第一分区格式化为FAT16模式,空间设计为32MB即可。 label为 boot
第二分区格式化为EXT4模式,剩下的所有空间,或自己设定。 label为 rootfs

分区好之后rootfs会提示错误,使用如下指令进行修复

新的操作系统上使用系统自带的 mkfs.ext4 对文件系统进行了格式化,默认会使用一些新的的特性,这些新的特性在旧的系统上是无法使用的,即在旧的内核上不支持。这个是不支持 has_journal 特性

1
2
3
4
5
6
# 查看文件系统特性
sudo tune2fs -l /dev/sdb2
# 去除has_journal特性
sudo tune2fs -O ^has_journal /dev/sdb2
# 再次查看文件系统特性 has_journal是否删除
sudo tune2fs -l /dev/sdb2

查看分区结果

1
sudo parted -l

3.3、放入文件

第一分区放入uboot启动的脚本

第一分区放入linux的内核 zimage

第一分区放入dtb文件

第二分区放入rootfs

4、编译Linux内核

4.1、获得linux-5.7.1内核。

1
2
3
4
5
进入网站下载对应内核
https://cdn.kernel.org/pub/linux/kernel/v5.x/
或直接下载
https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.7.1.tar.gz
解压后获得内核

4.2、获得f1c100s的项目配置文件

1
2
3
4
linux-licheepi_nano_defconfig
然后将该文件放入到 arch/arm/configs/
然后回到linux的根目录执行如下指令来配置项目
mv arch/arm/configs/linux-licheepi_nano_defconfig ./config

4.3、使用MenuConfig

1
2
make ARCH=arm menuconfig
保存即可

4.4、编译试试?

1
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4

5、适配我们的开发板

arch/arm/boot/dts

目录下,分别修改suniv-f1c100s.dtsisuniv-f1c100s-licheepi-nano.dts 两个文件。

这两个文件很重要。

5.1、适配TF卡

修改suniv-f1c100s.dtsi文件

首先添加头文件(如果有则忽略)

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

在soc->pio 下添加如下代码

1
2
3
4
mmc0_pins: mmc0-pins {
pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";
function = "mmc0";
};

soc下添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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>;
};

修改suniv-f1c100s-licheepi-nano.dts文件,在根节点添加如下代码

1
2
3
4
5
6
reg_vcc3v3: vcc3v3 {
compatible = "regulator-fixed";
regulator-name = "vcc3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};

外部添加mmc0使能代码

1
2
3
4
5
6
&mmc0 {
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
};

5.2、适配音频

获得 Linux-5.7_音频补丁测试通过.zip 文件,解压后和linux内核代码进行比较,并将补丁放进去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/drivers/clk/sunxi-ng/ccu-suniv-f1c100s.c
这个文件整体覆盖

/drivers/dma/Kconfig
修改如下部分:
depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUNIV
default (MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUNIV)

/drivers/dma/sun4i-dma.c
这个文件整体覆盖

/include/dt-bindings/clock/suniv-ccu-f1c100s.h
这个文件整体覆盖

/sound/soc/sunxi/sun4i-codec.c
这个文件整体覆盖

修改suniv-f1c100s.dtsi设备树文件

首先添加sun41-a10.h引用。

1
#include <dt-bindings/dma/sun4i-a10.h> //添加头文件

然后在soc节点下,添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
dma: dma-controller@1c02000 {
compatible = "allwinner,suniv-f1c100s-dma";
reg = <0x01c02000 0x1000>;
interrupts = <18>;
clocks = <&ccu CLK_BUS_DMA>;
resets = <&ccu RST_BUS_DMA>;
#dma-cells = <2>;
};

codec: codec@1c23c00 {
compatible = "allwinner,suniv-f1c100s-codec";
reg = <0x01c23c00 0x400>;
interrupts = <21>;
clocks = <&ccu CLK_BUS_CODEC>,
<&ccu CLK_CODEC>;
clock-names = "apb", "codec";
resets = <&ccu RST_BUS_CODEC>;
dmas = <&dma SUN4I_DMA_NORMAL 0x0c>,
<&dma SUN4I_DMA_NORMAL 0x0c>;
dma-names = "rx", "tx";
status = "disabled";
};

修改suniv-f1c100s-licheepi-nano.dts设备树,使解码方式工作

1
2
3
4
5
6
7
&codec {
allwinner,audio-routing =
"Headphone", "HP",
"Headphone", "HPCOM",
"MIC", "Mic";
status = "okay";
};

配置MenuConfig

配置codec

1
2
3
4
5
Device Drivers
<*> Sound card support
<*> Advanced Linux Sound Architecture
<*> ALSA for SoC audio support
-> Allwinner SoC Audio support 使能

配置dma

1
2
Device Drivers 
<*> DMA Engine support

完成


相关链接(侵删)

  1. (主要参考)linux(全志F1C100S/F1C200S)系列01:初始环境搭建
  2. OpenWrt编译报错——configure: error: you should not run configure as root
  3. 【问题解决】报错:ImportError: No module named _libfdt
  4. 全志f1c100s系统部署TF卡指导_linux5版本
  5. F1C100s 制作 SD 卡启动

=================我是分割线=================

欢迎到公众号来唠嗑: