WhyCan Forum(哇酷开发者社区)

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn

您尚未登录。

#1 2020-10-29 20:35:02

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

论坛上之前已经有人玩过这块板子了:淘了一个a20行车记录仪主板,并编译lichee
我早在9月初左右就买了几块这个板子,不过开始的工作着重在导出fex和分析pin assignment上,断断续续折腾到今天才完全让主线uboot带起主线Linux进入文件系统。
本来准备先写一贴讲如何从源码构建u-boot的,不过写到一半发现稍微有点累人,所以先发一贴展示一下板子跑起主线Linux的效果:
u-boot
rootfs
其实为u-boot编写完板级配置并编译后,主要的移植工作就已经完成了。u-boot在这个板子上还有个小坑,或者坦白一点说对我而言是个大坑,之后会在u-boot那贴里详述。主线内核并没有什么移植工作要做,编译好之后和u-boot,设备树和rootfs一起烧进卡里就行了。放心,u-boot的坑并不用各位手动去填,我已经fork了主线u-boot的repo,晚些时候会连坑的patch带初步写好的板级配置一起上传,需要的坛友直接下载编译即可。
当然,目前的板级配置还比较粗糙,外设的功能还有待验证,板上的加速度传感器还没驱动起来。这些都还需要后续工作完善,坛友有精力的话也希望能contribute一下。

离线

#2 2020-10-29 21:51:35

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

适用于该板的u-boot分支仓库:u-boot-sun7i-std-dvr
构建方法:

make CROSS_COMPILE=arm-linux-gnueabihf- A20_std_dvr_defconfig

如果你想微调一些设置的话:

make CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

编译:

make CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc)

产生的bootloader是./u-boot-sunxi-with-spl.bin
产生的dtb是./arch/arm/dts/sun7i-a20-std-dvr.dtb
配合编译好的主线内核、boot.scr和rootfs就能boot了。以上简略过程是给老手看的,之后我u-boot那贴完成后会更详细步骤。

离线

#3 2020-10-29 22:05:05

梁上君子
会员
注册时间: 2020-10-11
累计积分: 2

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

楼主真是太6了, 发现那个主板还有货 https://item.taobao.com/item.htm?id=594462933314

现在主线Linux已经可以驱动 DVP摄像头/2D图形引擎/硬件编解码器了, 楼主加油!

离线

#4 2020-10-30 15:36:32

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

今天上午没有更贴,去折腾另一个有意思的问题了:获取板子上引出IO的标号。我摸索出了一种不需要对板子下毒手就能获知IO连接的办法:
不拆SoC,不用X光机,利用已知IO探测未知的IO连接情况
这是初步探测出来的IO连接情况:
IO
还有一些没测出来的,不知道什么原因,可能是引脚不在遍历范围内,可能是连接到部分引脚的电阻空焊了,也可能是因为我懒得焊线去探测,而是直接用杜邦线抵着焊盘探测,导致接触不良。

我为这个板子建了个交流群:1164615798

群里会分享这个板子和其他一些便宜的ARM Linux板子的资料。当然,教程还是会在本贴更新,群主要是供交流以及疑难解答之用。也欢迎大家进行其他Linux相关的讨论,或者开一些便宜板子的车。

离线

#5 2020-10-30 18:01:32

qinxiongxu
会员
注册时间: 2018-12-13
累计积分: 75

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

楼主厉害,赶紧拍了一块回来入坑。。

离线

#6 2020-10-30 18:02:32

qinxiongxu
会员
注册时间: 2018-12-13
累计积分: 75

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

另外,请问下A10的可以跑吗?我还买了一块A10主芯片的记录仪

离线

#7 2020-10-31 11:54:56

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

为这块板子建了个信息汇总的Github仓库

离线

#8 2020-10-31 12:00:05

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

qinxiongxu 说:

另外,请问下A10的可以跑吗?我还买了一块A10主芯片的记录仪

肯定不行的。A10是sun4i,A20是sun7i,u-boot和dts基于的架构不一样几乎肯定不能兼容。不过你可以在导出fex后根据我发的教程自己适配u-boot试试,或者在群里求助

离线

#9 2020-10-31 12:00:39

shawn.d
会员
注册时间: 2020-09-12
累计积分: 99

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

出的都是经典呃。

离线

#10 2020-10-31 13:12:48

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

开始缓更构建教程。提醒一下其实编译出u-boot以及编译u-boot产生的设备树就已经可以正常引导sunxi_defconfig的主线内核进入rootfs了,构建u-boot的过程在二楼,老手编译完就能直接用了。以下教程是相对详细的构建过程。

一、准备
0, 关于系统要求
是个软件包都还比较新的Linux就行,推荐进行下面步骤之前用包管理器进行一次软件更新(Debian系发行版是apt-get update; apt-get upgrade)。实际上我感觉自己的构建环境(Arch Linux文件系统的WSL)可能是最邪门的,因为严格来说它压根就不是Linux……因此如果你是WSL用户的话,你甚至可以全程在Windows下完成构建。

1, 获取工具链
建议直接下载Linaro预先编译好的工具链。如果你的电脑是x86或x64平台(一般都是这个平台,除非你准备在Arm平台上构建)的,下载链接里的gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz即可。
接下来解压工具链的压缩包到你想要的位置。貌似较新版的tar命令能直接

tar -xf 文件名

来解压xz的压缩包了。如果你的系统上不行,请自行搜索xz格式压缩包的解压方法。
解压完成后

export PATH=$PATH:/home/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin

把工具链导入环境变量。/home/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/需要换成你解压出的工具链所在的路径。你也可以把该命令写入你使用的shell对应的rc文件(比如.bashrc)里,这样可以避免每次手动导入PATH。

2, 安装必要的依赖
需要的依赖和依赖对应的包名可能在不同发行版下略有不同。Debian系Linux下的依赖可通过如下命令安装:

apt-get install build-essential libncurses5-dev u-boot-tools qemu-user-static debootstrap git binfmt-support libusb-1.0-0-dev pkg-config

我用的Arch上貌似只要安装u-boot-tools flex bison就行了。

3, 获取u-boot源码
进入工作路径,

git clone https://github.com/SdtElectronics/u-boot-sun7i-std-dvr.git

至此构建的准备工作已经完成。下面可以正式开始编译了(待续)

离线

#11 2020-11-01 09:33:18

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

之前找到一份疑似是该板原理图的文件,已上传QQ群文件和Github信息仓库。注意,尽管这份原理图和板子的吻合程度较高,但在部分地方还是有不同的,仅供参考用途。

离线

#12 2020-11-01 10:13:24

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

二、构建u-boot和kernel
1, 编译u-boot(产生bootloader和设备树)
每次编译之前,别忘了确认工具链目录是否已被导入PATH(见10楼)。缺少工具链时make会产生找不到arm-linux-gnueabihf-gcc之类的报错。
进入clone完成的u-boot源码目录,

make CROSS_COMPILE=arm-linux-gnueabihf- A20_std_dvr_defconfig

如果你想微调一些设置的话:

make CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

不想调整可以跳过这一步,保留默认配置。
编译:

make CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc)

产生的bootloader是./u-boot-sunxi-with-spl.bin
产生的dtb是./arch/arm/dts/sun7i-a20-std-dvr.dtb

2, 编译kernel
获取kernel源码

git clone https://github.com/torvalds/linux.git --depth=1

进入clone完成的kernel源码目录,

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

如果你想微调一些设置的话:

make CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

不想调整可以跳过这一步,保留默认配置。
编译:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -j$(nproc) zImage

如果一切顺利的话,到现在为止产生的二进制文件已经足够让板子boot进入内核了。如果你配置了别的内核模块或者希望在板子上运行编译器,可能还想要构建内核模块和头文件,请参考Linux-sunxi的Wiki
(待续)

离线

#13 2020-11-02 22:06:49

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

三、烧写u-boot和SD卡分区
1, 烧写u-boot
可以用Linux下的dd工具,也可以用Windows下git带的MinGW中的dd。以下${card}全部为sd卡的设备路径
清理SD卡:

dd if=/dev/zero of=${card} bs=1M count=1

烧写u-boot:

dd if=u-boot-sunxi-with-spl.bin of=${card} bs=1024 seek=8

2, 分区:
想用什么工具都行,这里以Windows下的DiskGenuis为例。
partition
首先划分一个FAT32分区用于存放内核和其他boot需要的文件,大小为16MB,分区前部保留1MB的空间;
然后划分一个ext3或者ext4的分区,用于存放rootfs,大小足够即可,或者让他直接占满剩余空间。

离线

#14 2020-11-02 22:24:02

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

四、boot分区和文件系统
1, boot分区
刚刚划分好的第一个FAT32分区作为boot分区。boot分区中需存放以下文件:
(1)12楼中编译kernel产生的zImage(在arch/arm/boot/下)
(2)12楼中编译u-boot产生的sun7i-a20-std-dvr.dtb
(3)boot.scr。boot.scr是指引u-boot加载内核的文件,启动时向内核传递的参数也在此定义。下面介绍如何由boot.scr的源文件boot.cmd编译产生boot.scr。
新建一个名为boot.cmd的文件,编辑内容为:

setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10
load mmc 0:1 0x43000000 sun7i-a20-std-dvr.dtb || load mmc 0:1 0x43000000 boot/sun7i-a20-std-dvr.dtb
load mmc 0:1 0x42000000 zImage || load mmc 0:1 0x42000000 boot/zImage
bootz 0x42000000 - 0x43000000

然后在当前目录下执行

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

然后将当前目录下生成的boot.scr拷入boot分区。

2, 文件系统
将你准备好的文件系统拷贝到刚刚划分好的ext4分区,就是后面那个分区。如何准备rootfs请参考Linux-sunxi的Wiki
一楼展示的终端使用的rootfs是LinuxContainers提供的arch Linux文件系统,下载后可以直接解压到ext4分区里。ext4分区下现在应该有这些目录:

bin   dev  home  mnt  proc  run   srv  tmp  var
boot  etc  lib   opt  root  sbin  sys  usr

大功告成!你现在可以插上SD卡尝试boot了。出现问题欢迎在楼里提出,也可以进群讨论。
(全文完)

离线

#15 2020-11-04 10:24:29

ubuntufull
会员
注册时间: 2020-06-15
累计积分: 6

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

编译提示spl部分爆内存了。。。头大
none_20201104-1020.png

离线

#16 2020-11-04 11:31:13

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

ubuntufull 说:

编译提示spl部分爆内存了。。。头大
https://whycan.com/files/members/4503/none_20201104-1020.png

请使用我发的linaro预编译的工具链编译试试。或者加群有编译好的bootloader在群文件分享。

离线

#17 2020-11-14 18:09:58

qinxiongxu
会员
注册时间: 2018-12-13
累计积分: 75

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

楼主,请问这个主线的linux支持声卡吗?

离线

#18 2020-11-15 16:59:07

SdtElectronics
会员
注册时间: 2020-07-27
累计积分: 36

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

qinxiongxu 说:

楼主,请问这个主线的linux支持声卡吗?

A20的Audio CODEC有主线支持,但是这个板子上能用的输出应该只有一个喇叭。麦倒是有两个

离线

#19 2020-11-16 22:45:12

qinxiongxu
会员
注册时间: 2018-12-13
累计积分: 75

Re: 淘宝20元A20行车记录仪主板运行主线u-boot & 主线Linux(Q群 1164615798)

楼主,再请教一个问题,你有试过uboot+主线linuxSPI Boot吗?是否可以?

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB