02系统跑起来——基于全志V3S的Linux开发板教程笔记

news2024/11/25 0:35:16

开发环境:Linux系统为Ubuntu 18.04.6 LTS,如在下面操作中提示部分环境/工具缺失未安装,请单独安装。
硬件基本介绍请参考第一篇文章:基于全志V3S的Linux开发板学习笔记01——简介

1. 环境准备

  推荐直接下载完整资源包,减少网络环境操作与git下载的时间,文末直接下载或在下面步骤单独git:
在这里插入图片描述

1) GCC交叉编译器

  GCC强烈推荐是gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf这个版本,不然在后续Uboot测试以太网时,ping操作会导致系统异常。

① 下载编译器资源

  可以从文末平台获取的资源中找到gcc压缩文件拷贝到opt文件夹或者终端输入:

 sudo wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
② 解压文件

终端输入:

sudo tar xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
③ 添加交叉编译器环境

修改/etc/profile文件,新增添加的编译器环境:

sudo vim /etc/profile

在最后一行添加:

export PATH=/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin:$PATH

保存后执行下列命令生效:

source /etc/profile

重启控制台,运行下述命令检查编译器环境:

arm-linux-gnueabihf-gcc -v

在这里插入图片描述

2) 设备树编译器

输入命令:

sudo apt-get install device-tree-compiler

2. Uboot

1)下载

终端输入:

sudo git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-spi-experimental

在这里插入图片描述
  解决过程1:如果在在git clone 时遇到fatal的443拒绝、The TLS Conn…或者相关问题,如下图,可尝试把https改为http方式:
在这里插入图片描述
  解决过程2:或者产生尝试清空DNS缓存后重试,由于我这里使用的是windows跑的Linux虚拟机,清除缓存在windows的CMD控制台输入:ipconfig/flushdns
在这里插入图片描述
  解决过程3:如果在git clone时遇到过早的文件结束符(EOF)问题,一个原因是由于文件过大,超出限制被可以尝试下面方法:

在这里插入图片描述

 git config --global http.postBuffer 524288000

  解决过程4:还有一个方法就是更换网络环境,可以尝试使用手机4G流量创建WIFI热点供电脑下载或者使用网络代理等方式,有时候手机热点的网络会顺利很多。
![[Pasted image .png]]
  解决过程5:如果到这里还不行,还是直接文末拿资源文件夹里的文件吧

2)安装

根据自己的屏幕大小进行编译,终端输入:

sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig
#可选为LicheePi_Zero_800x480LCD_defconfig/LicheePi_Zero480x272LCD_defconfig/LicheePi_Zero_defconfig

在这里插入图片描述

3)配置

终端输入:

sudo make menuconfig

在这里插入图片描述在这里插入图片描述

按键操作:回车\Y \N \M\

① 芯片配置

在这里插入图片描述
在这里插入图片描述
我们可以看到配置选择了sun8i (Allwinner V3s)

② Boot设置

这里可以看到CPU的时钟频率,另外的其他配置大家可以自行了解
在这里插入图片描述
在这里插入图片描述

③ 修改启动与日志输出方式

修改include/configs/sun8i.h :并使uboot从tf卡启动,并使lcd显示跟串口同时输出,终端输入:

sudo vim include/configs/sun8i.h

在这里插入图片描述
在最后插入如下内容:

#define CONFIG_BOOTCOMMAND   "setenv bootm_boot_mode sec; " \
 						   "load mmc 0:1 0x41000000 zImage; " \
 						   "load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb; " \
   						   "bootz 0x41000000 - 0x41800000;"
#define CONFIG_BOOTARGS     "console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw  vt.global_cursor_default=0"

在这里插入图片描述

4)编译

终端输入:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make

这里可能会遇到权限问题,可以使用命令:

sudo chmod -R 777 u-boot

指定文件夹的最高最高权限,编译后会生成u-boot-sunxi-with-spl.bin文件
在这里插入图片描述
在这里插入图片描述

5)烧录

① 安装Gparted

这里使用了软件gparted,终端输入:

sudo apt-get install gparted

在这里插入图片描述

② SD卡分区

首先对卡进行格式化,然后删除当前分区:
在这里插入图片描述
新建Boot分区:
在这里插入图片描述
  Boot分区大小设置为16M,fat16系统,名称为boot,注意预留“之前的空余空间”,用于Uboot烧录:
在这里插入图片描述

  新建rootfs分区,用于主系统运行使用,我们把剩下的部分都分给rootfs区,注意系统与Boot分区不同,采用EXT4格式:
在这里插入图片描述

  分区后的存储如下,然后我们点击对勾完成分区配置:
在这里插入图片描述
在这里插入图片描述

分区后的状态如下:
![[Pasted image .png]]
重新连接或插拔存储设备,可以看到如下分布:
在这里插入图片描述

③ 烧录Boot

Boot烧录到SD卡的8k偏移处:

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

在这里插入图片描述

6)运行

虽然我们还没有准备系统镜像,但可以先插入到开发板中运行一下Boot:
在这里插入图片描述

查看串口日志:
在这里插入图片描述
在这里插入图片描述
日志中可以看到Boot 2秒后进入主系统,只不过我们没有系统镜像和设备树文件,接下来我们开始主系统的配置。

3. Kernel

1)安装相关依赖

sudo apt install git wget make gcc flex bison libssl-dev bc kmod

2)下载内核源码

终端输入:

git clone -b zero-5.2.y --depth 1 https://github.com/Lichee-Pi/linux.git

在这里插入图片描述

3)配置编译器

修改makefile文件,终端输入:

vim Makefile

![[Pasted image .png]]

[364] ARCH             = arm
[365] CROSS_COMPILE    = arm-linux-gnueabihf-
[366] INSTALL_MOD_PATH = out

在这里插入图片描述

4)编译内核

终端输入:

make licheepi_zero_defconfig
make menuconfig 
make -j16
make -j16 modules
sudo make -j16 modules_install
make dtbs #编译设备树

初次编译时间会比较长,请耐心等待
在这里插入图片描述
编译完成后,zImage在arch/arm/boot/下,驱动模块在out/lib下,设备树在arch/arm/boot/dts下,把zImage,sun8i-v3s-licheepi-zero-dock.dtb放到Boot中
在这里插入图片描述
在这里插入图片描述
Boot区内容如下:System xxx文件夹默认生成的,可以删除可以忽略
在这里插入图片描述

5)插卡运行

目前我们烧录了Uboot,放置了zImage内核映像和设备树文件,接下来插卡上电运行一下查看效果:
在这里插入图片描述
在这里插入图片描述

可以看到屏幕已经正常驱动显示,以及日志打印,由于没有根文件系统,现在系统还是无法跑起来,接下来准备根文件系统。

4. Buildroot

1)下载编译

安装相关依赖,终端输入:

apt-get install linux-headers-$(uname -r)
apt-get install libncurses5-dev
apt-get install wget
apt-get install gcc automake autoconf libtool make

下载资源,终端输入:

wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz

解压资源,可以直接解压或终端输入:

tar xvf buildroot-2017.08.tar.gz

![[Pasted image 20241021192553.png]]

2)配置系统

终端输入:

make menuconfig

在这里插入图片描述
芯片选择V3S的配置,Target options:
在这里插入图片描述

3)配置交叉工具链

在构建u-boot时已经配置好外部工具链,所以下面的type选择外部,并修改为预装的配置,路径改为自己工具链的路径,需要根据自己的工具链版本进行选择,External toolchain C library还是选择传统的glibc,需要小体积可以选uclibc,然后勾选上C++的支持,最后配置如下:
在这里插入图片描述

4)配置系统参数

配置用户名、密码(后面会设置免密码登录,这里大家根据需要选择):
在这里插入图片描述

5) 编译

配置安装环境,终端输入:

sudo apt-get install g++ patch cpio python unzip rsync bc

编译,终端输入:

make

编译成功后,在output/images下会生成rootfs.tar
![[Pasted image .png]]

将文件解压并拷贝到rootfs分区中,如果文件无法移动,可以开启超级文件权限,终端输入:

sudo nautilus

![[Pasted image .png]]

为了方便我们免密码直接进入系统,需要编辑/etc/inittab,终端输入:

vi /etc/inittab

改为如下所示:

#console::respawn:/vi ASA/getty -L  console 0 vt100 # GENERIC_SERIAL
console::respawn:-/bin/sh

![[Pasted image .png]]
然后我们插卡运行:
![[.jpg]]

我们也可以在串口中输入ls命令遍历目录信息:
在这里插入图片描述
截止到这里,我们的系统基本制作完成了,接下来完成板子其他资源的验证。


如遇到部分资源git无法下载,可公众HAO【IOT趣制作】私信【1022】,直接下载GCC编译器、Linux镜像、Uboot、Buildroot资源文件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用户思维,才是银行理财的杀手锏

近些年,伴随着居民理财需求的迸发,银行理财市场规模逐步扩大。 在前不久的2024Inclusion外滩大会上,麦肯锡发布了《银行理财六大趋势》,其中提到在财富管理客户风险偏好普遍下移的大背景下,银行理财将是客户财富管理配…

信息安全工程师(79)网络安全测评概况

一、定义与目的 网络安全测评是指参照一定的标准规范要求,通过一系列的技术、管理方法,获取评估对象的网络安全状况信息,并对其给出相应的网络安全情况综合判定。其对象主要为信息系统的组成要素或信息系统自身。网络安全测评的目的是为了提高…

学习笔记:微服务技术栈(一)服务治理框架SpringCloud

教学视频链接: 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 目录 前言一、认识微服务1.1 服务架构1.2 微服务架构1.3 SpringCloud 二、服务拆分及远程调用2.1 服务拆分细节2.2 服务间调用 …

医院数字影像信息系统源码,拥有完整知识产权,能够同HIS、电子病历、体检系统无缝对接

数字医学影像系统源码,RIS/PACS系统源码,医院数字影像信息系统源码。 开发技术:基于C/S架构,C#开发语言,数据库服务器采用Oracle数据库。三甲以下的医院都能满足 医学影像系统PACS系统是应用在医院影像科室的系统&…

LabVIEW for Linux 介绍

LabVIEW for Linux 介绍 1. 兼容性 LabVIEW for Linux 设计用于多种 Linux 发行版,包括 CentOS、Ubuntu 等。在安装之前,务必检查与您特定发行版版本的兼容性。 2. 程序移植 可移植性:在许多情况下,LabVIEW 程序(VI…

使用NVM自由切换nodejs版本

一、NVM介绍 在日常开发中,我们可能需要同时进行多个不同NodeJS版本的项目开发,每个项目所依赖的nodejs版本可能不一致,我们如果只安装一个版本的nodejs,就可能出现node版本冲突问题,导致项目无法启动。这种情况下&am…

职场日常:多年的测试工程师如何继续在测试行业中砥砺前行

大家好,今天我们一起聊聊测试工程师在职业、在团队、在家庭中如何更好的做好角色。 作为一个工作了多年测试工作的大牛来说,从今天开始或许未来会因为各个方面的原因可能不在从事软件测试了,但是会继续总结过往的经验,从事这么多…

文件操作:Xml转Excel

1 添加依赖 Spire.Xls.jar <dependency><groupId>e-iceblue</groupId><artifactId>spire.xls</artifactId><version>5.3.3</version></dependency>2 代码使用 package cctd.controller;import com.spire.xls.FileFormat; im…

【Homework】【1--3】Learning resources for DQ Robotics in MATLAB

Learning resources for DQ Robotics in MATLAB Lesson 1 代码 % Step 2: Define the real numbers a1 and a2 a1 123; a2 321;% Step 3: Calculate and display a3 a1 a2 a3 a1 a2; disp([a3 (a1 a2) , num2str(a3)])% Step 4: Calculate and display a3 a1 * a2 a3…

「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目

本篇将带领你实现一个互动性十足的灯光控制小项目&#xff0c;用户可以通过点击按钮来控制灯光的开关。该项目将涉及状态管理、动态图片加载以及按钮交互&#xff0c;是学习鸿蒙应用开发的重要基础。 关键词 UI互动应用状态管理动态图片加载用户交互 一、功能说明 在这个灯光…

雷池社区版 7.1.0 LTS 发布了

LTS&#xff08;Long Term Support&#xff0c;长期支持版本&#xff09;是软件开发中的一个概念&#xff0c;表示该版本将获得较长时间的支持和更新&#xff0c;通常包含稳定性、性能改进和安全修复&#xff0c;但不包含频繁的新特性更新。 作为最受欢迎的社区waf&#xff0c…

七.numpy模块

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库&#xff0c;支持大量的维度数组与矩阵运算&#xff0c;此外也针对数组运算提供大量的数学函数库。 NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发&#xff0c;2005 年&#xff0c;Travis Oliphant…

RK3568平台开发系列讲解(内存篇)Linux 内存优化

🚀返回专栏总目录 文章目录 一、如何正确采集 Linux 内存可用空间二、系统内存优化参考步骤2.1、优化 Linux Kernel module 所占用的内存空间2.3、将 Wi-Fi built-in kernel2.4、优化 Linux 文件系统所占用的内存空间2.5、上层优化2.6、客户定制优化2.6.1、对具体客户的具体产…

Caffeine 手动策略缓存 put() 方法源码解析

BoundedLocalManualCache put() 方法源码解析 先看一下BoundedLocalManualCache的类图 com.github.benmanes.caffeine.cache.BoundedLocalCache中定义的BoundedLocalManualCache静态内部类。 static class BoundedLocalManualCache<K, V> implements LocalManualCache&…

猎板PCB2到10层数的科技进阶与应用解析

1. 单层板&#xff08;Single-sided PCB&#xff09; 定义&#xff1a;单层板是最基本的PCB类型&#xff0c;导线只出现在其中一面&#xff0c;因此被称为单面板。限制&#xff1a;由于只有一面可以布线&#xff0c;设计线路上有许多限制&#xff0c;不适合复杂电路。应用&…

Dinky中配置Flink集群

需要启动yarn-session 进程&#xff0c;在集群服务器 cd /pwd//flink/bin yarn-session -d 启动成功后可以在yarn的资源管理队列进行查看 启动成功后会给出&#xff1a;JobManager Web Interface 在dinky中进行配置&#xff1a; 集群配置 Hadoop 配置&#xff1a; H…

asp.net+uniapp养老助餐管理系统 微信小程序

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 以往流浪猫狗的救助网站相关信息的管理&#xff0c;都是工作人员手工统计。这种方式不但时效性低&#xff0c;而且需要查…

《Ooga》进不去游戏解决方法

Ooga如果遇到进不去游戏的情况&#xff0c;玩家可以采取很多种方法进行解决&#xff0c;其中包括检查设备配置与网络连接&#xff0c;验证游戏文件完整性以及清理游戏缓存。 Ooga进不去游戏怎么办 检查设备配置 确保电脑的配置达到了游戏的最低要求&#xff0c;如果配置不足&…

Kubernetes——part8-2 k8s集群存储解决方案 GlusterFS

一、存储解决方案介绍 1.1 GlusterFS GlusterFS是一个开源的分布式文件系统具有强大的横向扩展能力通过扩展能够支持数PB存储容量和处理数千客户端GlusterFS借助TCP/IP或InfiniBandRDMA网络将物理分布的存储资源聚集在一起&#xff0c;使用单一全局命名空间来管理数据。 1.2…

Kafka 之顺序消息

前言&#xff1a; 在分布式消息系统中&#xff0c;消息的顺序性是一个重要的问题&#xff0c;也是一个常见的业务场景&#xff0c;那 Kafka 作为一个高性能的分布式消息中间件&#xff0c;又是如何实现顺序消息的呢&#xff1f;本篇我们将对 Kafka 的顺序消息展开讨论。 Kafk…