您尚未登录。

#1 Re: 全志 SOC » 新人自制v3s最小系统首次跑通 » 2022-08-19 16:13:17

我用的就是荔枝派zero的原理图,你直接参照那个就可以啦~

#2 全志 SOC » 新人自制v3s最小系统首次跑通 » 2022-08-18 22:42:49

SuperSpy
回复: 7

自上次通过使用荔枝派zero的板子把基本的uboot+linux内核+rootfs跑通后,后续想自己亲手做一块板子,实现软件+硬件都亲手操作的梦想(\(^o^)/~)。于是参考了荔枝派zero的原理图,并且对其做了一些删减(因为第一次做这个跑linux的板子,不知道是否好使,因此想做一个极简的最小系统),断断续续历经了一个月,板子一共做了两板,第一版失败,第二版成功~因此发个帖子记录一下心路历程,同时也把自己遇到的需要注意的一些小问题进行记录~
首先是电源部分,使用的是ea3036,这个是跟荔枝派zero上使用的电源芯片是一样的。由于我是第一次使用这个芯片,当时画pcb的时候对于这个芯片的实际大小没有具体的概念,于是整个电源部分画的特别的紧凑,这导致我板子回来焊接的时候极其的难受0.0.因为这个芯片实在是太小了,我用热风枪吹来吹去搞了好几次,最后才搞好。
  然后是最小系统的部分,这里面我遇到最大的问题是晶振!晶振一定要使用24M的!由于我自己不太仔细,把晶振画成了26M的(虽然封装都是3225的封装,但是我在做第一版整个过程中,一直没注意这个事情,一直认为晶振丝毫26M的也可以,毕竟之前我使用STM32的经验告诉我后续都可以在芯片内部进行时钟树的设置,因此马马虎虎的也就没太注意)。由于最开始使用的晶振不对,而且我自己甚至都没意识到不对,芯片焊上去之后都没有任何反映,甚至使用全志的芯片工具都无法检测到芯片(就是sudo sunxi-fel ver,好像是这个命令,还有个-l的,可以用来查询是否连接上芯片)。后续查看了好久才发现手册中要求晶振必须是24M的,这里也感谢群友的帮助解答,从群友处也得到了一样的答案~。
  最后遇到的一个问题是v3s的虚焊,在我使用sunxi-fel工具能检测到芯片,并且通过工具直接将uboot下载到芯片内部ram里都在串口成功检测输出信息,但此时我插上sd卡没有任何反应(系统使用的是sd卡启动,但这个sd卡里的系统我在荔枝派zero的板子上验证过没有问题),因此怀疑芯片虚焊了,因为这个最小系统我做的非常简单,几乎没有任何多余的外设,为了简便连LCD的引脚都没引出来。然后仔细检查了一下sd卡附近的引脚,发现有两个数据的引脚短路了,重新拉了一遍焊锡后上电启动成功!
  简单总结一下,电源、晶振、sd卡启动部分虚焊,这就是这个板子遇到的问题。比较惭愧的是做完之后其实发现非常简单,但是即便如此我也做了两版,断断续续硬件都搞了一个月。不过整个跑通之后自己还是非常激动的!!!最后上两个成品图吧~linux零基础历时断断续续搞了三个多月,终于把一整套流程跑通了!!!算是留个纪念吧~,后续主要搞一下驱动跟应用相关的,争取把v3s的资源都用起来~
banzi.jpg
yunxing(1).png

#3 Re: 全志 SOC » lcd如何与tty1相对应? » 2022-06-09 18:06:54

大概浏览了一下资料,以及司徒大佬发的连接,大概了解流程:简单来说就是lcd属于framebuffer(fb)类设备,内核在注册fb类设备的时候,其中有一步骤就是设置虚拟控制终端(ttyN,N为1 2 3 4 5 6....)与fb设备之间的对应关系,其具体关系摘抄如下:
fbcon=map:<0123>

    This is an interesting option. It tells which driver gets mapped to which console. The value ‘0123’ is a sequence that gets repeated until the total length is 64 which is the number of consoles available. In the above example, it is expanded to 012301230123… and the mapping will be:

    tty | 1 2 3 4 5 6 7 8 9 ...
    fb  | 0 1 2 3 0 1 2 3 0 ...

    ('cat /proc/fb' should tell you what the fb numbers are)

    One side effect that may be useful is using a map value that exceeds the number of loaded fb drivers. For example, if only one driver is available, fb0, adding fbcon=map:1 tells fbcon not to take over the console.

fbcon.c(/home/linux/linux-5.10/drivers/video/fbdev/core/)文件中set_con2fb_map函数负责这个映射过程,该函数简介如下:
/**
*    set_con2fb_map - map console to frame buffer device
*    @unit: virtual console number to map
*    @newidx: frame buffer index to map virtual console to
*      @user: user request
*
*    Maps a virtual console @unit to a frame buffer device
*    @newidx.
*
*    This should be called with the console lock held.
static int set_con2fb_map(int unit, int newidx, int user)
{
    struct vc_data *vc = vc_cons[unit].d;
    int oldidx = con2fb_map[unit];
    struct fb_info *info = registered_fb[newidx];
    struct fb_info *oldinfo = NULL;
    int found, err = 0;

    WARN_CONSOLE_UNLOCKED();

    if (oldidx == newidx)
        return 0;

    if (!info)
        return -EINVAL;

    if (!search_for_mapped_con() || !con_is_bound(&fb_con)) {
        info_idx = newidx;
        return do_fbcon_takeover(0);
    }

    if (oldidx != -1)
        oldinfo = registered_fb[oldidx];

    found = search_fb_in_map(newidx);

    con2fb_map[unit] = newidx;
    if (!err && !found)
        err = con2fb_acquire_newinfo(vc, info, unit, oldidx);

    /*
     * If old fb is not mapped to any of the consoles,
     * fbcon should release it.
     */
    if (!err && oldinfo && !search_fb_in_map(oldidx))
        err = con2fb_release_oldinfo(vc, oldinfo, info, unit, oldidx,
                         found);

    if (!err) {
        int show_logo = (fg_console == 0 && !user &&
                 logo_shown != FBCON_LOGO_DONTSHOW);

        if (!found)
            fbcon_add_cursor_timer(info);
        con2fb_map_boot[unit] = newidx;
        con2fb_init_display(vc, info, unit, show_logo);
    }

    if (!search_fb_in_map(info_idx))
        info_idx = newidx;

    return err;
}

这个问题断断续续查找了给有一星期了,感觉自己还是学艺不精,linux内核知识博大精深,只是有关驱动的部分感觉就足够研究了,感谢司徒大佬的友情帮助。在此发帖记录一下,希望能对后面学习的人有所帮助~

#4 Re: 全志 SOC » lcd如何与tty1相对应? » 2022-06-09 14:53:29

@司徒 多谢多谢,我先看看资料哈~有什么不会的还给麻烦请教您哇~

#5 全志 SOC » lcd如何与tty1相对应? » 2022-06-08 23:30:56

SuperSpy
回复: 4

本人是新手第一次玩带linux的板子,之前按照帖子教程把荔枝派zero的板子跑了起来,但是很多东西都不是很清楚,现在想问一个有关lcd的问题:我发现很多帖子里面说如果想把启动内核的信息输出到lcd上,需要在uboot传参的时候定义bootargs为“console = tty1”,如果是串口作为控制台的话就是“console = ttyS0”。想问一下,为什么这个tty1是跟lcd所对应的呢?是内核驱动写死的嘛,还是在哪里能够设置?搜了不少资料,也都只说的是“如果需要lcd作为控制台,就设置console = tty1”之类的结论,没找到哪里讲lcd为什么跟tty1是对应的关系。我大概能猜到是内核驱动里面设置的吧,但是具体怎么回事根本不清楚,想请教一下大佬科普一下,困扰好几天了0.0还请大佬们指点!

#6 Re: 全志 SOC » 终于把V3s三个串口全部榨干, 控制台只能用 ssh 了, 泪崩 (dropbear大法好,还能秘钥登录) » 2022-06-05 22:59:10

晕哥,您好,新人想请教一个问题哈~就是我现在设置console=ttyS0,就使用了串口0进行终端交互。现在我想知道这个“ttyS0”是如何跟底层板子的uart0联系起来的哇?我想尝试这在底层驱动里面寻找联系,但是不知道去哪里找,代码太多了:|。所以想请教一下您,这个问题困扰好久了,自己还是没有找到:|。

#7 Re: 全志 SOC » 荔枝派zero v3s 菜鸟新手uboot+linux+rootfs首次跑通 » 2022-06-05 22:53:33

@Expelliarmus
我暂时还没研究明白怎么贴图片哈,不好意思。我启动后直接就是这样的,我复制一部分放上来吧。主要就是“Welcome to Buildroot”之后,直接输入root就可以正常使用了。
Starting logging: OK
Initializing random number generator... [    1.698817] random: dd: uninitialized urandom read (512 bytes read)
done.
Starting network: OK

Welcome to Buildroot
buildroot login: root
# cat /dev/ttyS0


[   31.845405] vcc3v0: disabling
[   31.848404] vcc5v0: disabling




^Z[1]+  Stopped                    cat /dev/ttyS0
#
# cat /dev/tty0

#8 全志 SOC » 荔枝派zero 双端显示数据 » 2022-06-02 22:41:52

SuperSpy
回复: 1

请问下各位大佬,我现在按照基本的教程把板子跑起来了。但是现在遇到一个问题,就是我想把uboot以及内核启动包括进入根文件系统后跟串口的交互在lcd以及串口上双端显示信息(原本只在串口上显示,我想把串口上显示的东西在lcd上也显示,包括自己在串口端的输入输出等交互信息全部copy到lcd上),这个应该怎么设置,从哪里入手呢~

#9 Re: 全志 SOC » 荔枝派zero v3s 菜鸟新手uboot+linux+rootfs首次跑通 » 2022-06-01 18:51:37

现在我也还是仅仅刚刚跑起来,现在想串口屏幕双端显示,还是在鼓捣的路上,感觉每前进一步都需要花不少时间0.0

#10 Re: 全志 SOC » 荔枝派zero v3s 菜鸟新手uboot+linux+rootfs首次跑通 » 2022-05-27 13:01:34

嘿嘿,第一次发帖,都不太会上传图片,所以没有截图啥的0.0

#11 全志 SOC » 荔枝派zero v3s 菜鸟新手uboot+linux+rootfs首次跑通 » 2022-05-27 00:28:58

SuperSpy
回复: 18

本人原本是mcu工程师,在b站看了不少linux小电脑的相关视频,被深深的吸引住了,因此萌生出了想自己鼓捣一个linux小电脑的项目的想法,算是实践下自己的兴趣,也算是做一个技术升级。毕竟之前自己这么多年都是以用stm32系列为主,跑系统也都是freertos一类的系统。
  通过b站等众多视频了解到了荔枝派,坑网,在这里看了很多帖子入门,也得到了一些大佬的回复与帮助,因此自己在初步调通之后,也想分享一下自己的入门流程,算是对自己的一个记录,希望也可以给后续入门的小伙伴们提供一些有用的信息~。
  在坑网中主要参考的是沉鱼大佬的帖子“荔枝派Zero V3s开发板入坑记录 (TF/SD卡启动)(主线Linux,主线u-boot)”(https://whycan.com/t_561.html)。
  一、基本环境准备
  1 使用的虚拟机环境为VMware workstation,安装Ubuntu14.04LTS(按照沉鱼大佬的帖子),虚拟机跟windows互传文件使用的是filezilla(有关该软件的使用可以百度搜索一下,很多的教程~,主要就是ubuntu里面需要安装ftp服务器,然后使用该软件配置ftp服务发送上传就可以了)。
  2 安装交叉编译工具  sudo apt-get install gcc-arm-linux-gnueabihf
  3 其他的各种支持的软件(话说我初步配置环境就搞了好久,大家不用急,多搜索慢慢来肯定可以的,缺什么软件就安装什么,这个过程可能会比较繁琐)
  二、uboot
  由于我使用的是较为简单的sd卡启动,所以获取该uboot源码: git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current。要是比较卡的话也可以手动下载压缩包,然后传到ubuntu上即可,基本如果使用sd卡启动的话,只会用到这一个版本的uboot。
  修改 include/configs/sun8i.h, 使u-boot可以直接从tf卡启动:

    #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"
  上述添加的内容要放在#include<configs/sunxi-common.h>之前,否则编译会有问题,类似重定义的错误,这个一定要注意。
  在修改文件内容是可以使用gedit编辑器,感觉操作比vim方便很多,可以进行熟悉的CV快捷键复制操作等。
  其中BOOTCOMMAND与BOOTARGS为启动内核所需要执行的重要命令及uboot向内核传递的重要参数。load,bootz等均为uboot内所使用的命令。"load mmc 0:1 0x41000000 zImage; " 意思是将linux内核镜像zImage加载到内存的0x41000000处,因为linux需要在内存中才能启动,属于标准套路操作"load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb; "意思是将设备树文件加载到0x41800000地址处,其中设备树文件可根据自己的需要来选取,主要用到的就是sun8i-v3s-licheepi-zero-dock.dtb,以及带屏幕的sun8i-v3s-licheepi-zero-with-800x480-lcd.dtb(网店五寸屏)。"bootz 0x41000000 - 0x41800000;"的意思是使用bootz命令来加载启动linux内核,有关uboot命令的使用大家可以百度一下~资料很多~。BOOTARGS的内容有格式要求,大家可以查看BOOTARGS相关的资料即可~。
 
  接下来是编译uboot:
  cd到uboot目录下,
  1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make distclean
  2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make LicheePi_Zero_800x480LCD_defconfig (群主网店5寸屏)
或者ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make LicheePi_Zero_480x272LCD_defconfig (通用4.3寸屏)
或者ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make LicheePi_Zero_defconfig (默认)
  3 ARCH=arm make menuconfig
  4 执行编译:ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make
  这四步执行完之后,就会在uboot的目录下生成一个u-boot-sunxi-with-spl.bin,该文件就是最后烧录到sd卡的uboot文件。

  三、linux内核及设备树
  这部分基本也是参照沉鱼大佬的流程~
  获取Linux源码(zero-4.13.y分支对网卡支持比较好):  git clone https://github.com/Lichee-Pi/linux.git -b zero-4.13.y

  编译linux及生成设备树,还是熟悉的四步
  1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make distclean(这里清除一下再编译比较好,要不然残留的配置有可能会有问题)
  2 生成荔枝派Zero 默认配置文件: CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm make licheepi_zero_defconfig
  3 ARCH=arm make menuconfig
  4 编译内核:     make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
     编译设备树: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
  四步之后linux内核镜像zImage及设备树文件就生成好了,zImage在arch/arm/boot/下,驱动模块在out/下。设备树文件在arch/arm/boot/dts/下。
  其中linux内核的配置基本不用修改,licheepi_zero_defconfig文件基本都帮我们配置好了。

  四、根文件系统buildroot
  该部分还是继续参考(惭愧0.0)
    1). 下载最新的buildroot稳定版本
        官方网站:   https://buildroot.org/download.html
        长支持版本:buildroot-2017.02.7.tar.gz
        最新稳定版:buildroot-2017.08.1.tar.gz
    我这里下载的buildroot-2017.02.7.tar.gz。
    2). 配置buildroot 参数, make menuconfig; make
         buildroot的配置主要需要配置两个地方,一个是Target options ,另一个是编译工具链相关,
Target options  --->
    Target Architecture (ARM (little endian))  --->
    Target Binary Format (ELF)  --->
    Target Architecture Variant (cortex-A7)  --->
    Target ABI (EABIhf)  --->
    Floating point strategy (VFPv4-D16)  --->
    ARM instruction set (ARM)  --->
Toolchain  --->
    Toolchain type (External toolchain)  --->
     Toolchain External Options
    Toolchain (Custom toolchain)  --->
    Toolchain origin (Pre-installed toolchain)  --->
    (/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/) Toolchain path
    ($(ARCH)-linux-gnueabihf) Toolchain prefix
    External toolchain gcc version (4.9.x)  --->
    External toolchain kernel headers series (4.0.x)  --->
    External toolchain C library (glibc/eglibc)  --->
    [※] Toolchain has SSP support? (NEW)
    [※] Toolchain has RPC support? (NEW)
    [※] Toolchain has C++ support?
    [※] Enable MMU support (NEW)
  该部分配置的主要是按照另一位大佬https://blog.csdn.net/p1279030826/article/details/114500777的流程完成的。
  然而我其实这块省事,直接使用晕哥提供的编译好的buildroot,建议大家也可以先用现成的根文件系统,来测试uboot跟内核是否好使,等整个都调通了,再一个部分一个部分的学习~(此处实属偷懒了0.0)
  根文件系统最后编译完会生成一个rootfs.tar,这个用来后面解压到sd卡中即可。

  五、系统烧写到sd卡
  使用sd卡作为启动介质,此处参考晕哥的帖子https://whycan.com/t_547.html,贼给力,总结如下:
   1) 删除TF卡所有分区并格式化
   2) 将uboot写入到sd卡8k偏移处(必须8K偏移, brom规定的)。
        sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8 ,其中X为你的盘符,我这里是sdb。
   3) 建立第一个分区,大小32M(可以随意填写), 格式FAT16, 把zImage, 设备树.dtb拷贝到 这个分区
   4) 建立第二个分区,用尽剩余空间,格式ext4, 把buildroot产生的rootfs.tar解压到该分区根目录
        tar xvf output/images/rootfs.tar -C /挂载的tf卡第二个分区目录
   这里面我实际操作的时候遇到几个我认为需要注意的地方分享跟大家:
  1 使用dd命令烧写uboot的时候,命令执行肯定是会成功的,但是不一定真正的写进去了,因为有时候我发现没卡,但是由于/dev下有sdb设备,该命令也能执行成功,但是事实上都没有插卡肯定是没写进去的,因此大家要多检查一下。我实际操作发现,一般写入速度为4M所有的时候就是写进去了(我的电脑是这样子的)。
  2 tar解压根文件系统的时候,建议都使用绝对路径来执行。
  3 整个调试的时候大家一开始一定要使用串口接到电脑上看!!!因为我一开始板子到的时候只有五寸屏,手里又没有usb转串口,就合计先调试一下看能不能把信息输出到屏幕上,后来才发现默认uboot的各种信息以及内核启动信息都是输出到串口上的!我鼓捣半天都不知道好不好使,所以初学者还是一定先用串口调试交互,先跑起来再说~
  最后成功启动后,登陆账号root,无密码。
 
  跑起来的那一刻真的很激动,从断断续续学相关知识到板子到手到上手跑起来,差不多一个半月时间,着实是用了好久,跑起来的时候真是兴奋的睡不着觉,哈哈。算是从菜鸟变成了小小鸟,因此写下这个帖子跟大家分享下,希望能帮助到其他人~

#12 Re: 全志 SOC » 荔枝派zero uboot在5寸屏幕显示启动数据 » 2022-05-22 00:10:18

刚刚试了一下,把文件系统跟内核也都烧写了进去,屏幕上追加输出了一些内核的内容,启动还是失败了,估计是内核跟根文件系统没有配置好吧。但是有个奇怪的现象是在输出企鹅图标以及第一行uboot的信息后,屏幕就会花屏一下然后直接跳到了内核信息的输出,我猜测我是内核屏幕分辨率没设置好?再试试吧~

#13 全志 SOC » 荔枝派zero uboot在5寸屏幕显示启动数据 » 2022-05-21 09:07:30

SuperSpy
回复: 4

想请问各位大佬一下,现在我用荔枝派zero按照教程,在sd卡中烧写了uboot,但是只显示屏幕如一行uboot的信息:u-boot 2017.01,然后是企鹅图片。
而看到晕哥视频中显示uboot烧录在后会显示很多行数据,一直到start kernel,请问下这是哪里有问题呢~?

页脚

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

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