您尚未登录。

#3 Re: 全志 SOC » Debian 9.9 (stretch) 文件系统制作 » 昨天 15:00:05

richardsu 说:

@晕哥

rootfs
debian9.9.rootfs.gz 打包完了, 怎么打成img?  我按照网上找的教程打包, phoenixsuit 说固件文件版本太低, 格式被破坏

或者怎么直接刷到rootfs中, 我现在的系统是buildroot, rootfs是1G

这个只是文件系统,做成原来打包方式里面的根文件系统格式,原来是squashfs就得是squashfs,原来是ext4就得打包成ext4。

然后再用原来的打包方式打包。

#4 Re: 全志 SOC » 在f1c100s上跑MySQL5.1.73 移植记录 » 2024-04-09 13:17:59

@lmnb

$ grep mysql_install_db -r /opt/buildroot/buildroot-2024-aarch64/package/
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/S97mysqld:                $MYSQL_BIN/mysql_install_db --basedir=/usr \
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/mysqld.service:ExecStartPre=/bin/sh -c 'test "`ls -1 /var/lib/mysql | wc -l`" != "0" ||

$ grep mysqld_safe -r /opt/buildroot/buildroot-2024-aarch64/package/
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/S97mysqld:        $MYSQL_BIN/mysqld_safe --pid-file=$MYSQL_PIDFILE --user=mysql \
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/mysqld.service:ExecStart=/usr/bin/mysqld_safe --log-error=/var/log/mysql/mysqld.log

MySQL的package确实没有你说的这两个,但是mariadb里面有,用buildroot 2024.02 可以试一试。

#5 Re: 全志 SOC » 在f1c100s上跑MySQL5.1.73 移植记录 » 2024-04-09 12:03:19

感谢楼主分享!

可是有个问题不明白,你都用buildroot了,为何不直接配置buildroot直接自动编译MySQL呢?

#7 Re: 全志 SOC » 请问t113的nand 刷机这样问题,可能是什么造成的? » 2024-03-31 22:09:00

name         = boot-resource
    size         = 34438


这个改成1024,如果打包失败,就再改大一倍。

#8 Re: 全志 SOC » 请问t113的nand 刷机这样问题,可能是什么造成的? » 2024-03-31 20:15:06

youkebing 说:
memory 说:

ubi volume total size is larger than mtd size.

超过大小了?

看样子是,但是不知道怎么配置

先改板级目录下的 sys_partition.fex 试一试

#9 Re: 全志 SOC » 荔枝派nano 串口无输出 » 2024-03-29 19:28:35

接USB看能否进入FEL烧录模式,如果能进入,说明没有运行程序。

#10 Re: 全志 SOC » T113-S3如何将自己制作的动态库打包进镜像里的usr/lib目录下 » 2024-03-26 13:23:36

find out/ -name libxxx.so |grep ipkg

看下能不能在 out 目录找到文件

#12 Re: 全志 SOC » adb提示No space left on device » 2024-03-15 15:25:57

子非鱼 说:
晕哥 说:

@子非鱼
为什么用adb去测试呢,直接进串口终端测试文件系统不好么?

我最终的目的就是想要把自己的写的应用程序放到板子板子上去运行,现在是上传不上去

得先解决根本问题,前面已经明确了就是文件系统大小问题。

#13 Re: 全志 SOC » adb提示No space left on device » 2024-03-15 13:39:45

@子非鱼
为什么用adb去测试呢,直接进串口终端测试文件系统不好么?

#14 Re: 全志 SOC » adb提示No space left on device » 2024-03-15 10:09:09

@子非鱼
就是 rootfs_data 空间不够,

修改 板级目录下面的 sys_partition.fex 对应rootfs_data的空间大小

#15 Re: 全志 SOC » adb提示No space left on device » 2024-03-15 09:37:52

子非鱼 说:
晕哥 说:

@子非鱼
这个是正常,还是不正常的?

这个是启动正常,但是使用adb push向板子传文件的时候提示remote No space left on device

/dev/by-name/rootfs_data
                          1.4M     24.0K      1.2M   2% /overlay
overlayfs:/overlay        1.4M     24.0K      1.2M   2% /

可能是可写分区大小不够

试一试这两个命令:

mkdir -p /opt/
touch /opt/test.txt

#16 Re: 全志 SOC » adb提示No space left on device » 2024-03-15 09:22:23

@子非鱼
这个是正常,还是不正常的?

#17 Re: 全志 SOC » adb提示No space left on device » 2024-03-15 09:01:20

子非鱼 说:

上传的时候终端上什么都没有显示,需要用什么命令查看吗?

从上电开始的串口日志。

#19 Re: 全志 SOC » buildroot-tiny200 (F1C100/200s) 开发包近期更新内容 * 已支持DVP摄像头 *,支持SPI NAND » 2024-03-13 16:42:48

aaayao 说:
晕哥 说:
aaayao 说:

请问楼主,这个是用什么版本的ubuntu编译的?

16.04,18.04,20.04都可以,其他没有验证。

好的,谢谢!目前用14.0.6编译老是出错,看来要换个系统试试了。

14确实有点老了

#20 Re: 全志 SOC » buildroot-tiny200 (F1C100/200s) 开发包近期更新内容 * 已支持DVP摄像头 *,支持SPI NAND » 2024-03-13 16:04:35

aaayao 说:

请问楼主,这个是用什么版本的ubuntu编译的?

16.04,18.04,20.04都可以,其他没有验证。

#21 Re: 全志 SOC » V3S启动uboot的时候出现这个,有人遇到过嘛 » 2024-02-27 17:28:37

mysteryli 说:
晕哥 说:

提示找不到默认环境变量文件

想起来了 好像是有这么个文件,叫啥名来着
bootcmd.agr还是什么 太久忘了

我也忘记了

#23 Re: 全志 SOC » T113-S3 LVGL独立工程 支持G2D C++/C混合编译 » 2024-02-27 16:51:47

上邪 说:

晕哥,为啥看到有新的回复,我看不到呢

两个“谢谢分享”,一个“不错,学习了”

#24 Re: 全志 SOC » 开源全志V3S 两层板PCB 支持OV7725 OV2640摄像头 » 2024-02-27 12:04:58

whycan.com 说:

这是openmv吗,我记得有个开源的openmv能用ov5640

这个用户名你不能用,重新注册一个吧。

#25 Re: 全志 SOC » 板子新加ES7202 ADC芯片做麦克风 » 2024-02-23 12:03:53

全志的开发板都带了例程,比如D1-H哪吒开发板就有


全志D1-H/D1s RISC-V(基于平头哥C906) 哪吒开发板超全资料合集
https://whycan.com/t_6440.html

#26 Re: 全志 SOC » 板子新加ES7202 ADC芯片做麦克风 » 2024-02-23 10:47:55

建议先找个简易数字麦克风测试

#27 Re: 全志 SOC » t113-s3 adbd cpu占用率45% » 2024-02-15 17:19:55

@帝国炮灰
也没有遇到,你lunch的是第几个?

#28 Re: 全志 SOC » t113-s3 adbd cpu占用率45% » 2024-02-14 20:38:32

帝国炮灰 说:
晕哥 说:
帝国炮灰 说:

@晕哥
感谢晕哥,您使用的是glibc还是musl?

都用过,但是没有发现过adb有问题。


晕哥,您使用的是procd init还是busybox init?

都用过,都没有问题

#29 Re: 全志 SOC » t113-s3 adbd cpu占用率45% » 2024-02-06 17:33:28

帝国炮灰 说:

@晕哥
感谢晕哥,您使用的是glibc还是musl?

都用过,但是没有发现过adb有问题。

#30 Re: 全志 SOC » t113-s3 adbd cpu占用率45% » 2024-02-06 17:07:15

可能是SDK问题:

_20240206170535.jpg


--来自百度网盘超级会员V4的分享
hi,这是我用百度网盘分享的内容~复制这段内容打开「百度网盘」APP即可获取 
链接: https://pan.baidu.com/s/1tADvigD1xtOWqieJmcuPkA?pwd=awol 
提取码:awol

#31 Re: 全志 SOC » t113-s3 adbd cpu占用率45% » 2024-02-06 12:16:58

确实不正常,插了USB线吗?

#32 Re: 全志 SOC » 全志平台耳机HDMI自动切换 » 2024-01-29 11:54:03

8===D 说:

大佬有啥参考案例吗

D1_Linux_AUDIOCODEC_开发指南.pdf
这里有耳机插拔检测说明

#34 Re: 全志 SOC » f1c100s 是否可以在插入tf卡的状态下从flash启动? » 2024-01-25 10:13:49

buildroot-tiny200 (F1C100/200s) 开发包近期更新内容 * 已支持DVP摄像头 *,支持SPI NAND
https://whycan.com/t_5221.html

用这个吧,基本非常完善了,一键编译出所有烧录固件。

#35 Re: 全志 SOC » 《保姆级教程》全志F1C100S/F1C200S spi-flash 启动全流程适配烧录及踩坑指南 » 2024-01-23 23:42:24

howudoingwhycan 说:

楼主,请教一下:F1C200S如何将文件从PC端传至开发板中?F1C200S好像不能联网,而且好像不支持adb命令?

支持adb,本站右上角搜一下。

#38 Re: 全志 SOC » 全志H618 固件用什么软件可以修改? » 2024-01-17 21:59:02

huaixupeng 说:
哇酷小二 说:

DragonFace V4.1.0 或者以后的版本应该可以。

我必应、谷歌、duckduckgo,全都找了,就是找不到。:(  sad

链接: https://pan.baidu.com/s/12d_495y_8UIK5p2hLBh_fA?pwd=face
提取码:face

#39 Re: 全志 SOC » f1c100s+4.3寸lcd(480x272)的tf卡固件 » 2024-01-08 17:06:32

感谢@晕哥邀请和测试,发布一个widora tiny200 480x272 5寸电阻屏TF卡固件, 开机跑 emwin,账号root,无密码
https://whycan.com/t_3206.html


分享一个 5寸的 800x480 的 f1c100s 固件, 感谢 @xm1994,   调试串口UART0 (PB8/PB9)
https://whycan.com/t_2689.html

#41 Re: 全志 SOC » 把mp4格式的h.264视频文件解码成NV12格式, 并使用VLC播放 / V3s 摄像头录制成NV12原始数据 » 2020-12-19 19:28:55

linux3.4 bsp linux 摄像头NV12格式原始视频格式数据采集源码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <getopt.h>           
#include <fcntl.h>            
#include <unistd.h>
#include <errno.h>
#include <malloc.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
 
#include <asm/types.h>        
#include <linux/videodev2.h>

#define BUF_NUM                         4
#define FRAMESINBUF                     1

struct CJ_Buffer {
        void *memory;
        int length;
};

struct CJ_Buffer *gpV4l2Buf;
 
int gMemMapLen;

int file_fd;
char *dev_name = "/dev/video0";
int fd;


int getFullSize(int * full_w, int * full_h)
{
    struct v4l2_frmsizeenum size_enum;
    size_enum.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    size_enum.pixel_format = V4L2_PIX_FMT_NV12;
    size_enum.index = 0;
    if (-1 == ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &size_enum))
    {
        perror("VIDIOC_ENUM_FRAMESIZES failed");  
        return 0;   
    }
    
    *full_w = size_enum.discrete.width;
    *full_h = size_enum.discrete.height;

        printf("getFullSize: %dx%d\n", *full_w, *full_h);
    
    return 1;
}

int tryFmtSize(int *width, int *height)
{
    int ret = -1;
    struct v4l2_format fmt;

    printf("%dx%d", *width, *height);

    memset(&fmt, 0, sizeof(fmt));
    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    fmt.fmt.pix.width  = *width;
    fmt.fmt.pix.height = *height;

    //fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
    //fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
    //fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_H264;
    fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_NV12;

    fmt.fmt.pix.field = V4L2_FIELD_NONE;

    ret = ioctl(fd, VIDIOC_TRY_FMT, &fmt);
    if (ret < 0)
    {
        perror("VIDIOC_TRY_FMT failed");
        return ret;
    }

    // driver surpport this size
    *width = fmt.fmt.pix.width;
    *height = fmt.fmt.pix.height;

    return 0;
}

int setContrastValue(int value)
{
    int ret = -1;
    struct v4l2_control ctrl;

    ctrl.id = V4L2_CID_CONTRAST;
    ctrl.value = value;
    ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0) {
        perror("VIDIOC_S_CTRL failed");
    } else {
        printf("setContrastValue ok\n");
    }

    return ret;
}
int setBrightnessValue(int value)
{
    struct v4l2_control ctrl;
    int ret = -1;

    ctrl.id = V4L2_CID_BRIGHTNESS;
    ctrl.value = value;
    ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0) {
        perror("VIDIOC_S_CTRL failed");
    } else {
        printf("setBrightnessValue ok\n");
    }
    return ret;
}

int setSaturationValue(int value)
{
    struct v4l2_control ctrl;
    int ret = -1;

    ctrl.id = V4L2_CID_SATURATION;
    ctrl.value = value;
    ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0) {
        perror("VIDIOC_S_CTRL failed");
    } else {
        printf("setSaturationValue ok\n");
    }
    return ret;
}

int setSharpnessValue(int value)
{
    struct v4l2_control ctrl;
    int ret = -1;

    ctrl.id = V4L2_CID_SHARPNESS;
    ctrl.value = value;
    ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0) {
        perror("VIDIOC_S_CTRL failed");
    } else {
        printf("setSharpnessValue ok\n");
    }
    return ret;
}

int setHueValue(int value)
{
    struct v4l2_control ctrl;
    int ret = -1;

    ctrl.id = V4L2_CID_HUE;
    ctrl.value = value;
    ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0) {
        perror("VIDIOC_S_CTRL failed");
    } else {
        printf("setHueValue ok\n");
    }

    return ret;
}

int setHflip(int value)
{
    struct v4l2_control ctrl;
    int ret = -1;
    
    ctrl.id = V4L2_CID_HFLIP_THUMB;
    ctrl.value = value;
    printf("V4L2CameraDevice::setHflip value=%d\n", value);
    ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0)
    {
        //setSharpnessValue failed
        perror("setHflip thumb failed\n");
    }
    ctrl.id = V4L2_CID_HFLIP;
    ctrl.value = value;
    printf("V4L2CameraDevice::setHflip value=%d\n", value);
    ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0)
    {
        //setSharpnessValue failed
        perror("setHflip failed\n");
    }
    return ret;
}

int setVflip(int value)
{
    struct v4l2_control ctrl;
    int ret = -1;
    
    ctrl.id = V4L2_CID_VFLIP_THUMB;
    ctrl.value = value;
    printf("V4L2CameraDevice::setVflip value=%d\n", value);
    ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0)
    {
        //setSharpnessValue failed
        perror("setVflip thumb failed111\n");
    }
    ctrl.id = V4L2_CID_VFLIP;
    ctrl.value = value;
    printf("V4L2CameraDevice::setVflip value=%d\n", value);
    ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0)
    {
        //setSharpnessValue failed
        perror("setVflip failed111\n");
    }

    return ret;
}

int v4l2setCaptureParams(int framerate)
{
    printf("framerate=%d", framerate);
    int ret = -1;
    
    struct v4l2_streamparm params;
    params.parm.capture.timeperframe.numerator = 1;
    params.parm.capture.timeperframe.denominator = framerate;
    params.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    params.parm.capture.capturemode = V4L2_MODE_VIDEO;

    printf("VIDIOC_S_PARM mFrameRate: %d, capture mode: %d\n", framerate, params.parm.capture.capturemode);

    ret = ioctl(fd, VIDIOC_S_PARM, &params);
    if (ret < 0) {
        perror("VIDIOC_S_PARM failed");
    } else {
        printf("v4l2setCaptureParams ok\n");
    }

    return ret;
}

void v4l2SetVideoParams(int width, int height, int sub_w, int sub_h, unsigned int pix_fmt)
{
    struct v4l2_format format;

    printf("main:%dx%d, sub:%dx%d, pfmt: 0x%x\n", width, height, sub_w, sub_h, pix_fmt);
    memset(&format, 0, sizeof(format));
    format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    format.fmt.pix.width  = width;
    format.fmt.pix.height = height;
    //format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
    //format.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
    //format.fmt.pix.pixelformat = V4L2_PIX_FMT_H264;
    format.fmt.pix.pixelformat = V4L2_PIX_FMT_NV12;
    format.fmt.pix.field = V4L2_FIELD_NONE;

    if ((sub_w > 0 && sub_w < width) && (sub_h > 0 && sub_h < height)) {
        struct v4l2_pix_format sub_fmt;
        memset(&sub_fmt, 0, sizeof(sub_fmt));
        format.fmt.pix.subchannel = &sub_fmt;
        format.fmt.pix.subchannel->width = sub_w;
        format.fmt.pix.subchannel->height = sub_h;
        format.fmt.pix.subchannel->pixelformat = pix_fmt;
        format.fmt.pix.subchannel->field = V4L2_FIELD_NONE;
        format.fmt.pix.subchannel->rot_angle = 0;
        printf("sub_w=%d, sub_h=%d\n", sub_w, sub_h);
    }

    if (ioctl(fd, VIDIOC_S_FMT, &format) < 0)
    {
        perror("VIDIOC_S_FMT failed");
        return;
    }

    return;
}

void initV4l2Buffer()
{
    gpV4l2Buf = (struct CJ_Buffer *)malloc(sizeof(struct CJ_Buffer) * BUF_NUM);
    if (gpV4l2Buf == NULL) {
        perror("alloc V4l2Buffer_tag error!!");
        return;
    }
    memset(gpV4l2Buf, 0, sizeof(struct CJ_Buffer) * BUF_NUM);
}

void setFramesInV4L2BufNum()
{
        unsigned int nFramesInBuf = FRAMESINBUF;
    printf("mFramesInV4l2buf=%u\n", FRAMESINBUF);
    if (ioctl (fd, VIDIOC_SET_NFRAME_BUF, &nFramesInBuf) < 0) {
        perror("VIDIOC_SET_NFRAME_BUF failed");
    }
}

int v4l2ReqBufs(int * buf_cnt)
{
    int ret = 0;
    struct v4l2_requestbuffers rb;

    printf("TO VIDIOC_REQBUFS count: %d\n", *buf_cnt);

    memset(&rb, 0, sizeof(rb));
    rb.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    rb.memory = V4L2_MEMORY_MMAP;
    rb.count  = *buf_cnt;

    ret = ioctl(fd, VIDIOC_REQBUFS, &rb);
    if (ret < 0)
    {
        perror("VIDIOC_REQBUFS failed");
        return ret;
    }

    *buf_cnt = rb.count;
    printf("VIDIOC_REQBUFS count: %d\n", *buf_cnt);

    return 1;
}

int v4l2QueryBuf()
{
        int i;
    int ret = 0;
    struct v4l2_buffer buf;

    for (i = 0; i < BUF_NUM; i++)
    {
        memset (&buf, 0, sizeof (struct v4l2_buffer));
        buf.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        buf.memory = V4L2_MEMORY_MMAP;
        buf.index  = i;

        ret = ioctl (fd, VIDIOC_QUERYBUF, &buf);
        if (ret < 0)
        {
            perror("VIDIOC_QUERYBUF failed");
            return ret;
        }

        gpV4l2Buf[i].memory = mmap(0, buf.length,
                                PROT_READ | PROT_WRITE, 
                                MAP_SHARED, 
                                fd, 
                                buf.m.offset);

                gMemMapLen = buf.length;
        printf("index: %d, mem: %x, len: %d, offset: %x\n", i, (int)gpV4l2Buf[i].memory, buf.length, buf.m.offset);
 
        if (gpV4l2Buf[i].memory == MAP_FAILED)
        {
            perror("mmap failed");
            return -1;
        }
        }

    for (i = 0; i < BUF_NUM; i++)
    {
        memset (&buf, 0, sizeof (struct v4l2_buffer));
        buf.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        buf.memory = V4L2_MEMORY_MMAP;
        buf.index  = i;
        // start with all buffers in queue
        ret = ioctl(fd, VIDIOC_QBUF, &buf);
        if (ret < 0)
        {
            perror("VIDIOC_QBUF failed");
            return ret;
        }
    }

    return 1;
}

int v4l2StartStreaming()
{
    int ret = 0;
    enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

    ret = ioctl (fd, VIDIOC_STREAMON, &type);
    if (ret < 0)
    {
        perror("VIDIOC_STREAMON failed");
        return ret;
    }

    return 1;
}

int v4l2StopStreaming()
{
    int ret = 0;
    enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

    ret = ioctl (fd, VIDIOC_STREAMOFF, &type);
    if (ret < 0)
    {
        perror("VIDIOC_STREAMOFF failed");
        return ret;
    }
    printf("V4L2Camera::v4l2StopStreaming ok\n");

    return 1;
}

int v4l2UnmapBuf()
{
        int i;
    int ret = 0;

    for (i = 0; i < BUF_NUM; i++)
    {
        ret = munmap(gpV4l2Buf[i].memory, gMemMapLen);
        if (ret < 0)
        {
            perror("munmap failed");
            return ret;
        }

        gpV4l2Buf[i].memory = NULL;
    }

    return 1;
}

int main (int argc,char ** argv)
{
        struct v4l2_capability cap;
        struct v4l2_format fmt;
        struct v4l2_pix_format sub_fmt;
        struct v4l2_requestbuffers req;
        struct v4l2_buffer buf; 
    struct v4l2_input inp;
        unsigned int i;
        enum v4l2_buf_type type;
        
        int width, height;
     
     
        fd = open(dev_name, O_RDWR | O_NONBLOCK, 0);

        ioctl (fd, VIDIOC_QUERYCAP, &cap);
        printf("Driver Name:%s\n Card Name:%s\n Bus info:%s\n\n", cap.driver, cap.card, cap.bus_info);
        printf("capabilities:%d\n", cap.capabilities);
        
    if ((cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) == 0 &&
                (cap.capabilities & V4L2_CAP_STREAMING) == 0) 
    {
        perror("cap capabilities format fail");  
        return -2 ;   
    }


    inp.index = 0;
    if (-1 == ioctl(fd, VIDIOC_S_INPUT, &inp))
    {
        perror("VIDIOC_S_INPUT error!");  
        return -2 ;   
    }
        
        getFullSize(&width, &height);
        
        width = 640; height = 480;
        /*tryFmtSize(&width, &height);
        setContrastValue(50);
        setBrightnessValue(50);
        setSaturationValue(0);
        setSharpnessValue(10);
        setHueValue(30);
        setHflip(0);
        setVflip(0);*/
        
        v4l2setCaptureParams(30);
        v4l2SetVideoParams(640, 480, 320, 240, V4L2_PIX_FMT_NV12);
        
        initV4l2Buffer();
        setFramesInV4L2BufNum();

    int buf_cnt = BUF_NUM;
    v4l2ReqBufs(&buf_cnt);
        
        v4l2QueryBuf();
        v4l2StartStreaming();
        
        //for (i = 0; i < 10; i++)
        //      sleep(1);

    //struct v4l2_control ctrl;

   // ctrl.id = V4L2_CID_TAKE_PICTURE;
    //if (ioctl(fd, VIDIOC_S_CTRL, &ctrl) < 0) {
  //      perror("VIDIOC_S_CTRL failed");
  //  } else {
  //      perror("setTakePictureCtrl ok\n");
 //   }
        
        
        FILE* fp = fopen("test2.nv12", "w");
        if(fp == NULL)
        {
                printf("open file error.\n");
                goto end;
        }

        for (i = 0; i < 200; i++)
        {
                fd_set fds;

                FD_ZERO(&fds);
                FD_SET(fd, &fds);

                select(fd + 1, &fds, NULL, NULL, NULL);

            memset(&buf, 0, sizeof(struct v4l2_buffer));
                buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
                buf.memory = V4L2_MEMORY_MMAP;
                ioctl(fd, VIDIOC_DQBUF, &buf);

            void *pMem = gpV4l2Buf[buf.index].memory;
                printf("frame addr = %x, length=%d, %d\n", (unsigned int)pMem, gpV4l2Buf[buf.index].length, buf.length);

                fwrite(pMem, 640 * 480 * 3 / 2, 1, fp);
#if 0
                if (i == 199)
                {
                        file_fd = open("test.jpg", O_RDWR | O_CREAT, 0777);
                        write(file_fd, pMem, 640 * 480 * 3 / 2);
                        close (file_fd);
                        printf("frame index = %d, size = %d.\n", buf.index, buf.length);
                }
#endif
                ioctl(fd, VIDIOC_QBUF, &buf);
        }

end:
        fclose(fp);     
        v4l2StopStreaming();
        v4l2UnmapBuf();
        

        close (fd);
        printf("Camera Done.\n");


        return 0;
}

b5fdce65aa04d77f1066453a0468ffe8.png

1a3b4bb98783a39ad0c052ba7c25e45f.png

NV12录像文件下载: nv12_data.7z

#42 Re: 全志 SOC » V3s/S3/f1c100s通过USB启动Linux,并把SD NAND/TF卡挂载为U盘, 可以dd或Win32DiskImager任烧写 » 2020-09-21 22:10:18

启动之后无法挂载sd nand到pc   看不到是哪的问题  能帮忙分析一下嘛 信息

usb id引脚在dts是怎么配置的?

#43 Re: 全志 SOC » 小智科技X3卡片电脑,仅有银行卡一半大,像艺术品般的硬件,多图慎入~ (开放购买) » 2020-05-28 12:21:16

小智科技 说:

论坛好久没见到晕哥出现,谢谢晕哥的支持,我还以为晕哥改名哇酷小二了哈哈~

说来话长,由于挖坑不填,吹牛不干活,被老板禁言了。

#45 Re: 全志 SOC » 编译、安装Windows版本sunxi-fel步骤 (32M spi flash补丁,支持W25Q256/MX25L256) » 2020-04-26 10:07:16

提示什么错误吗?
写一个小一点的文件(如u-boot), 然后读出来看对不对.

#46 Re: 全志 SOC » 荔枝派zero 系统 » 2020-04-23 10:08:00

上面2楼那个固件我记得是有以太网的,你先试一试。

#47 Re: 全志 SOC » V3s licheepi板子启动失败, jffs2: jffs2_scan_eraseblock():Magic bitmask 0x198 » 2020-04-22 23:31:59

ifree64 说:

是要取消这个选项吗?我去试试,谢谢!

对的, 你先取消这个选项试一试.

#49 Re: 全志 SOC » 第一次画全志的板子F1C200S,明天发板 » 2020-04-22 22:32:08

pcb_diy 说:

想请问下晕哥,以前只有STM32基础。如何切换到这个F1C100S跑LINUX的学习上来?论坛有没有入门级的资料供我这种初学者学习?

这个教程不错: https://whycan.cn/t_3138.html

#52 Re: 全志 SOC » @assert 修改后的 f1c100s u-boot 开源了, 可以引导bsp linux » 2020-04-22 19:10:28

wammaw1314 说:

收藏本帖,目前正在新增使用spi nand flash,启动引导主线Linux 4.19,各种学习中。。。

这个帖子更有参考价值: https://whycan.cn/t_3123.html

#53 Re: 全志 SOC » F1C100S裸跑Fatfs » 2020-04-22 17:40:35

wukenaihe 说:

配置sunxi-fel工具出现了如下问题:
fel.c:32:18: fatal error: zlib.h: 没有那个文件或目录
compilation terminated.
fel_lib.c:26:20: fatal error: libusb.h: 没有那个文件或目录
这个怎么破

https://whycan.cn/t_444.html

#56 Re: 全志 SOC » F1C200S入坑手记 » 2020-04-21 20:27:28

Blueskull 说:

Don't really want to necropost on the old thread. PM me with your email and I can send it to you directly.

BTW, I believe posting at least 3 posts here should grant you download privilege. Don't quote on me.

大神神速,现在涨到7个了,笑哭.gif

#57 Re: 全志 SOC » F1C200S入坑手记 » 2020-04-21 20:26:01

认真回复7个帖子,可以解锁下载权限

Seriously reply to 7 posts, you can unlock the download rights

Thanks.

#58 Re: 全志 SOC » 感谢 widora @mango 友情赠送的精致小巧TINY200开发板套件, 主控全志 F1C200s » 2020-04-20 17:38:08

xingjxuan 说:

晕哥。。。这个板子是不是不能用PhoenixSuit来烧写

对 这个烧录方法和sdk不同。

#59 Re: 站务公告/网站建设 » 感觉最近帖子变水了? » 2020-04-20 17:15:55

jiangming1399 说:

其实我个人是觉得,没有意义的回帖还不如不回……主要是我会定期看我被回复的贴子,要是水占大部分的话那就纯粹是浪费时间了

嗯嗯,大部分无意义的回复我都删了。

以后加入新用户审帖功能,尽管水,只要审核不通过都不会显示。

#60 Re: 站务公告/网站建设 » 感觉最近帖子变水了? » 2020-04-20 15:03:24

达克罗德 说:

精华帖可以加多点积分,然后按分数搞个等级勋章啥的,增加荣誉感,鼓励发帖

嗯嗯,小本本记下来了。

#61 Re: 站务公告/网站建设 » 感觉最近帖子变水了? » 2020-04-20 14:57:00

达克罗德 说:

好像是满多少积分才能下载了

七分。好像不是很多,认真回复几句骚话就解决了。

#62 Re: 站务公告/网站建设 » 感觉最近帖子变水了? » 2020-04-20 14:50:37

嗯,每天下载3G左右,但是跟帖很少,所以稍改了一点点规则,

七分解锁下载权限,当时考虑到可能会水一波,只是没想到这么水,笑哭.gif

#63 Re: 全志 SOC » 分享自制的使用USB网卡的F1C200S开发板 » 2020-04-20 13:41:33

asdfwyg 说:

老大有没有用过rtl8189这种sdio的模块呢,这个稳定性怎么样

螃蟹的 RTL8723BS sdio网卡玩过 ,貌似不是很稳定,连linux驱动都在stating目录。

#64 Re: 全志 SOC » 分享自制的使用USB网卡的F1C200S开发板 » 2020-04-20 13:01:40

感谢楼主分享,网卡还是博通方案的ap6xxx的sdio模块软硬件稳定性好。

#65 Re: 站务公告/网站建设 » 自动定时备份 debugdump(whycan) 数据库并发送到邮箱 » 2020-04-20 09:08:25

HackforFun 说:

坛主,论坛什么时候考虑支持下 Markdown呀。

感谢建议,小本本先记下来。

#67 Re: 全志 SOC » 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动) » 2020-04-19 08:11:30

幽光 说:

现在下载都这么困难了吗,新手发不了精华帖啊,晕哥可以收费下载啊

感谢建议,现在认真回复7个帖子就可以解锁下载权限。精华帖那个不用担心,已经取消了。

#68 Re: 站务公告/网站建设 » 自动定时备份 debugdump(whycan) 数据库并发送到邮箱 » 2020-04-18 14:37:30

kekemuyu 说:

备份文件多大呀!时间长了,邮箱会不会爆掉,

不会,连续两年每小时备份一次数据163和qq邮箱都没有爆。

#70 Re: 全志 SOC » 分享一个 5寸的 800x480 的 f1c100s 固件, 感谢 @xm1994, 调试串口UART0 (PB8/PB9) » 2020-04-17 21:26:09

zhaolei_cpp 说:

请问 楼主 f1c100s_linux_4.15_emwin_dump_20190827 的内核代码在哪里?

好像是 /etc/init.d/rcS 里面

#71 Re: 全志 SOC » 分享全志主线u-boot/linux 打包 TF/SD/SDNAND 镜像脚本 » 2020-04-17 11:12:49

renhuge 说:

这个脚本可以打包F1C200S么

当然可以,而且本来就是。

#72 Re: 全志 SOC » 使用逻辑分析仪探测全志Allwinner V3s SPI FLASH启动过程 » 2020-04-17 10:29:39

myxiaonia 说:

f1c100s有没有这个iram,越发看不明白了,boot0这个代码是不是就是BROM

BROM是固化在芯片内部的, boot0 是 处于spi flash/TF卡/eMMC 最前面的程序,一般用来初始化必要的硬件如DRAM等。

ifree64 说:

晕哥,uboot-sunxi-with-spl这个文件是不是包含两部分内容,文件前面32k是spl后面是uboot?

对,前面32k就是传说中的boot0,
全志的SDK里面都叫boot0, 全志的SDK里面boot0是不开源的。

#75 Re: 全志 SOC » 使用qmake编译.pro文件一直报Unknown module(s) in QT: serialport错误 » 2020-04-16 09:01:34

$ find . |grep SerialPort  |grep \\.so
./output/build/qt5serialport-5.12.4/lib/libQt5SerialPort.so.5.12.4
./output/build/qt5serialport-5.12.4/lib/libQt5SerialPort.so.5.12
./output/build/qt5serialport-5.12.4/lib/libQt5SerialPort.so.5
./output/build/qt5serialport-5.12.4/lib/libQt5SerialPort.so
./output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libQt5SerialPort.so.5.12.4
./output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libQt5SerialPort.so.5.12
./output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libQt5SerialPort.so.5
./output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libQt5SerialPort.so
./output/target/usr/lib/libQt5SerialPort.so.5.12.4
./output/target/usr/lib/libQt5SerialPort.so.5.12
./output/target/usr/lib/libQt5SerialPort.so.5

用 find 命令搜索 SerialPort 相关文件是否存在。

#77 Re: 全志 SOC » 请教windows下linux编译环境搭建 » 2020-04-16 08:21:40

建议用Ubuntu18.04 LTS

从入门到放弃的视频教程都可以在 https://www.bilibili.com/ 搜索到,

也有手机app。

#78 Re: 全志 SOC » X3开发板官方版本新鲜出炉,4核A7,内置128MB DDR,封装FBGA 262,16x13x1.0mm » 2020-04-16 08:16:50

感谢各位朋友表达自己的意见,友善的评论是交流的起点,大家可以随意发表自己的看法,但是请不要涉及人身攻击。

前面有些不友好的词语我编辑了一下。

#81 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 10元一个全新720P互联网网关监控摄像头 HI3518 » 2020-04-15 23:14:14

晕哥
回复: 40

电脑版购买链接:
https://2.taobao.com/item.htm?id=615375166331

淘宝手机app购买:
我在闲鱼发布了【闲鱼被禁言中 4元一个全新720P互联网网关监控摄像头 摄像】椱ァ製这段描述后,打开闲鱼€hbXu1kChb0O€后打开闲鱼

关于运费:
10元*数量+运费,运费首重通通通按10计,每4个超重加5元
第一套友情价,15包邮(记得留言:whycan)

4760558199849071.jpg

------------------------
仅发布信息,不承担任何质量等其他问题.
仅发布信息,不承担任何质量等其他问题.
仅发布信息,不承担任何质量等其他问题.

#83 Re: 全志 SOC » 新手Zero V3S 基础入门问题 » 2020-04-15 15:42:16

https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts

compatible = "gpio-leds";

drivers/leds/Makefile:obj-$(CONFIG_LEDS_GPIO)                   += leds-gpio.o

这个 CONFIG_LEDS_GPIO 驱动有没有勾选?

#84 Re: 全志 SOC » V3S 如何 LCD 背光调整? » 2020-04-15 15:38:35

https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/leds/backlight/pwm-backlight.txt

backlight {
        compatible = "pwm-backlight";
        pwms = <&pwm 0 5000000>;

        brightness-levels = <0 4 8 16 32 64 128 255>;
        default-brightness-level = <6>;

        power-supply = <&vdd_bl_reg>;
        enable-gpios = <&gpio 58 0>;
        post-pwm-on-delay-ms = <10>;
        pwm-off-delay-ms = <10>;
    };

凭感觉 /sys/class/backlight/pwm-backlight/bl_power 应该对应是 enable-gpios

#85 Re: 全志 SOC » 有没有windows下交叉编译F1C100S linux应用的gcc » 2020-04-15 10:26:01

https://whycan.cn/t_2376.html#p18090

用同一公司同一版本的 gcc 编译器就行,也就是说文件系统的gcc和windows编译app的gcc版本要一致。

否则你的app只能静态链接。

#86 Re: 全志 SOC » 新手Zero V3S 基础入门问题 » 2020-04-15 10:22:51

看下是哪一级目录或者文件没有 /sys/class/leds/licheepi:red:usr/brightness

#87 Re: 全志 SOC » V3s/S3/f1c100s通过USB启动Linux,并把SD NAND/TF卡挂载为U盘, 可以dd或Win32DiskImager任烧写 » 2020-04-14 18:39:15

hzxczfw 说:

@晕哥 usb启动成功,焊在板上的SD芯片如何挂载成为windows下的U盘?我在usb启动成功后,将PF6拉高,但是没有反应,还有什么条件?fel引导用的image是自己做的。

接串口,看输出什么log

#88 Re: 全志 SOC » 新手Zero V3S 基础入门问题 » 2020-04-14 18:10:07

这个目录 /sys/ 里面有内容吗?

#89 Re: 全志 SOC » 新手求助Zero v3“增开USART1 和USART2” » 2020-04-13 12:00:50

xblzy0423 说:

linux中了
板子为zero v3s

那u-boot不用改uart部分,应该去linux里面修改。

#90 Re: 全志 SOC » 新人想入门请教点烧系统问题. » 2020-04-12 20:31:12

有几种玩法:
1. 主线Linux,驱动不全,但是参与者挺多,原汁原味。
2. 原厂魔改的tina Linux驱动比较全,摄像头和视频解码器应该都可以工作,但是网上找不到什么资料,加上原厂NDA你都找不到人讨论。
3. 原厂的小系统melis,驱动比较全
4. 民间的各种裸奔,RTOS,XBOOT等

如果你想用解码器,得用Tina Linux,否则软解就是PPT

#92 Re: 全志 SOC » 荔枝派NANO怎么修改CPU频率? » 2020-04-11 16:35:36

myccl 说:

感谢晕哥,久仰大名

老板客气,各路神仙能上来发帖已经很看得起小站了。

#93 Re: 全志 SOC » 荔枝派NANO怎么修改CPU频率? » 2020-04-11 16:07:05

myccl 说:

还有帖子链接吗,我没搜到

@达克罗德 大神的: https://whycan.cn/t_3380.html

#94 Re: 全志 SOC » 新手上路内核启动过程中一直出现 sunxi-mmc 1c0f000.mmc: fatal err update clk timeout 报错 » 2020-04-11 14:52:26

tlx 说:

是把SDIO的一组接口全部上拉吗?

参考荔枝派或者歪朵拉原理图

#98 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 给大家推荐一款联通的流量卡, 年付8元, » 2020-04-10 19:51:23

aozima 说:

今天电话回访了,说银行卡可能退不成功,直接加我微信退款了。
至此销号成功,拨打提示已停机。

我充了100续命

#100 Re: 全志 SOC » 新手求助 rootfs.tar生成 » 2020-04-10 16:16:06

xblzy0423 说:

我在解压前看了,文件是空的,我贴的图

ls -l /bin/*

看下文件有没有执行属性。

#101 Re: 全志 SOC » 看了大神<微凉VeiLiang>的电路图还是不懂, 哪位大神能帮忙画个nano的csi摄像头接口电路图. » 2020-04-10 15:55:45

kerr 说:

晕哥,再请教下, 我想跟arduino的一些板子双向通信, 用什么接口合适? i2c?还是串口?

电平一致情况下 i2c,spi,uart,i80都可以。

#103 Re: 全志 SOC » 看了大神<微凉VeiLiang>的电路图还是不懂, 哪位大神能帮忙画个nano的csi摄像头接口电路图. » 2020-04-10 10:59:18

kerr 说:

汗, 晕哥.我是菜鸟.画画简单的还可以.要完整的, 那不行..我搞软件的,不太懂硬件

参考你需要的部分就行。

#105 Re: 全志 SOC » V3S 32M flash mx25l25635e » 2020-04-10 10:11:01

u-boot, linux代码什么都不用改, make menuconfig 配置好就行,

如果你用 sunxi-fel 的 spi nor flash 版本要改下切换bank的代码:

https://whycan.cn/t_444.html#p1560

#109 Re: 全志 SOC » 试一试用MDK ARMCC 编译全志官方f1c100s sdk --- melis » 2020-04-09 09:04:12

看有没有生成img文件,如果有一般就没问题。那个提示是文件时间不对的问题,可能那些lib显示成2024年什么的

#110 Re: 全志 SOC » 请教下各位,怎么备份raw flash下的根文件系统啊 » 2020-04-08 15:10:40

mtd2.bin 恢复到 /devmtd2 用busybox 里面的 flashcp 命令:

flashcp mtd2.bin /dev/mtd2 -v

擦,写,校验 一条龙服务, 校验100%才是真成功,否则就失败了。

#112 Re: 全志 SOC » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-07 16:41:56

迪卡 说:

whycan.cn = 我还要宠爱你.菜鸟

这解释无敌了,斜眼笑.gif

#114 Re: 全志 SOC » 荔枝派执行qmake后得到Makefile,接着执行make后报错,求老师们指点 » 2020-04-07 14:39:03

mv /home/zhang/buildroot-2018.08.2/output/host/bin/arm-linux-gnueabihf-g++ /home/zhang/buildroot-2018.08.2/output/host/bin/arm-linux-gnueabihf-g++.bak

mv /home/zhang/buildroot-2018.08.2/output/host/bin/arm-linux-gnueabihf-gcc /home/zhang/buildroot-2018.08.2/output/host/bin/arm-linux-gnueabihf-gcc.bak

cp /home/zhang/buildroot-2018.08.2/output/host/bin/arm-linux-g++ /home/zhang/buildroot-2018.08.2/output/host/bin/arm-linux-gnueabihf-g++

cp /home/zhang/buildroot-2018.08.2/output/host/bin/arm-linux-gcc /home/zhang/buildroot-2018.08.2/output/host/bin/arm-linux-gnueabihf-gcc

#115 Re: 全志 SOC » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-07 14:16:36

xblzy0423 说:

怎么下载,不会下载

git clone

或者网页也可以下载

#116 Re: 全志 SOC » 荔枝派执行qmake后得到Makefile,接着执行make后报错,求老师们指点 » 2020-04-07 14:06:34

用 ln 命令把arm-linux-gnueabihf-g++链接到 arm-linux-gcc

或者删掉前者,把后者拷贝为前者也可以

#117 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap版 » 2020-04-07 09:08:22

刚刚咨询一位大佬:

这个速度本来就慢,
几十kHz,
内核与用户的数据同步毫秒级。
就是说linux不适合干用gpio直接驱动的事情,即使用mmap也一样。

#118 Re: 8051/STC8/AT89C51/N76E003 » 新唐 N76E003 8051 1T 单片机入坑记录 » 2020-04-06 16:45:38

skcks 说:

晕哥试过bootloader改成串口1么?有没任何资料说过串口1不能做isp?

如果用自己的ISP上位机软件,哪个口可以做ISP吧,i2c,spi都行。

#120 Re: 全志 SOC » 跟风也画一个F1C100S的图纸 » 2020-04-04 14:16:18

liuchangyin 说:

新唐的集成DDR的ARM9好像没H264编码器,价格也会贵点,但是外设资源会丰富些

新唐N32926

#122 Re: 全志 SOC » Allwinner S3 uboot 2020.01 (LCD + 以太网 + USB 挂载 + FastBoot + SDC 2) 不开源 » 2020-04-03 19:04:13

k455619 说:

晕哥 快点把赞赏功能整起来哦。

嗯嗯, 小本本记下来.

#123 Re: 全志 SOC » Allwinner S3 uboot 2020.01 (LCD + 以太网 + USB 挂载 + FastBoot + SDC 2) 不开源 » 2020-04-03 17:23:28

jiangming1399 说:

不开源还好意思发出来(

不管开不开源都支持,楼主在qq群还发了其他图片,晚点有点我一并整理上来。

#124 Re: 全志 SOC » 请教大家一个问题,全志linux主线uart驱动里面控制一个io脚实现rs485功能,应该如何修改? » 2020-04-03 17:14:29

询问了以前用f1c100s控制 da14585 蓝牙芯片的朋友, 他说:

改 8250_port.c 里面的 serial8250_tx_chars()

这里发送数据前控制电平(高),

发完送数据前控制电平(低)


因为我的f1c100s io 口检测 da14585 的 cts 引脚电平,

如果为高电平就等待,

如果为低电平就启动发送。

我的这个流控逻辑和你的RS485逻辑基本一样。

#128 Re: 全志 SOC » v3s 文件系统不能显示中文 » 2020-04-02 16:49:39

2020-04-02_164802.png

下载 mobaxterm, 右击终端 -> Change terminal setting ...

#130 Re: 站务公告/网站建设 » 本站最近迁入国内阿里云服务器, 根据北案要求, whycan.cn 可能随时停止解析, 如果访问不了请使用 whycan.io 域名 » 2020-04-02 09:27:15

刚刚阿里云备案工作人员说目前可以不用停止解析域名。
但是如果通管局不通过被打回,还是得停止解析。

#132 Re: 站务公告/网站建设 » 本站最近迁入国内阿里云服务器, 根据北案要求, whycan.cn 可能随时停止解析, 如果访问不了请使用 whycan.io 域名 » 2020-04-01 17:10:41

m1n9 说:

我说的是全新北岸一个全新域名托管静态文件,包括论坛附件和前端资源。
论坛还放在国外,只是静态资源引用放在北岸CDN域名服务器上的。

这个可以有,而且现在就是这么做的, zip/7z/rar 文件下载速度已经飞快了。
但是后面要做 微信/支付宝 扫码打赏/悬赏/下载 这些,始终都绕不开北案。

#134 Re: 站务公告/网站建设 » 本站最近迁入国内阿里云服务器, 根据北案要求, whycan.cn 可能随时停止解析, 如果访问不了请使用 whycan.io 域名 » 2020-04-01 16:27:33

m1n9 说:

专门备案个域名用于CDN也可以,主域名不动。
论坛北岸风险太大了,域名北岸后完还要公安北岸,之前还有个专项北岸,现在应该没有了。

北按后所有附件和帖子要审核后显示,据我了解阿里云的cdn,域名一样要北案才行。

#136 Re: 全志 SOC » 分享全志主线u-boot/linux 打包 TF/SD/SDNAND 镜像脚本 » 2020-04-01 14:09:17

今天偶然翻到以前许诺@达克罗德 大神做一个TF打包脚本的,

后来事多忘记,今天突然看到,把这个坑给填了。

#138 全志 SOC » 分享全志主线u-boot/linux 打包 TF/SD/SDNAND 镜像脚本 » 2020-04-01 14:04:05

晕哥
回复: 29

--------------------------------------------
以下由 @哇酷小管家 2021-12-16 添加:

用 buildroot 更方便,参考这两个链接

buildroot-tiny200 (F1C100/200s) 开发包近期更新内容 * 已支持DVP摄像头 *
https://whycan.com/t_5221.html


(V3s/V3x/S3/S3L/R11通吃)小智V3x开发板smallwitpi lite u-boot/linux/buildroot测试
https://whycan.com/t_7248.html#p69178

完毕
--------------------------------------------






pack.sh

#!/bin/bash

_UBOOT_SIZE=1

###第一个分区(FAT)大小,单位MiB##
_P1_SIZE=16

###TF卡镜像文件名称###
_IMG_FILE='f1c100s_tfcard_img.bin'

###TF卡镜像文件大小, 单位MiB###
_IMG_SIZE=120

temp_root_dir=$PWD

_UBOOT_FILE="${temp_root_dir}/data/u-boot-sunxi-with-spl.bin"
_SPLASH_BMP_FILE="${temp_root_dir}/data/splash.bmp"
_BOOT_SCR_FILE="${temp_root_dir}/data/boot.scr"
_KERNEL_IMAGE_FILE="${temp_root_dir}/data/zImage"
_DTB_FILE="${temp_root_dir}/data/dtb.bin"
_ROOTFS_TGZ_FILE="${temp_root_dir}/data/rootfs.tgz"

        ###初始化镜像文件###
        dd if=/dev/zero of=$_IMG_FILE bs=1M count=$_IMG_SIZE

        ###判断镜像文件是否初始化成功###
        if [ $? -ne 0 ]
        then
                echo  "getting error in creating dd img!"
                exit
        fi


        ###获取一个循环设备###
        _LOOP_DEV=$(sudo losetup -f)
        #echo ${_LOOP_DEV}



        ##再次判断此设备是否存在###
        if [ -z $_LOOP_DEV ]
        then
                echo  "can not find a loop device!"
                exit
        fi

        ###把镜像文件和循环设备关联###
        sudo losetup $_LOOP_DEV $_IMG_FILE
        if [ $? -ne 0 ]
        then
                echo  "dd img --> $_LOOP_DEV error!"
                sudo losetup -d $_LOOP_DEV >/dev/null 2>&1 && exit
        fi
        echo  "--->creating partitions for tf image ..."
        #blockdev --rereadpt $_LOOP_DEV >/dev/null 2>&1
        # size only can be integer



###分区###
cat <<EOT |sudo  sfdisk ${_IMG_FILE}
${_UBOOT_SIZE}M,${_P1_SIZE}M,c
,,L
EOT


###格式化###
        sleep 2
        sudo partx -u $_LOOP_DEV
        sudo mkfs.vfat ${_LOOP_DEV}p1 ||exit
        sudo mkfs.ext4 ${_LOOP_DEV}p2 ||exit
        if [ $? -ne 0 ]
        then
                echo  "error in creating partitions"
                sudo losetup -d $_LOOP_DEV >/dev/null 2>&1 && exit
                #sudo partprobe $_LOOP_DEV >/dev/null 2>&1 && exit
        fi

        ###u-boot写到TF卡8K偏移处###
        #pack uboot
        echo  "--->writing u-boot-sunxi-with-spl to $_LOOP_DEV"
        # sudo dd if=/dev/zero of=$_LOOP_DEV bs=1K seek=1 count=1023  # clear except mbr
        sudo dd if=$_UBOOT_FILE of=$_LOOP_DEV bs=1024 seek=8
        if [ $? -ne 0 ]
        then
                echo  "writing u-boot error!"
                sudo losetup -d $_LOOP_DEV >/dev/null 2>&1 && exit
                #sudo partprobe $_LOOP_DEV >/dev/null 2>&1 && exit
        fi



        ###新建 p1,p2 目录,并挂载TF卡两个分区###
        sudo sync
        mkdir -p ${temp_root_dir}/output/p1 >/dev/null 2>&1
        mkdir -p ${temp_root_dir}/output/p2 > /dev/null 2>&1
        sudo mount ${_LOOP_DEV}p1 ${temp_root_dir}/output/p1
        sudo mount ${_LOOP_DEV}p2 ${temp_root_dir}/output/p2
        echo  "--->copy boot and rootfs files..."
        sudo rm -rf  ${temp_root_dir}/output/p1/* && sudo rm -rf ${temp_root_dir}/output/p2/*


        ###复制zImage, dtb, boot.scr, splash.bmp 等文件到第一分区 ###
        sudo cp ${_KERNEL_IMAGE_FILE} ${temp_root_dir}/output/p1/zImage &&\
        sudo cp ${_DTB_FILE} ${temp_root_dir}/output/p1/ &&\
        sudo cp ${_BOOT_SCR_FILE} ${temp_root_dir}/output/p1/ &&\
        sudo cp ${_SPLASH_BMP_FILE} ${temp_root_dir}/output/p1/ &&\
        echo "--->p1 done~"

        ###解压 rootfs.tgz 到第二分区###
        sudo tar xvf ${_ROOTFS_TGZ_FILE} -C ${temp_root_dir}/output/p2/ &&\
        echo "--->p2 done~"



        ###同步, 等待, 卸载, 退出###
        sudo sync
        sleep 2
        sudo umount ${temp_root_dir}/output/p1 ${temp_root_dir}/output/p2  && sudo losetup -d $_LOOP_DEV
        if [ $? -ne 0 ]
        then
                echo  "umount or losetup -d error!!"
                exit
        fi

目录结构:

.
..
pack.sh
data/
    u-boot-sunxi-with-spl.bin
    boot.scr
    dtb.bin
    rootfs.tgz
    splash.bmp    
    zImage

以上脚本参考本站 @xiaohui 的打包脚本, 我加了部分注释, 把其他非打包脚本剥离开了。

#139 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » AIR724模块, 合宙拼团: 一个4G模块+一个4G开发板 = 19.9元 » 2020-04-01 10:44:59

metro 说:

收到流量卡了,不过开发板似乎还没发货,笑哭.jpg

开发板估计是接单才开始备料生产,所以前面有朋友说是库存肯定不对。
大公司没理由去推过期产品。

#140 Re: 全志 SOC » 开源自己画的一个F1C100S板子和原理图,摄像头和屏幕同时引出,所有io引出 » 2020-03-31 20:13:14

sea18c 说:

电阻触摸接口有验证吗,好像不对呀。屏接线与荔枝派是反的,一个是RGB,一个是BGR.

这里有RGB/BGR的切换补丁:

https://gitee.com/jiang_xing/f1c100s_buildroot/blob/master/board/f1c100s/patch/linux_kernel.patch

--- a/arch/arm/boot/dts/suniv-f1c100s.dtsi	2019-08-29 14:30:28.000000000 +0800
+++ b/arch/arm/boot/dts/suniv-f1c100s.dtsi	2020-01-21 19:26:46.466638364 +0800
@@ -4,6 +4,10 @@
  * Copyright 2018 Mesih Kilinc <mesihkilinc@gmail.com>
  */
 
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/suniv-ccu-f1c100s.h>
+#include <dt-bindings/reset/suniv-ccu-f1c100s.h>
+
 / {
 	#address-cells = <1>;
 	#size-cells = <1>;
@@ -31,6 +35,12 @@
 			device_type = "cpu";
 		};
 	};
+	
+	de: display-engine {
+		compatible = "allwinner,suniv-f1c100s-display-engine";
+		allwinner,pipelines = <&fe0>;
+		status = "disabled";
+	};
 
 	soc {
 		compatible = "simple-bus";
@@ -62,6 +72,68 @@
 			};
 		};
 
+		spi0: spi@1c05000 {
+			compatible = "allwinner,suniv-spi",
+				     "allwinner,sun8i-h3-spi";
+			reg = <0x01c05000 0x1000>;
+			interrupts = <10>;
+			clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_BUS_SPI0>;
+			clock-names = "ahb", "mod";
+			resets = <&ccu RST_BUS_SPI0>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		spi1: spi@1c06000 {
+			compatible = "allwinner,suniv-spi",
+				     "allwinner,sun8i-h3-spi";
+			reg = <0x01c06000 0x1000>;
+			interrupts = <11>;
+			clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_BUS_SPI1>;
+			clock-names = "ahb", "mod";
+			resets = <&ccu RST_BUS_SPI1>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		tcon0: lcd-controller@1c0c000 {
+			compatible = "allwinner,suniv-f1c100s-tcon";
+			reg = <0x01c0c000 0x1000>;
+			interrupts = <29>;
+			clocks = <&ccu CLK_BUS_LCD>,
+				 <&ccu CLK_TCON>;
+			clock-names = "ahb",
+				      "tcon-ch0";
+			clock-output-names = "tcon-pixel-clock";
+			resets = <&ccu RST_BUS_LCD>;
+			reset-names = "lcd";
+			status = "disabled";
+
+			ports {
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				tcon0_in: port@0 {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					reg = <0>;
+
+					tcon0_in_be0: endpoint@0 {
+						reg = <0>;
+						remote-endpoint = <&be0_out_tcon0>;
+					};
+				};
+
+				tcon0_out: port@1 {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					reg = <1>;
+				};
+			};
+		};
+
 		ccu: clock@1c20000 {
 			compatible = "allwinner,suniv-f1c100s-ccu";
 			reg = <0x01c20000 0x400>;
@@ -71,6 +143,19 @@
 			#reset-cells = <1>;
 		};
 
+		i2c0: i2c@1C27000 {
+			compatible = "allwinner,sun6i-a31-i2c";
+			reg = <0x01C27000 0x400>;
+			interrupts = <7>;
+			clocks = <&ccu CLK_BUS_I2C0>;
+			resets = <&ccu RST_BUS_I2C0>;
+			pinctrl-names = "default";
+			pinctrl-0 = <&i2c0_pins>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
 		intc: interrupt-controller@1c20400 {
 			compatible = "allwinner,suniv-f1c100s-ic";
 			reg = <0x01c20400 0x400>;
@@ -82,17 +167,41 @@
 			compatible = "allwinner,suniv-f1c100s-pinctrl";
 			reg = <0x01c20800 0x400>;
 			interrupts = <38>, <39>, <40>;
-			clocks = <&ccu 37>, <&osc24M>, <&osc32k>;
+			clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
 			clock-names = "apb", "hosc", "losc";
 			gpio-controller;
 			interrupt-controller;
 			#interrupt-cells = <3>;
 			#gpio-cells = <3>;
 
+			i2c0_pins: i2c0 {
+				pins = "PE11", "PE12";
+				function = "i2c0";
+            };
+
 			uart0_pe_pins: uart0-pe-pins {
 				pins = "PE0", "PE1";
 				function = "uart0";
 			};
+			
+			lcd_rgb666_pins: lcd-rgb666-pins {
+				pins = "PD0", "PD1", "PD2", "PD3", "PD4",
+				       "PD5", "PD6", "PD7", "PD8", "PD9",
+				       "PD10", "PD11", "PD12", "PD13", "PD14",
+				       "PD15", "PD16", "PD17", "PD18", "PD19",
+				       "PD20", "PD21";
+				function = "lcd";
+			};
+			
+			mmc0_pins: mmc0-pins {
+				pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";
+				function = "mmc0";
+			};
+
+			spi0_pins_a: spi0-pins-pc {
+				pins = "PC0", "PC1", "PC2", "PC3";
+				function = "spi0";
+			};
 		};
 
 		timer@1c20c00 {
@@ -102,20 +211,49 @@
 			clocks = <&osc24M>;
 		};
 
+		mmc0: mmc@1c0f000 {
+			compatible = "allwinner,suniv-f1c100s-mmc",
+				     "allwinner,sun7i-a20-mmc";
+			reg = <0x01c0f000 0x1000>;
+			clocks = <&ccu CLK_BUS_MMC0>,
+				 <&ccu CLK_MMC0>,
+				 <&ccu CLK_MMC0_OUTPUT>,
+				 <&ccu CLK_MMC0_SAMPLE>;
+			clock-names = "ahb",
+					      "mmc",
+					      "output",
+				    	  "sample";
+			resets = <&ccu RST_BUS_MMC0>;
+			reset-names = "ahb";
+			interrupts = <23>;
+			pinctrl-names = "default";
+			pinctrl-0 = <&mmc0_pins>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
 		wdt: watchdog@1c20ca0 {
 			compatible = "allwinner,suniv-f1c100s-wdt",
 				     "allwinner,sun4i-a10-wdt";
 			reg = <0x01c20ca0 0x20>;
 		};
 
+		lradc: lradc@1C23400 {
+			compatible = "allwinner,sun4i-a10-lradc-keys";
+			reg = <0x01C23400 0x400>;
+			interrupts = <22>;
+			status = "disabled";
+		};
+
 		uart0: serial@1c25000 {
 			compatible = "snps,dw-apb-uart";
 			reg = <0x01c25000 0x400>;
 			interrupts = <1>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
-			clocks = <&ccu 38>;
-			resets = <&ccu 24>;
+			clocks = <&ccu CLK_BUS_UART0>;
+			resets = <&ccu RST_BUS_UART0>;
 			status = "disabled";
 		};
 
@@ -125,8 +263,8 @@
 			interrupts = <2>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
-			clocks = <&ccu 39>;
-			resets = <&ccu 25>;
+			clocks = <&ccu CLK_BUS_UART1>;
+			resets = <&ccu RST_BUS_UART1>;
 			status = "disabled";
 		};
 
@@ -136,9 +274,107 @@
 			interrupts = <3>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
-			clocks = <&ccu 40>;
-			resets = <&ccu 26>;
+			clocks = <&ccu CLK_BUS_UART2>;
+			resets = <&ccu RST_BUS_UART2>;
+			status = "disabled";
+		};
+
+		usb_otg: usb@1c13000 {
+			compatible = "allwinner,suniv-musb";
+			reg = <0x01c13000 0x0400>;
+			clocks = <&ccu CLK_BUS_OTG>;
+			resets = <&ccu RST_BUS_OTG>;
+			interrupts = <26>;
+			interrupt-names = "mc";
+			phys = <&usbphy 0>;
+			phy-names = "usb";
+			extcon = <&usbphy 0>;
+			allwinner,sram = <&otg_sram 1>;
+			status = "disabled";
+		};
+
+		usbphy: phy@1c13400 {
+			compatible = "allwinner,suniv-usb-phy";
+			reg = <0x01c13400 0x10>;
+			reg-names = "phy_ctrl";
+			clocks = <&ccu CLK_USB_PHY0>;
+			clock-names = "usb0_phy";
+			resets = <&ccu RST_USB_PHY0>;
+			reset-names = "usb0_reset";
+			#phy-cells = <1>;
+			status = "disabled";
+		};
+
+		fe0: display-frontend@1e00000 {
+			compatible = "allwinner,suniv-f1c100s-display-frontend";
+			reg = <0x01e00000 0x20000>;
+			interrupts = <30>;
+			clocks = <&ccu CLK_BUS_DE_FE>, <&ccu CLK_DE_FE>,
+				 <&ccu CLK_DRAM_DE_FE>;
+			clock-names = "ahb", "mod",
+				      "ram";
+			resets = <&ccu RST_BUS_DE_FE>;
 			status = "disabled";
+
+			ports {
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				fe0_out: port@1 {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					reg = <1>;
+
+					fe0_out_be0: endpoint@0 {
+						reg = <0>;
+						remote-endpoint = <&be0_in_fe0>;
+					};
+				};
+			};
+		};
+
+		be0: display-backend@1e60000 {
+			compatible = "allwinner,suniv-f1c100s-display-backend";
+			reg = <0x01e60000 0x10000>;
+			reg-names = "be";
+			interrupts = <31>;
+			clocks = <&ccu CLK_BUS_DE_BE>, <&ccu CLK_DE_BE>,
+				 <&ccu CLK_DRAM_DE_BE>;
+			clock-names = "ahb", "mod",
+				      "ram";
+			resets = <&ccu RST_BUS_DE_BE>;
+			reset-names = "be";
+			assigned-clocks = <&ccu CLK_DE_BE>;
+			assigned-clock-rates = <300000000>;
+		    rgb-channel-swap = <0>;
+
+			ports {
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				be0_in: port@0 {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					reg = <0>;
+
+					be0_in_fe0: endpoint@0 {
+						reg = <0>;
+						remote-endpoint = <&fe0_out_be0>;
+					};
+				};
+
+				be0_out: port@1 {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					reg = <1>;
+
+					be0_out_tcon0: endpoint@0 {
+						reg = <0>;
+						remote-endpoint = <&tcon0_in_be0>;
+					};
+				};
+			};
 		};
 	};
 };
+
--- a/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts	2019-08-29 14:30:28.000000000 +0800
+++ b/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts	2020-01-21 19:26:46.470638361 +0800
@@ -1,10 +1,14 @@
-// SPDX-License-Identifier: (GPL-2.0+ OR X11)
 /*
  * Copyright 2018 Icenowy Zheng <icenowy@aosc.io>
  */
 
 /dts-v1/;
+
 #include "suniv-f1c100s.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include "sunxi-common-regulators.dtsi"
 
 / {
 	model = "Lichee Pi Nano";
@@ -12,11 +16,142 @@
 
 	aliases {
 		serial0 = &uart0;
+		spi0 = &spi0;
 	};
 
 	chosen {
 		stdout-path = "serial0:115200n8";
 	};
+
+	reg_vcc3v3: vcc3v3 {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc3v3";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+	};
+
+	panel: panel {
+		compatible = "ampire,am-480272h3tmqw-t01h";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		enable-gpios = <&pio 4 6 GPIO_ACTIVE_HIGH>;
+		power-supply = <&reg_vcc3v3>;
+
+ 		port@0 {
+			reg = <0>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+ 			panel_input: endpoint@0 {
+				reg = <0>;
+				remote-endpoint = <&tcon0_out_lcd>;
+			};
+		};
+	};
+};
+
+&otg_sram {
+	status = "okay";
+};
+
+&usb_otg {
+	dr_mode = "otg";
+	status = "okay";
+};
+
+&usbphy {
+	usb0_id_det-gpio = <&pio 4 2 GPIO_ACTIVE_HIGH>; /* PE2 */
+	status = "okay";
+};
+
+&pio {
+	vcc-pc-supply = <&reg_vcc3v3>;
+	vcc-pd-supply = <&reg_vcc3v3>;
+	vcc-pe-supply = <&reg_vcc3v3>;
+	vcc-pf-supply = <&reg_vcc3v3>;
+};
+
+&be0 {
+	status = "okay";
+};
+
+&de {
+	status = "okay";
+};
+
+&tcon0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&lcd_rgb666_pins>;
+	status = "okay";
+};
+
+&tcon0_out {
+	tcon0_out_lcd: endpoint@0 {
+		reg = <0>;
+		remote-endpoint = <&panel_input>;
+	};
+};
+
+&i2c0 {
+    pinctrl-0 = <&i2c0_pins>;
+    pinctrl-names = "default";
+    status = "okay";
+};
+
+&mmc0 {
+	vmmc-supply = <&reg_vcc3v3>;
+	bus-width = <4>;
+	broken-cd;
+	status = "okay";
+};
+
+&pio {
+    ts_reset_pin: ts_reset_pin@0 {
+        pins = "PE9";
+        function = "gpio_out";
+    };
+};
+
+&spi0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&spi0_pins_a>;
+	status = "okay";
+
+	flash: w25q128@0 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "winbond,w25q128", "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <50000000>;
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x000000 0x100000>;
+				read-only;
+			};
+
+			partition@100000 {
+				label = "dtb";
+				reg = <0x100000 0x10000>;
+				read-only;
+			};
+
+			partition@110000 {
+				label = "kernel";
+				reg = <0x110000 0x400000>;
+				read-only;
+			};
+
+			partition@520000 {
+				label = "rootfs";
+				reg = <0x510000 0xAF0000>;
+			};
+		};
+	};
 };
 
 &uart0 {
--- a/drivers/mtd/spi-nor/spi-nor.c	2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/mtd/spi-nor/spi-nor.c	2020-01-21 19:26:46.470638361 +0800
@@ -2118,7 +2118,7 @@
 	},
 	{ "w25q80", INFO(0xef5014, 0, 64 * 1024,  16, SECT_4K) },
 	{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024,  16, SECT_4K) },
-	{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
+	{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, 0) },
 	{ "w25q256", INFO(0xef4019, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
 	{ "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024,
 			SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ) },
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c	2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c	2020-01-21 19:26:46.470638361 +0800
@@ -1419,6 +1419,15 @@
 	return 0;
 }
 
+static const struct sun4i_tcon_quirks suniv_f1c100s_quirks = {
+	/*
+	 * The F1C100s SoC has a second channel in TCON, but the clock input of
+	 * it is not documented.
+	 */
+	.has_channel_0		= true,
+	/* .has_channel_1	= true, */
+};
+
 static const struct sun4i_tcon_quirks sun4i_a10_quirks = {
 	.has_channel_0		= true,
 	.has_channel_1		= true,
@@ -1487,6 +1496,7 @@
 
 /* sun4i_drv uses this list to check if a device node is a TCON */
 const struct of_device_id sun4i_tcon_of_table[] = {
+	{ .compatible = "allwinner,suniv-f1c100s-tcon", .data = &suniv_f1c100s_quirks },
 	{ .compatible = "allwinner,sun4i-a10-tcon", .data = &sun4i_a10_quirks },
 	{ .compatible = "allwinner,sun5i-a13-tcon", .data = &sun5i_a13_quirks },
 	{ .compatible = "allwinner,sun6i-a31-tcon", .data = &sun6i_a31_quirks },
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c	2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c	2020-01-21 19:26:46.470638361 +0800
@@ -164,7 +164,8 @@
 
 static bool sun4i_drv_node_is_frontend(struct device_node *node)
 {
-	return of_device_is_compatible(node, "allwinner,sun4i-a10-display-frontend") ||
+	return of_device_is_compatible(node, "allwinner,suniv-f1c100s-display-frontend") ||
+		of_device_is_compatible(node, "allwinner,sun4i-a10-display-frontend") ||
 		of_device_is_compatible(node, "allwinner,sun5i-a13-display-frontend") ||
 		of_device_is_compatible(node, "allwinner,sun6i-a31-display-frontend") ||
 		of_device_is_compatible(node, "allwinner,sun7i-a20-display-frontend") ||
@@ -404,6 +405,7 @@
 }
 
 static const struct of_device_id sun4i_drv_of_table[] = {
+	{ .compatible = "allwinner,suniv-f1c100s-display-engine" },
 	{ .compatible = "allwinner,sun4i-a10-display-engine" },
 	{ .compatible = "allwinner,sun5i-a10s-display-engine" },
 	{ .compatible = "allwinner,sun5i-a13-display-engine" },
--- a/drivers/gpu/drm/sun4i/sunxi_engine.h	2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sunxi_engine.h	2020-01-21 19:26:46.470638361 +0800
@@ -124,6 +124,7 @@
 	struct regmap			*regs;
 
 	int id;
+	int rgb_swap;
 
 	/* Engine list management */
 	struct list_head		list;
--- a/drivers/gpu/drm/sun4i/sun4i_backend.h	2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sun4i_backend.h	2020-01-21 19:30:43.086543111 +0800
@@ -92,6 +92,7 @@
 #define SUN4I_BACKEND_LAY_FBFMT_RGB888				(11 << 8)
 #define SUN4I_BACKEND_LAY_FBFMT_ARGB4444			(12 << 8)
 #define SUN4I_BACKEND_LAY_FBFMT_RGBA4444			(13 << 8)
+#define SUN4I_BACKEND_LAY_RGB_SWAP                  (1 << 2)
 
 #define SUN4I_BACKEND_DLCDPCTL_REG		0x8b0
 #define SUN4I_BACKEND_DLCDPFRMBUF_ADDRCTL_REG	0x8b4
--- a/drivers/gpu/drm/sun4i/sun4i_backend.c	2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sun4i_backend.c	2020-01-21 19:26:46.542638322 +0800
@@ -293,9 +293,16 @@
 		return ret;
 	}
 
-	regmap_update_bits(backend->engine.regs,
-			   SUN4I_BACKEND_ATTCTL_REG1(layer),
-			   SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT, val);
+	if (backend->engine.rgb_swap) {
+	    regmap_update_bits(backend->engine.regs,
+			       SUN4I_BACKEND_ATTCTL_REG1(layer),
+			       SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT | SUN4I_BACKEND_LAY_RGB_SWAP, 
+			       val | SUN4I_BACKEND_LAY_RGB_SWAP);
+	} else {
+	    regmap_update_bits(backend->engine.regs,
+			       SUN4I_BACKEND_ATTCTL_REG1(layer),
+			       SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT, val);
+	}
 
 	return 0;
 }
@@ -316,10 +323,17 @@
 			   SUN4I_BACKEND_ATTCTL_REG0(layer),
 			   SUN4I_BACKEND_ATTCTL_REG0_LAY_VDOEN,
 			   SUN4I_BACKEND_ATTCTL_REG0_LAY_VDOEN);
-
-	regmap_update_bits(backend->engine.regs,
-			   SUN4I_BACKEND_ATTCTL_REG1(layer),
-			   SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT, val);
+			   
+	if (backend->engine.rgb_swap) {
+	    regmap_update_bits(backend->engine.regs,
+			       SUN4I_BACKEND_ATTCTL_REG1(layer),
+			       SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT | SUN4I_BACKEND_LAY_RGB_SWAP, 
+			       val | SUN4I_BACKEND_LAY_RGB_SWAP);
+	} else {
+	    regmap_update_bits(backend->engine.regs,
+			       SUN4I_BACKEND_ATTCTL_REG1(layer),
+			       SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT, val);
+	}
 
 	return 0;
 }
@@ -818,6 +832,12 @@
 	backend->engine.id = sun4i_backend_of_get_id(dev->of_node);
 	if (backend->engine.id < 0)
 		return backend->engine.id;
+	
+	backend->engine.rgb_swap = 0;
+    if (of_find_property(dev->of_node, "rgb-channel-swap", NULL)) {
+        of_property_read_u32(dev->of_node, "rgb-channel-swap", &backend->engine.rgb_swap);
+        dev_warn(dev, "backend rgb channel swap(%d)\n", backend->engine.rgb_swap);
+    }
 
 	backend->frontend = sun4i_backend_find_frontend(drv, dev->of_node);
 	if (IS_ERR(backend->frontend))
@@ -972,6 +992,9 @@
 	return 0;
 }
 
+static const struct sun4i_backend_quirks suniv_backend_quirks = {
+};
+
 static const struct sun4i_backend_quirks sun4i_backend_quirks = {
 	.needs_output_muxing = true,
 };
@@ -996,6 +1019,10 @@
 
 static const struct of_device_id sun4i_backend_of_table[] = {
 	{
+		.compatible = "allwinner,suniv-f1c100s-display-backend",
+		.data = &suniv_backend_quirks,
+	},
+	{
 		.compatible = "allwinner,sun4i-a10-display-backend",
 		.data = &sun4i_backend_quirks,
 	},
--- a/drivers/phy/allwinner/phy-sun4i-usb.c	2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c	2020-01-21 19:26:46.542638322 +0800
@@ -98,6 +98,7 @@
 #define POLL_TIME			msecs_to_jiffies(250)
 
 enum sun4i_usb_phy_type {
+	suniv_phy,
 	sun4i_a10_phy,
 	sun6i_a31_phy,
 	sun8i_a33_phy,
@@ -859,6 +860,14 @@
 	return 0;
 }
 
+static const struct sun4i_usb_phy_cfg suniv_cfg = {
+	.num_phys = 1,
+	.type = suniv_phy,
+	.disc_thresh = 3,
+	.phyctl_offset = REG_PHYCTL_A10,
+	.dedicated_clocks = true,
+};
+
 static const struct sun4i_usb_phy_cfg sun4i_a10_cfg = {
 	.num_phys = 3,
 	.type = sun4i_a10_phy,
@@ -973,6 +982,7 @@
 };
 
 static const struct of_device_id sun4i_usb_phy_of_match[] = {
+	{ .compatible = "allwinner,suniv-usb-phy", .data = &suniv_cfg },
 	{ .compatible = "allwinner,sun4i-a10-usb-phy", .data = &sun4i_a10_cfg },
 	{ .compatible = "allwinner,sun5i-a13-usb-phy", .data = &sun5i_a13_cfg },
 	{ .compatible = "allwinner,sun6i-a31-usb-phy", .data = &sun6i_a31_cfg },
--- a/drivers/usb/musb/sunxi.c	2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/usb/musb/sunxi.c	2020-01-21 19:26:46.542638322 +0800
@@ -714,14 +714,16 @@
 	INIT_WORK(&glue->work, sunxi_musb_work);
 	glue->host_nb.notifier_call = sunxi_musb_host_notifier;
 
-	if (of_device_is_compatible(np, "allwinner,sun4i-a10-musb"))
+	if (of_device_is_compatible(np, "allwinner,sun4i-a10-musb") ||
+		of_device_is_compatible(np, "allwinner,suniv-musb"))
 		set_bit(SUNXI_MUSB_FL_HAS_SRAM, &glue->flags);
 
 	if (of_device_is_compatible(np, "allwinner,sun6i-a31-musb"))
 		set_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags);
 
 	if (of_device_is_compatible(np, "allwinner,sun8i-a33-musb") ||
-	    of_device_is_compatible(np, "allwinner,sun8i-h3-musb")) {
+	    of_device_is_compatible(np, "allwinner,sun8i-h3-musb") ||
+		of_device_is_compatible(np, "allwinner,suniv-musb")) {
 		set_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags);
 		set_bit(SUNXI_MUSB_FL_NO_CONFIGDATA, &glue->flags);
 	}
@@ -812,6 +814,7 @@
 }
 
 static const struct of_device_id sunxi_musb_match[] = {
+	{ .compatible = "allwinner,suniv-musb", },
 	{ .compatible = "allwinner,sun4i-a10-musb", },
 	{ .compatible = "allwinner,sun6i-a31-musb", },
 	{ .compatible = "allwinner,sun8i-a33-musb", },
--- a/drivers/video/fbdev/core/fbcon.c	2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/video/fbdev/core/fbcon.c	2020-01-21 19:26:46.542638322 +0800
@@ -368,6 +368,7 @@
 
 static void fb_flashcursor(struct work_struct *work)
 {
+#if 0
 	struct fb_info *info = container_of(work, struct fb_info, queue);
 	struct fbcon_ops *ops = info->fbcon_par;
 	struct vc_data *vc = NULL;
@@ -398,6 +399,7 @@
 	ops->cursor(vc, info, mode, softback_lines, get_color(vc, info, c, 1),
 		    get_color(vc, info, c, 0));
 	console_unlock();
+#endif
 }
 
 static void cursor_timer_handler(struct timer_list *t)

#143 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » Q群看到的这个手表UI如何? (视频不能播放的原因 和 修复后的视频都在 6楼) » 2020-03-31 09:29:58

staunchheart 说:

用七牛、阿里的云存储,有转码服务,还可以同时转出多个清淅度供用户选择。
只需花少许的钱:D

感谢建议,晚些考虑迁移到阿里云等国内公有云服务器上。

#145 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » Q群看到的这个手表UI如何? (视频不能播放的原因 和 修复后的视频都在 6楼) » 2020-03-31 09:03:31

感谢楼主分享!

找到原因了, 发现这个文件视频用hevc编码, 音频aac,

我查了一下, hevc 是微软扩展的h.265格式(难道又要分裂h.265???),

所以大部分浏览器无法直接播放视频, 只能听到声音,

而用微软最新的 edge 浏览器是可以播放一楼的视频。

win/linux 可用 ffmpeg 重新转一下格式

windows 可执行的 ffmpeg.exe 在这里下载:
http://www.ffmpeg.org/download.html

可以用这个命令:

ffmpeg.exe -i 1585463237885.mp4 -vcodec libx264 -acodec copy 1585463237885.mp4

或这个命令转码:

ffmpeg.exe -i 1585463237885.mp4 -vcodec libx264 -acodec copy 1585463237885.mp4

#146 Re: 全志 SOC » v3s linux3.4 驱动位置 » 2020-03-30 22:41:14

和你编译的时候选的配置文件有关系

#147 Re: 全志 SOC » 编译、安装Windows版本sunxi-fel步骤 (32M spi flash补丁,支持W25Q256/MX25L256) » 2020-03-30 22:26:54

zhaochun 说:

晕哥,问一个基础问题,我先后买了三块lichee nano,将spi-flash的1,4和1,2都分别短路过,但都不能进入fel模式,第一步就卡住了,插上USB后设备管理器没有任何反应,请问我操作还有哪里不对。

建议换 原装USB数据线, 或者换一台电脑.

#148 Re: 全志 SOC » 问一下,想买V3S的开发板, 版主你家的淘宝店铺是哪个啊 » 2020-03-30 17:27:25

淘宝搜  荔枝派 zero

sipeed官方旗舰店  就是荔枝派。

#149 Re: ESP32/ESP8266 » esp32 录音失败 » 2020-03-30 16:17:50

hgh1960 说:

请大侠帮一下

前面那两个软件有没有测试?另外i2s语音播放有没有问题?

#150 Re: 全志 SOC » 分享一份f1c200s定时器驱动 » 2020-03-30 13:48:26

感谢分享,因为同步的原因要晚几分钟才能下载。

#152 Re: 全志 SOC » v3s buildroot QT5 不生成libqjpeg.so » 2020-03-30 10:41:56

参考这个: https://whycan.cn/t_3781.html#p36600

试一试,第三步,只删除Qt的那个配置文件

#158 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » AIR724模块, 合宙拼团: 一个4G模块+一个4G开发板 = 19.9元 » 2020-03-29 12:37:36

illusion 说:

找了一顿,没发现有可以关闭的地方呀

点左下角 首页,再点右下角 我的,然后进入 团购 菜单关闭。

#159 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » AIR724模块, 合宙拼团: 一个4G模块+一个4G开发板 = 19.9元 » 2020-03-29 12:10:21

晕哥小弟 说:

在一个QQ群里面,发了下拼团的分享链接,结果:
https://whycan.cn/files/members/1569/TIM截图20200329120132.png

清库存基本不可能,谁会贴本清库存嘛,明显是为了推广新产品。

#160 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » AIR724模块, 合宙拼团: 一个4G模块+一个4G开发板 = 19.9元 » 2020-03-29 12:09:19

illusion 说:

我原本是参加了你的团,可是付款了发现,自己开了个团,我真醉了,好气……

可以关闭,然后参与五缺一,五缺二的团。

#162 站务公告/网站建设 » 本站最近迁入国内阿里云服务器, 根据北案要求, whycan.cn 可能随时停止解析, 如果访问不了请使用 whycan.io 域名 » 2020-03-29 09:51:52

晕哥
回复: 16

本站最近迁入国内阿里云服务器, 根据北案要求, whycan.cn 可能随时停止解析, 如果访问不了请使用 whycan.io 域名,

cn ===> io

感谢各位老友厚爱与支持!

#164 Re: 全志 SOC » 荔枝派nano使用 gcc-linaro-7.2.1-2017.11编译u-boot出错 » 2020-03-29 09:48:14

这个问题我遇到过, 删掉重新克隆再编译才解决问题.

#165 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » LittleVGL VS2019 仿真安装教程 » 2020-03-28 22:15:22

创建SDL窗口(模拟器)那个函数里面的长宽, 与你上面那个窗口的长宽一致, 就没有黑窗口了.

#169 Re: 全志 SOC » 试一试 S3 Linux 4.13 读取 USB 条码枪 » 2020-03-27 17:30:08

checkout 说:

这个代码有限制,貌似读不了小写字母

看了一下, 只是 cvt_ev_char 这个函数没有处理 小写字母和特殊字符而且,代码添加一下就好了。

shaoxi2010 说:

这种扫描枪不就是一个键盘设备嘛,直接输出就行

Windows 下确实是这样, Linux下你觉得用什么编程接口读呢?

#172 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » AIR724模块, 合宙拼团: 一个4G模块+一个4G开发板 = 19.9元 » 2020-03-27 15:55:54

看五缺一的,点进去, 不要自己单独下单了 ^_^
看五缺一的,点进去, 不要自己单独下单了 ^_^
看五缺一的,点进去, 不要自己单独下单了 ^_^
看五缺一的,点进去, 不要自己单独下单了 ^_^
看五缺一的,点进去, 不要自己单独下单了 ^_^
看五缺一的,点进去, 不要自己单独下单了 ^_^


而且用微信打开链接才能付款

#173 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » AIR724模块, 合宙拼团: 一个4G模块+一个4G开发板 = 19.9元 » 2020-03-27 15:54:56

这是我见过很糟糕的一次用户体验了,

登录手机号少一位, 告诉我密码错误。
电脑好不容易拼团成功, 居然没有支付方式可以选择
然后换手机 firefox, 仍然没有支付方式,
经过朋友提醒, 改用微信打开,
支付又显示各种超时。

最后进入上面的链接, 看五缺一的,点进去,一顿猛如虎的操作之后才搞定。

#174 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2020-03-27 10:24:39

jambogo 说:

按着楼主的步骤一步一步走,发现编译出来的buildroot 达到98MB,不知道有没有类似问题。

root@eedccd40ec5a:~/buildroot/buildroot-2017.08/output/images# ll

-rw-r--r-- 1 root root 98119680 Mar 26 19:13 rootfs.tar

a) 打开 ~/buildroot/buildroot-2017.08/.config 文件, 把里面的 QT/MPLAYER 等相关行删掉,

b) make menuconfig 里面把 Qt/mplayer 相关软件包删除

上面两步操作等效。


然后按这个操作重新做一次即可: https://whycan.cn/t_3781.html#p36600

#175 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2020-03-26 19:22:26

@willX 是不是你的板子flash离cpu比较远, 或者有干扰造成的,
把spi的频率降下来试一试.

因为 brom 能读出spi flash 数据, 但是 u-boot 却不能初始化 spi flash.

#176 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » NUC970_Buildroot无法生成yaffs2根文件系统 » 2020-03-26 16:31:57

1. 如果有更改重新 make menuconfig

2. 删除目录: rm output/target -rf

3. 删除所有.stamp_staging_installed文件:
find output/build/ |grep .stamp_staging_installed

4. 重新 make

#177 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2020-03-26 16:12:33

aozima 说:

给楼主点个赞!

楼上的同步是用什么方案? 有自动监控文件变动吗? 还是定期自动刷新?

手动模式,自动递归,自动忽略已有文件。目前还没有监控。

#178 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2020-03-26 16:07:16

不好意思,给大家添麻烦了,因为大家都反应附件下载速度慢,我把附件都迁移到国内了,但是同步一次要半小时左右,再过五分钟应该没问题了。

#180 Re: 全志 SOC » licheepi nano usb网卡 » 2020-03-26 14:22:40

感觉这个问题和 f1c100s 端点个数有关系,搜一下以前的帖子,我记讨论过。

#181 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 委托朋友画的 40PIN(AT043TN25) ==> 50PIN (AT070TN92) 转接板 (已嘉立创JLC SMT贴片) » 2020-03-26 08:45:18

v_8787 说:

请教一下晕哥,如果板上的IC,1541改为5V供电,是不是元件参数会需要调整?

感觉应该没影响,不过最好查一下手册。

#182 Re: 全志 SOC » DKTool windows下F1C200S图形化烧写工具(文件都已过期,请不要下载) » 2020-03-25 22:07:30

hjw_1314 说:

坑网是不是限速了,下载好慢

没有限速,服务器不在国内 忽快忽慢,或者你试一试切换到手机热点,可能会快一点。

#183 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 请教怎么下怎么解决qt.qpa.plugin: Could not find the Qt platform plugin "eglfs" » 2020-03-25 08:45:03

gdb调试肯定可以加参数的,包括  -platform linuxfb

你的调试步骤是什么呢?

#185 Re: ESP32/ESP8266 » esp32 录音失败 » 2020-03-24 21:23:47

用 cooledit或者 audacity 软件打开录音软件,调整 单声道/双声道,不同的采样频率, 8/16bit都试一下。

#186 Re: ESP32/ESP8266 » esp32 录音失败 » 2020-03-24 18:07:54

你用的是哪个demo呢?把录音的文件写到tf卡,用电脑播放试一试

#187 Re: 全志 SOC » v3s实现流水灯显示 » 2020-03-24 11:13:20

qiushan 说:

主线linux电亮绿色led使用的什么方式呀,配置文件在哪里?

开启驱动,在荔枝派那个设备树里面实现的。

#188 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 用stm8做的自行车闪光警示尾灯 » 2020-03-24 11:03:33

kekemuyu 说:

切换灯效以及进入低功耗

原来如此,好评,应该可以用有年不用充电了。

#191 Re: 全志 SOC » 求一份nano用的ns2009触摸芯片的驱动 » 2020-03-23 16:43:47

wupaul2001 说:

@晕哥, I2C地址不一样

那设备树改一下就行。

#192 Re: 全志 SOC » 求一份nano用的ns2009触摸芯片的驱动 » 2020-03-23 10:01:11

androidno 说:

晕哥,如果芯片是ns2009得话~ 你的意思是可以直接用tsc2007吗?

可以,寄存器级别兼容。记得要接中断才行,驱动不支持轮询。

#197 Re: 全志 SOC » V3s buildroot 一键生成打包生成32M spi flash 镜像, jffs2 文件系统, 默认启动 Qt 模拟时钟demo, » 2020-03-21 12:16:49

grantho 说:

晕哥,你好。请问固件支持spi nand吗?还有个问题,v3s只有64M,运行qt5稳定吗?之前在qt官方,看到建议256M运行内存。谢谢

主线linux支持spi nand很麻烦,但是仍然是可以的: https://whycan.cn/t_3123.html

全志官方sdk也支持 spi nand

#199 Re: 全志 SOC » V3s 使用NFS无法启动rootfs,从TF卡中可以 » 2020-03-21 09:23:18

只要你的 u-boot 能正常加载并运行flash/tf卡的kernel即可:

所以还是先确认以下问题:

1. 网卡驱动是否正常.
2. 是否能ping通nfs服务器ip
3. nfs 驱动是否配置进系统
4. 是否能手动挂载 nfs 的共享目录到 V3s

#200 Re: 全志 SOC » V3s 使用NFS无法启动rootfs,从TF卡中可以 » 2020-03-21 09:08:41

qiushan 说:

kernel是不是也需要做好以太网的驱动。。。我没改kernel,只把nfs client支持给打开了

如果你只是加载nfs rootfs, 那么u-boot不需要驱动ethernet,也不需要支持nfs.

反而kernel 你就必须开启nfs文件系统和ethernet支持。

页脚

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

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