全志V3S零基础教程
文章目录
- U-boot编译
- 环境配置
- 下载Uboot
- 执行编译
- 分区一(boot分区)设置:
- 分区二(rootfs分区)设置:
- Kernel编译
- 修改参数:添加LCD st7789
- 单独编译设备树
- licheepi buildroot根文件系统
- ubootroot的目录结构
- 选中Target options以选择licheepi对应的架构
- Toolchain 配置交叉工具链
- Target package
- 编译
- 插卡,完成
U-boot编译
环境配置
先换源,避免后续的下载速度太慢
执行 sudo apt-get update
下载一个vim,等下方便修改
sudo apt-get install vim
进入vi配置文件 sudo vi /etc/vim/vimrc
在配置文件设置行距为4并且打开行号
vim的使用这里步做过多讲解,自行百度
进入正题,配置交叉环境,安装gcc编译器,本教程使用的是6.3.1版本
先cd /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
如果出现安全证书过期,请换成http进行下载
解压交叉编译器 sudo tar xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
完成 ls 查看一下文件
添加交叉编译器路径 修改profile文件
sudo vim /etc/profile
再最后一行加入export PATH=命令行路径:$PATH
如:export PATH=/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin:$PATH
保存退出后运行source /etc/profile 生效
或者重启系统生效
备注:如果需要查看路径,终端运行 echo $PATH。 Ubuntu几种路径添加方式对比:(11条消息) ubuntu添加环境变量的四种方法_K_K_yl的博客-CSDN博客_ubuntu添加环境变量
查看编译器是否安装成功,终端运行arm-linux-gnueabihf-gcc -v
成功会返回如下:
将终端退出重新打开一下 安装设备树编译器
终端输入sudo apt-get install device-tree-compiler
下载Uboot
安装git,终端输入sudo apt-get install git
拷贝Uboot到Ubuntu下,终端输入 sudo git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-spi-experimental
克隆失败,重新克隆可以解决
下载完成
进入u-boot
uboot目录结构
├── api 存放uboot提供的API接口函数
├── arch 平台相关的部分我们只需要关心这个目录下的ARM文件夹
│ ├──arm
│ │ └──cpu
│ │ │ └──armv7
│ │ └──dts
│ │ │ └──*.dts 存放设备的dts,也就是设备配置相关的引脚信息
├── board 对于不同的平台的开发板对应的代码
├── cmd 顾名思义,大部分的命令的实现都在这个文件夹下面。
├── common 公共的代码
├── configs 各个板子的对应的配置文件都在里面,我们的Lichee配置也在里面
├── disk 对磁盘的一些操作都在这个文件夹里面,例如分区等。
├── doc 参考文档,这里面有很多跟平台等相关的使用文档。
├── drivers 各式各样的驱动文件都在这里面
├── dts 一种树形结构(device tree)这个应该是uboot新的语法
├── examples 官方给出的一些样例程序
├── fs 文件系统,uboot会用到的一些文件系统
├── include 头文件,所有的头文件都在这个文件夹下面
├── lib 一些常用的库文件在这个文件夹下面
├── Licenses 这个其实跟编译无关了,就是一些license的声明
├── net 网络相关的,需要用的小型网络协议栈
├── post 上电自检程序
├── scripts 编译脚本和Makefile文件
├── spl second program loader,即相当于二级uboot启动。
├── test 小型的单元测试程序。
└── tools 里面有很多uboot常用的工具。
安装make 终端输入 sudo apt-get install make
设置参数
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig
#or sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero480x272LCD_defconfig
#or sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_defconfig
安装libncurses5-dev,终端输入sudo apt-get install libncurses5-dev解决
uboot配置命令
终端输入 sudo make menuconfig
此时会跳出以下配置界面
—按回车,即选择当前菜单
------- 按Y 代表该config选项选中
------- 按N 代表不选中该选项
-------- 按M
代表该驱动编译成**.ko的方式,在系统起来之后,当驱动需要的时候加载---------按/ 可以查找某个选项---------退出<** > ----------按Y选中后的状态
这里面有几个常见的配置选项我们可以看下:
- 第一个Architecture select架构选择,不用质疑这个是ARM架构
- 第二个ARM architecture
这个选项比较重要,主要配置ARM框架下的常用的配置函数以及LCD等参数
DDR配置
选择这个,进入
再进这个
···
Target select (Support sunxi (Allwinner) SoCs) #进去之后可以选择sunxi Soc系列芯片
···
[*] Sunxi SoC Variant # 这个就是对芯片Soc 的选择,我们可以看到配置选择了`sun8i (Allwinner V3s)
(360) sunxi dram clock speed # 配置dram的时钟速率
(14779) sunxi dram zq value # 配置dram的ZQ值,是用来动态加强DDR3的
-*- Board uses DDR2 DRAM # 使用DDR2 DRAM
时钟频率配置#
Boot images --->(1008000000) CPU clock frequency
这里设置了CPU的时钟频率
开机延时设置#
delay in seconds before automatically booting
这个是uboot开机的时候的一个等待时间的秒数,可以改大一点,默认是2s
SPL配置
SPL / TPL ---> 这个就是SPL相关的配置了
[*] MMC raw mode: by sector 按扇区
(0x50) Address on the MMC to load U-Boot from mmc加载uboot的地址
[*] Support GPIO 支持GPIO
[ ] Support I2C 支持I2C
[*] Support common libraries 支持通用lib
[*] Support disk paritions 支持分区
[*] Support generic libraries 支持一般lib库
[*] Support MMC 支持MMC
[*] Support power drivers 支持电源驱动
[*] Support serial 支持串口
spi lcd及串口输出配置
修改include/configs/sun8i.h 使uboot从tf卡启动
不需要LCD的在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=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0"
需要LCD显示的在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"
备注:因为我们需要使用lcd显示跟串口同时输出,所以使用第二种加入后如下
执行编译
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make
编译成功后可以uboot目录发现多出了个u-boot-sunxi-with-spl.bin
如果权限不够,可以给这个文件夹最高权限
sudo chmod -R 777 u-boot
编译成功后可以uboot目录发现多出了个u-boot-sunxi-with-spl.bin
然后需要将SD卡格式化
分区需要在Ubuntu进行,先安装软件
sudo apt-get install gparted
打开查看SD卡是sdb
右键删除fat32
分区一(boot分区)设置:
分区二(rootfs分区)设置:
最终得到
点一下勾勾完成,耐心等待
完成后拔插一下这样就分区成功
烧录到SD卡的8k偏移处
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
Kernel编译
1、安装依赖#
sudo apt install git wget make gcc flex bison libssl-dev bc kmod
2、下载Linux源码
git clone -b zero-5.2.y --depth 1 https://github.com/Lichee-Pi/linux.git
3、编译源码
修改Makefile文件
cd linux
vim Makefile
[364]行 修改为ARCH = arm
[365]行 添加 CROSS_COMPILE = arm-linux-gnueabihf-
[366]行 添加 INSTALL_MOD_PATH = out
修改参数:添加LCD st7789
终端输入make menuconfig
按如下箭头操作
然后选Save并退出
要使用lcd要在设备树上做一些修改
1、sun8i-v3s.dtsi中注释掉自带的视频输出
终端输入vim arch/arm/boot/dts/sun8i-v3s.dtsi
在sun8i-v3s-licheepi-zero-dock.dts增加屏幕驱动节点并注释掉i2c0
&spi0 {
status = "okay";
st7789v: st7789v@0{
compatible = "sitronix,st7789v";
reg = <0>;
status = "okay";
spi-max-frequency = <36000000>;
spi-cpol;
spi-cpha;
rotate = <0>;
fps = <60>;
buswidth = <8>;
rgb;
dc-gpios = <&pio 1 5 GPIO_ACTIVE_HIGH>; //PB5
reset-gpios = <&pio 1 6 GPIO_ACTIVE_HIGH>; //PB6
width = <240>;
height = <320>;
debug = <0>;
};
};
单独编译设备树
终端输入make dtbs
make licheepi_zero_defconfig
make menuconfig #一般不用修改,需要时单独改
make -j16
make -j16 modules #编译模块
make -j16 modules_install #安装模块
make dtbs #编译设备树
编译完成后,zImage在arch/arm/boot/下,驱动模块在out/lib下,设备树在arch/arm/boot/dts下。
然后把zImage,sun8i-v3s-licheepi-zero-dock.dtb放到第一分区
此时插卡上电串口有信息输出,但是没有根文件系统进不去
licheepi buildroot根文件系统
首先安装一些依赖,比如linux头文件:
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
cd buildroot-2017.08/
make menuconfig
ubootroot的目录结构
.
├── arch: #存放CPU架构相关的配置脚本,如arm/mips/x86,这些CPU相关的配置,在制作工具链时,编译uboot和kernel时很关键.
├── board
├── boot
├── CHANGES
├── Config.in
├── Config.in.legacy
├── configs: #放置开发板的一些配置参数.
├── COPYING
├── DEVELOPERS
├── dl: #存放下载的源代码及应用软件的压缩包.
├── docs: #存放相关的参考文档.
├── fs: #放各种文件系统的源代码.
├── linux: #存放着Linux kernel的自动构建脚本.
├── Makefile
├── Makefile.legacy
├── output: #是编译出来的输出文件夹.
│ ├── build: #存放解压后的各种软件包编译完成后的现场.
│ ├── host: #存放着制作好的编译工具链,如gcc、arm-linux-gcc等工具.
│ ├── images: #存放着编译好的uboot.bin, zImage, rootfs等镜像文件,可烧写到板子里, 让linux系统跑起来.
│ ├── staging
│ └── target: #用来制作rootfs文件系统,里面放着Linux系统基本的目录结构,以及编译好的应用库和bin可执行文件. (buildroot根据用户配置把.ko .so .bin文件安装到对应的目录下去,根据用户的配置安装指定位置)
├── package:#下面放着应用软件的配置文件,每个应用软件的配置文件有Config.in和soft_name.mk。
├── README
├── support
├── system
├── toolchain
└── utils # 实用工具
使用make config
进入配置界面。
选中Target options以选择licheepi对应的架构
licheepi用的v3s cpu 参数如下
CPU
ARM Cortex A7 @ 1.2GHz
Support NEON Advanced SIMD instruction
VFPv4 Floating Point Unit
Toolchain 配置交叉工具链
配置成外部工具链
Toolchain type (External toolchain) --->
x ( ) Buildroot toolchain
x (X) External toolchain
在u-boot时已经配置好外部工具,地址在
/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/
选中() Toolchain path (NEW)
,填入path
Toolchain prefix前缀是: arm-linux-gnueabihf
External toolchain gcc version:我们使用的是6.3版本,选中6.x
External toolchain kernel headers series:是在
arm-linux-gnueabihf/libc/usr/include/linux/version.h
里读取内核版本信息。本机的版本是4.6(263680=0x040600, 即4.6.0)
cat /opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h
#define LINUX_VERSION_CODE 263680
External toolchain C library还是选择传统的glibc。需要小体积可以选uclibc(需要自行编译安装)。然后勾选上 [] Toolchain has C++ support?
最终配置
System configuration 配置系统参数
- System hostname:根据需要定义一个字符串,是控制台前面的提示符xxx@vsi,这里改为
(licheepi) System hostname
- Init system:这里选择busybox,轻量级使用非常广泛。可选的有systemV,systemd.
- Root password配置登录密码。
Target package
用于配置一些软件包,例如QT5
Target packages --->
x Graphic libraries and applications (graphic/text) --->
xx [*] Qt5 --->
配置完成退出保存,安装环境
sudo apt-get install g++ patch cpio python unzip rsync bc
编译
make
如果报错,make clean all一下重新编译,这里一定要注意gcc的路径,不然会过不去
编译完成后会在output/images下生成rootfs.tar
解压到第二分区后就能使用了
我喜欢直接拖动文件,启动超级文件权限
sudo nautilus
将子文件全部拖出来,不然还是会进不去系统
默认失能串口登录,需要修改 /etc/inittab :
#console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL
ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GE
如果需要免密码登录,直接
#console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL
ttyS0::respawn:/bin/sh
插卡,完成
全志V3S零基础教程相关推荐
- B站百万播放量Java零基础教程视频(适合Java 0基础,Java初学入门),史上最细Java零基础教学视频
是否还在为学习Java如何入门而烦恼? 是否还在为Java软件如何安装而烦恼? 是否还在找寻着适合零基础的Java视频教程? 动力节点教学总监老杜159集课堂实录Java零基础视频教程,从初学者角度出 ...
- 保姆级的HTML零基础教程少见吧?这是第一节(1)
作者简介 作者名:1_bit 简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者.15-16年曾在网上直播,带领一批程序小白走上程序员之路.欢迎各位小白加我咨询我相关信息,迷茫的你会找到 ...
- 麒麟子Javascript游戏编程零基础教程大纲
大家好,我是麒麟子, 开源项目<幼麟棋牌-四川麻将>(泄漏版叫 <达达麻将>)作者,成都幼麟科技创始人. 开源项目地址(Github与Gitee同步更新): Github ht ...
- 微信小游戏开发零基础教程(一)-CocosCreator
微信小游戏零基础教程(一)-CocosCreator 最终效果预览 准备工作 创建工程 测试第一个场景 最终效果预览 本教程最后制作的游戏效果: 准备工作 下载 微信开发者工具 最新版->下载地 ...
- Make 命令零基础教程
Make这个词,英语的意思是"制作".Make命令直接用了这个意思,就是要做出某个文件.比如,要做出文件a.txt,就可以执行下面的命令. $ make a.txt 但是,如果你真 ...
- Openlayers 6 零基础教程
Openlayers 6 零基础教程 掌握 OpenLayers(JavaScript Web 制图库)并构建 Web 制图应用程序 课程英文名:Openlayers 6 From Scratch W ...
- ROS机器人入门课程《ROS理论与实践》零基础教程(推荐课程)
ROS的入门,对于纯小白的我来说很是痛苦,尤其是听完古月老师的21讲之后,更是浇灭了学习的兴趣,当时还在考虑要不要他的买课,还是算了,反正也听不懂,,,!!! 在一番挣扎之后,发现了赵虚左老师的课程, ...
- OpenMV零基础教程
一.资料导航 "工欲善其事,必先利其器".在正式学习OpenMV之前,你必须知道一条或几条OpenMV的学习途径.这里推荐星瞳科技的中文官网教程,这个教程里面包括了OpenMV I ...
- 《网络安全》零基础教程-适合小白科普
<网络安全>零基础教程 目录 目录 <网络安全>零基础教程 第1章 网络安全基础 什么是网络安全 常见的网络安全威胁 网络安全的三个基本要素 网络安全的保障措施 第2章 网络攻 ...
最新文章
- C++实现Hash表
- 怎么查看自己电脑的配置_怎么查看自己网卡是千兆网卡还是百兆网卡
- DBA巡检常用的SQL语句
- 不要将时间浪费到编写完美代码上
- 利用浏览器调试功能 计算 百度网盘 文件数量
- ubuntun安装ssh,并远程链接服务器操作
- Python SimpleITK实现医学图像增强算法
- python 贴吧自动发帖_python接口自动化3-自动发帖(session)
- 阻止路由跳转得方式_vue中路由跳转的三种方式 简洁易懂
- python钓鱼评论爬取
- CSDN账号注销问题
- duilib开发(七):复杂控件介绍
- 正圆锥体空间方程_计算机基础算法(一)——时间与空间复杂度
- WPF开发之解决程序调用自定义dll库在部分win7电脑上无法运行的情况
- 《疯狂Java讲义》第3章——数据类型和运算符
- 动态页面抓取超级指南_减少页面重量的完整指南
- 生物信息学习--nr/nt 数据库(总+子)构建
- BUAACTF 2021校赛
- 2018最新各大网站软件提交入口 |软件发布
- 城市燃气价格体系及计量、计费