f1c100s 荔枝派 系统移植

一。交叉编译环境配置 

1.1下载交叉工具链:https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/

1.2解压安装

在home目录下新建 工程目录:mkdir  f1c100s_project

将windows下的gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz 放置在/home/f1c200s/f1c200s_project目录下

解压:tar -vxf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz

其中tar解压缩命令格式如下:

选项

含义

-x

对 tar 包做解打包操作。

-f

指定要解压的 tar 包的包名。

-t

只查看 tar 包中有哪些文件或目录,不对 tar 包做解打包操作。

-C 目录

指定解打包位置。

-v

显示解打包的具体过程。

将解压的文件复制到/usr/local/arm/中

进入目录:cd   /usr/local/arm/

拷贝:sudo cp -rf /home/f1c200s/f1c200s_project/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi ./

1.3添加该交叉编译器的环境变量

只有这样编译器才能在任何目录或者任何位置打开的终端中执行,打开~/.bashrc文件 (修改.bashrc文件,只是针对某一个特定的用户;修改/etc/profile文件,它是针对于所有的用户),写入以下内容:

cd /home/f1c200s/

打开文件:sudo vim .bashrc

在文件末尾添加: 

export PATH=$PATH:/usr/local/arm/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin

保存退出:wq。

使环境生效:source ~/.bashrc

验证是否成功:arm-linux-gnueabi-gcc -v

二. Uboot移植

bootloader主要的工作就是引导 Linux 内核启动,常见的bootloader有 U-Boot、vivi、RedBoot 等等

2.1 uboot拉取

从gitee上拉取对 Nano 进行了适配的 u-boot:

安装git工具:sudo apt-get install git

拉取代码:git clone https://gitee.com/LicheePiNano/u-boot.git

cd u-boot

# 查看分支

git branch -a

# 切换到 Nano 分支

git checkout nano-lcd800480 

u-boot对于新手来说目录层级稍显复杂,您可参考下表进行快速的熟悉和目标文件定位

2.2uboot默认配置

如上图所示,为uboot的configs目录下的两个荔枝派的配置文件,第一个licheepi_nano_defconfig    是针对TF卡的配置文件,第二个licheepi_nano_spiflash_defconfig是针对flash的启动文件,显然我们需要选择第一个配置文件编译uboot,因为我们只有TF卡一种存储介质,没有flash。下面是编译指令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_defconfig

为了避免使用类似于上方的繁琐编译指令,在uboot根目录Makfile中加入如下内容:

 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

这样我们可以通过以下简洁的代码进行uboot配置: 

# 进入u-boot目录

cd u-boot/ 

# 加载配置文件

make licheepi_nano_defconfig   (报错可能没有配置ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

  经过以上操作,默认配置文件licheepi_nano_deconfig已经写入到,/uboot/.config文件中,这是根据默认配置文件,生成的uboot的最终配置文件,这个配置文件记录了所有配置选项的宏开关,我们可以通过宏开关对其进行修改。

2.3 uboot图形界面配置

2.3.1使用make menuconfig命令进行图形界面配置

ubootEnable boot arguments 选项上点击空格,弹出Boot arguments选项,选中回车输入以下内容后回车保存。用来配置串口,等待5秒,文件系统挂载盘符  

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

setenv bootargs "console=tty1 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw"  使用uboot 命令

2.3.2同样的操作输入bootcmd的值,输入完成后如下图所示。

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

setenv bootcmd "load mmc 0:1 0x80008000 zImage;load mmc 0:1 0x80c08000 suniv-f1c100s-licheepi-nano.dtb;bootz 0x80008000 -x80c08000;" 在uboot下 使用 命令添加

如果移植在片上flash ,使用如下:bootargs=console=ttyS0,115200 panic=5 rootwait root=/dev/mtdblock3 rw rootfstype=jffs2

bootcmd=sf probe 0 50000000; sf read 0x80C00000 0x100000 0x4000; sf read 0x80008000 0x110000 0x400000; bootz 0x80008000 - 0x80C00000

2.3.3若要在套餐中附带的LCD上输出显示

请通过配置 ARM architecture --> Enable graphical uboot console on HDMI, LCD or VGA 为 Y

接着配置同级的 LCD panel timing details 为:

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

注:此块屏为为  480*272规格,如为800*480  请尝试如下配置:

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

并将 LCD panel backlight pwm pin 设为:PE6 (查自 Nano 原理图)

2.4uboot编译

在进行编译之前需要在Ubuntu 中安装 ncurses 库,否则可能编译会报错,安装命令如下:

sudo apt-get install libncurses5-dev

使用make -j8进行编译

其中-j8代表处理器核心数。编译完成,在根目录下找到u-boot-sunxi-with-spl.bin文件,该文件为最终烧录文件。

2.5烧录bin文件

只要将u-boot-sunxi-with-spl.bin烧录到tf卡的8k偏移地址处就可以了,至于为什么,上面的引用已经解释清楚了。将准备号的TF卡插入读卡器,使用如下块搬移命令进行烧写:

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

if    文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

of   文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

bs  bytes:同时设置读入/输出的块大小为bytes个字节。

seek  blocks:从输出文件开头跳过blocks个块后再开始复制。

这里的输出文件(of)为主机电脑的/dev/sdb文件,也就是插入的读卡器代表的TF卡。

烧录完成,如下图所示,然后弹出读卡器之后再拔出,否则可能损坏读卡器。

2.6 uboot启动测试

将开发板使用数据线与电脑相连,打开串口调试工具,根据bootargs参数设置串口通信参数:

选中端口后,波特率设置为115200:

可以看到uboot版本和编译时间:

三 .   内核移植

3.1内核源码获取

1.下载Linux5.7.1源码,下载后完成后,将代码复制到Ubuntu中并解压。

https://mirror.bjtu.edu.cn/kernel/linux/kernel/v5.x/

  1. 在Ubuntu上创建自己的文件夹,打开终端拉取

git clone https://gitee.com/LicheePiNano/Linux.git

3.2 内核配置与编译

基础配置与编译

解压完成后,首先在顶层Makfile中指定架构和交叉编译工具。注意:arm必须是小写.

在linux源码目录下:sudo vim Makefile 

Linux内核也需要进行配置,使用荔枝派的配置文件, 在arch/arm/configs文件夹中,在根目录使用以下命令配置Linux内核:

Make f1c100s_nano_linux_defconfig (针对2拉取的代码)

可能会报错:

 使用如下命令安装组件:

sudo apt-get install flex

sudo apt-get install bison -y

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig 配置菜单栏

使用make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8

命令编译,经过漫长的等待后,在 arch/arm/boot目录下生成内核文件:zImage,在arch/arm/boot/dts目录下设备树文件:suniv-f1c100s-licheepi-nano.dtb。

如果出现以下错误,使用sudo apt install libssl-dev命令安装对应缺失库文件即可。

修改屏幕设备树,适配当期使用的屏幕:

~/f1c100s/Linux$ sudo vim arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts

 3.3 TF卡分区方式1:

1.初见licheepi-zero-CSDN博客

uboot移植的时候bootcmd变量记录了内核文件(zImage)和设备树(.dtb文件)的存放位置,那么现在我们就要准备好TF卡的分区,一旦编译出内核文件和设备树文件,就可以放到TF卡的指定位置,启动Linux内核。

打开终端 sudo apt-get install gparted

打开软件sudo gparted

我们需要将TF卡分区如下,其中uboot只能识别FAT16格式,EXT4格式为Linux内核识别格式。注意:一定要把上面图片中的分区删除,否则无法识别到启动文件(zImage、.dtb)。

分区 分区一 分区二

名称 kernel rootfs

分区格式 FAT16 EXT4

大小 32M(可以随意填写) 剩余空间

注意需要给uboot预留1M的空间,在【之前的空余空间】选择1M即可,在上面的可视化分区中无法看到这个预留空间。

3.4 TF卡分区 方式2:

分区【系统移植】SD卡 分区_sd卡分区-CSDN博客

先将SD 卡进行格式化。然后与虚拟机连接。

sudo fdisk -l     # 首先查看电脑上已插入的TF卡的设备号

sudo umount /dev/sdb1 # 若自动挂载了TF设备,请先卸载

sudo fdisk /dev/sdb   # 进行分区操作

# 若已存分区即按 d 删除各个分区

# 通过 n 新建分区,第一分区暂且申请为32M(足够大了...),剩下的空间都给第二分区

# w 保存写入并退出

sudo mkfs.vfat /dev/sdb1 # 将第一分区格式化成FAT

sudo mkfs.ext4 /dev/sdb2 # 将第一分区格式化成EXT4

3.5 内核烧录

将上面编译产生的zImage、suniv-f1c100s-licheepi-nano.dtb两个文件拷贝到KERNEL分区。将TF卡插好之后上电,打开串口调试,按下复位按键,等待uboot启动,5秒倒计时结束,读取两个文件,启动Linux内核。至此,Linux内核移植完成,下一步是Linux根文件系统(rootfs)。

  • 根文件系统

文件系统是对一个存储设备上的数据和元数据进行组织的机制,这种机制有利于用户和操作系统的交互。

4.1、buildroot下载

1. 方式一:

使用buildroot制作根文件系统,首先进入官网,下载根文件系统buildroot2018.2.11版本

Buildroot - Making Embedded Linux Easy

2.方式二:

首先安装一些依赖,比如linux头文件

apt-get install linux-headers-$(uname -r)

下载:wget https://buildroot.org/downloads/buildroot-2021.02.4.tar.gz

解压:tar xvf buildroot-2021.02.4.tar.gz

进入目录:cd buildroot-2021.02.4/

4.2、根文件系统制作

 解压完成后进入文件系统根目录,清理工程后,进入图形界面配置:

make clean

make menuconfig

图形配置界面如下图所示,使用方向键选择不同选项,空格进行选中,回车进行确认。

Target options选项的配置如下图所示

第一个选项为架构选择,这里选择ARM架构小端模式,

第二个为输出的二进制文件格式,这里选择EFL格式,

第三个为架构体系,这里选择arm926t,因为F1C200S/F1C100S的架构就是这个架构,

第四个为矢量浮点处理器,这里不勾选,因为对于F1C200S/F1C100S而言,其内部没有浮点运算单元,只能进行软浮点运算,也就是模拟浮点预运算。

第五个为应用程序二进制接口,这里选择EABI,原因是该格式支持软件浮点和硬件实现浮点功能混用。

第六个为浮点运算规则,这里使用软件浮点

第七个选择指令集,这里选择ARM指令集,因为thumb主要针对Cortex M系列而言的,对于运行操作系统的A系列以及ARM9和ARM11而言,使用的都是32位的ARM指令集。

Toolchain按照下方配置(打开了一些功能)可以在开发板上直接编译程序。

C library (musl) # 使用musl减小最终体积。

登录的时候会显示 “Welcome to f1c200s linux system.” ,并且我们设置了root用户密码为“root”。

配置完成后保存,使用make命令进行编译,从下面可以看出,buildroot的编译需要网络支持,以通过网络配置我们选择的内容。 当然如果你的虚拟机无法连接网络,请看虚拟机ubuntu桥接怎么联网,或者是虚拟机net模式访问互联网。

终于编译完成了!编译完成后,在buildroot根目录的output/images目录下生成一个rootfs.rar文件,这个就是我们心心念念的根文件系统。

输出文件全部在output/目录下:

images/ — 存放编译后产生的所有镜像文件( 内核镜像 , 加载引导镜像 和 根文件系统镜像)

build/ — 存放所有的组件除了构建交叉编译工具链的组件 , 在这个目录里面每一个功能对应一个子目录存放他们各自的组件.

staging/ — 包含一个类似于根文件系统等级层次的层级 . 这个目录包含了 安装的交叉编译工具链 和 所有被选择用于目标板的所有用户空间包.

target/ — 包含了根文件系统,但不能用于你的开发板的

host/ — 包含了我们需要的交叉编译工具集

3、根文件系统移植

将上面得到的rootfs.rar解压到TF卡的第二个分区,也就是rootfs分区,不要解压完成在复制过去,因为解压出来好多文件夹。两种选择,要么把压缩包复制到rootfs分区,解压后删除压缩包,要么直接解压到第二分区。使用如下命令将压缩包解压到rootfs分区后如下图所示:

sudo tar -vxf rootfs.tar  -C  /media/sd 卡分区二/

4、根文件系统加载

TF卡第二个分区内已经放置了我们制作好的根文件系统,将TF卡插到开发板上并上电启动,打开串口调试助手,设置波特率115200,可以看到下面的内容,uboot和内核启动成功。

root为管理员用户名,密码为前面设置的root

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/342583.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark MLlib 机器学习详解

目录 &#x1f349;引言 &#x1f349;Spark MLlib 简介 &#x1f348; 主要特点 &#x1f348;常见应用场景 &#x1f349;安装与配置 &#x1f349;数据处理与准备 &#x1f348;加载数据 &#x1f348;数据预处理 &#x1f349;分类模型 &#x1f348;逻辑回归 &a…

C# FTP/SFTP 详解及连接 FTP/SFTP 方式示例汇总

文章目录 1、FTP/SFTP基础知识FTPSFTP 2、FTP连接示例3、SFTP连接示例4、总结 在软件开发中&#xff0c;文件传输是一个常见的需求。尤其是在不同的服务器之间传输文件时&#xff0c;FTP&#xff08;文件传输协议&#xff09;和SFTP&#xff08;安全文件传输协议&#xff09;成…

前端图片在切换暗黑模式时太亮该怎么办?

通过css中的filter属性来实现&#xff0c;进行图片的色系反转、亮度、对比度调整等 1、invert 反转输入图像&#xff0c;值为 100% 则图像完全反转&#xff0c;值为 0% 则图像无变化 filter: invert(1); 2、blur 给元素应用高斯模糊效果。 filter: blur(5px); 3、brightnes…

C++设计模式-外观模式,游戏引擎管理多个子系统,反汇编

运行在VS2022&#xff0c;x86&#xff0c;Debug下。 30. 外观模式 为子系统定义一组统一的接口&#xff0c;这个高级接口会让子系统更容易被使用。应用&#xff1a;如在游戏开发中&#xff0c;游戏引擎包含多个子系统&#xff0c;如物理、渲染、粒子、UI、音频等。可以使用外观…

Xcode 打包报错Command PhaseScriptExecution failed with a nonzero exit code

解决办法: 1、在Xcode项目中 Pods -> Targets Support Files -> Pods-项目名 -> Pods-项目名-frameworks 中(大约在第44行) 加上 -f 2、CocoaPods版本太旧了,可以尝试升级CocoaPods版本 使用sudo gem update cocoapods更新cocoapods&#xff0c;问题将在1.12.1版本已…

DP读书:如何使用badge?(开源项目下的标咋用)

最近在冲论坛&#xff0c;很少更一些内容了。但遇到了一个真的有趣的&#xff1a; 开源项目下&#xff0c;蓝蓝绿绿的标是怎么用的呢&#xff1f; 这是我的主页Readme&#xff0c;在看一些NXP的主仓时&#xff0c;突然发现没有这个玩&#xff0c;就自己整了个 再比如我的CSDN专…

信号:干扰类别及特征提取

目录 第一部分&#xff1a;干扰类别 1.压制干扰 1.1噪声调幅瞄准式干扰(单音干扰) 1.2噪声调频阻塞式干扰&#xff08;宽带噪声干扰&#xff09; 1.3噪声调频扫频式干扰&#xff08;线性调频&#xff09; 2.欺骗干扰 2.1距离欺骗干扰&#xff08;幅度调制干扰&#xff0…

MySQL—多表查询—内连接

一、引言 &#xff08;1&#xff09;内连接查询语法 内连接查询的是两张表的交集部分的数据。&#xff08;也就是绿色部分展示的数据&#xff09; &#xff08;2&#xff09;内连接有两种形式&#xff1a; 1、隐式内连接 语法结构&#xff1a; 2、显示内连接 语法结构&#xf…

上市即交付,比亚迪秦L DM-i万人交车暨千媒众测开营

6月6日&#xff0c;“引领中级 开创油耗2时代”秦L DM-i万人交车暨千媒众测开营仪式在比亚迪大本营深圳盛大举行。 众多车主代表亲临现场&#xff0c;与全国各地的比亚迪4S店千店联动&#xff0c;将秦L DM-i全国交付推向新的高潮。发布即量产&#xff0c;上市即交付&#xff0…

查看远程桌面端口,查看服务器的远程桌面端口的方法

如果你正在寻找一种方法来检查服务器的远程桌面端口&#xff0c;那么请务必按照以下步骤操作&#xff0c;以确保准确且安全地获取所需信息。这不仅是一个技术问题&#xff0c;更是一个关于效率和安全性的重要议题。 首先&#xff0c;你需要明确&#xff0c;远程桌面端口通常是…

SQLServer 查询指定数据库名和表名及表结构等

查询当前数据库中所有表名&#xff0c;不用指定数据库&#xff0c;选中某数据库直接执行SQL就好 -- U:所有用户表名; S:所有系统表名;V:所有视图表名 SELECT name FROM sysobjects WHERE xtypeU OR xtypeS OR xtypeV 查询指定数据库数据库中所有表名&#xff0c; SELECT TAB…

【西瓜书】4.决策树

1 递归返回情况 &#xff08;1&#xff09;结点包含样本全为同一类别 &#xff08;2&#xff09;属性集为空&#xff0c;没有属性可供划分了 或 有属性&#xff0c;但是在属性上划分的结果都一样 &#xff08;3&#xff09;结点为空结点 **结束时判定该结点的类别遵循如下规则&…

深入理解mysql中的各种超时属性

1. 前言 connectTimeout: 连接超时 loginTimeout: 登录超时 socketTimeout: Socket网络超时&#xff0c;即读超时 queryTimeout: sql执行超时 transactionTimeout:spring事务超时 innodb_lock_wait_timeout:innodb锁等待超时 wait_timeout:非交互式连接关闭前的等待时间 inter…

docker-compose部署 kafka 3.7 集群(3台服务器)并启用账号密码认证

文章目录 1. 规划2. 服务部署2.1 kafka-012.2 kafka-022.3 kafka-032.4 启动服务 3. 测试3.1 kafkamap搭建&#xff08;测试工具&#xff09;3.2 测试 1. 规划 服务IPkafka-0110.10.xxx.199kafka-0210.10.xxx.198kafka-0310.10.xxx.197kafkamp10.10.xxx.199 2. 服务部署 2.1…

数据挖掘与机器学习——聚类算法

目录 无监督学习 聚类算法 概念&#xff1a; 功能&#xff1a; 应用场景&#xff1a; 评判标准&#xff1a; 划分聚类&#xff1a; K-means聚类 逻辑实现&#xff1a; 聚类方式 问题&#xff1a; 解决&#xff1a; 可能存在的问题&#xff1a; 1.初始值对K-means聚…

五个超实用的 ChatGPT-4o 提示词

GPT-4o 是 OpenAI 最近推出的最新人工智能模型&#xff0c;不仅具备大语言模型的能力&#xff0c;而且拥有多模态模型的看、读、说等能力&#xff0c;而且速度比 GPT-4 更快。下面我们就来介绍几个超实用的 GPT-4o 提示词&#xff0c;帮助大家更好地了解 GPT-4o 的功能和应用场…

度安讲 | 第二期「安全左移·业务护航」技术沙龙成功举办

当下&#xff0c;“安全左移”作为落地DevSecOps的重要实践之一&#xff0c;已在业界达成共识。DevSecOps作为一种集开发、安全、运维于一体的软件开发和运营模式&#xff0c;强调在敏捷交付下&#xff0c;“安全”在软件开发生命周期的全覆盖贯穿和核心位置。所谓“安全左移”…

ssh远程管理

SSH远程管理 ssh是一种安全通道协议&#xff0c;只能用来实现字符界面的远程登录。远程复制&#xff0c;远程文本传输。 ssh对通信双方的数据进行了加密。 用户名和密码登录 密钥对认证方式&#xff08;可以实现免密登录&#xff09; ssh 端口号22 网络层 传输层 数据传输…

62. 不同路径

题目 一个机器人位于一个 m x n 网格的左上角&#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; …

Prompt工程与实践

Prompt工程与实践 一、Prompt与大模型 1.1 大模型的定义 大模型本质上就是一个概率生成模型&#xff0c;该模型的模型参数足够大&#xff0c;并且在训练过程中阅读了非常多的各个领域的语料。这个时候&#xff0c;如果通过一个正确的、有效的指令去引导这个模型&#xff0c;…