您尚未登录。

#4 Re: 全志 SOC » 荔枝派zero 开发板V3s芯片, 从USB摄像头采集JPEG数据,界面显示到framebuffer » 2021-01-26 13:56:25

试了一下,罗技的 C270 / C270i 直接可以用,不过要多加一条5V供电线,画面很流畅。

#5 Re: 全志 SOC » F1C100s涨价又缺货,有什么推荐的替代? » 2021-01-25 16:43:00

wupaul2001 说:

还有200多上过机的,没通电的

是连板子一起卖么?

#6 Re: 8051/STC8/AT89C51/N76E003 » 请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达? » 2021-01-25 15:58:12

Blueskull 说:
smartcar 说:

感谢,可是我要的是code, 就是说编译生成的bin文件0x10000 位置就是A,这个上面的代码好像不行吧?

Keil我没用过,我用SDCC。SDCC里面可以用如下代码解决问题。

__code __at (0x10000) uint8_t var_name = 0xff;

嗯,刚刚前面搜到很多代码确实大部分是SDCC的。

#7 Re: 8051/STC8/AT89C51/N76E003 » 请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达? » 2021-01-25 15:53:56

2021-01-25_155021.png

感谢楼上几位大侠, 终于搞定:

添加一个fixcode.asm到工程, 内容是:

CSEG AT 03780h

CFG_BYTE_0:  DB  'A'
CFG_BYTE_1:  DB  'B'

END

重新编译生成bin即可。


参考: https://www.keil.com/support/docs/1623.htm

#8 Re: 8051/STC8/AT89C51/N76E003 » 请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达? » 2021-01-25 15:31:57

Blueskull 说:

*(uint8_t*)(0x10000)=0xff;

或者

uint8_t *ptr=(uint8_t*)(0x10000);
*ptr=0xff;

感谢,可是我要的是code, 就是说编译生成的bin文件0x10000 位置就是A,这个上面的代码好像不行吧?

#11 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请问这新出的树莓派单片机版本usb线怎么那么粗? » 2021-01-22 12:52:16

双层板控制阻抗,加粗线增大阻抗,或者缩小线间距控制阻抗,树莓派选择了加粗线。

#13 Re: 全志 SOC » F1C100S usb hub问题 » 2021-01-10 07:34:10

我也是用r8152网卡,也是hub转的,一切正常。
你是不是有多个网卡?

#15 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 我是来砸店的,用 curl 模拟登录哇酷网 (whycan.com) » 2021-01-04 12:16:19

whyabc666 说:

网站通过cookie能获取什么有用的?我发现关掉cookie不能登录!

http是无状态协议,把cookie关了服务区根本不知道你是谁谁谁了

#16 Re: 全志 SOC » v3s 有几个 spi cs口,用 spi flash 启动后,spi 能在用户层使用吗 » 2021-01-04 08:20:52

feng888 说:
微凉VeiLiang 说:

可以用多个设备,外设好像支持4个片选

官方手册上只看到一个cs,没有介绍其他3个cs 是哪个引脚!

就是用gpio作片选操作。

那个cs估计是作为从机的时候用的?

#17 Re: 全志 SOC » V3S 如何用 pack 打包RAM fs 到 spi slash 3. 14内核 » 2021-01-04 08:15:31

全志的打包格式不会搞,主线那个就是用cpio文件系统就可以了。

#18 Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 请教用QML登录http服务器,并保存cookie到本地,通过json交换数据,应该如何操作呢? » 2020-12-30 08:17:31

smartcar
回复: 2

请教用QML登录http服务器,并保存cookie到本地,通过json交换数据,应该如何操作呢?

#19 Re: 全志 SOC » v3s 驱动usb以太网,cpu占用过高 » 2020-12-17 10:27:41

muzhi 说:
smartcar 说:
muzhi 说:

最近正遇到这样的问题,不过我的是四核处理器挂UVC摄像头中断全部压给cpu0导致系统卡顿,目前修改kernel中irq-gic.c实现四核均衡分担,话说v3s也是四核?为何看你截图只有一列cpu0?

irq-gic.c 请教这个怎么修改呢?

我这里测试有效,供参考https://whycan.com/files/members/2656/Screenshot_20201217-101312_JuiceSSH.jpg

感谢(❁´ω`❁)分享,我对照手册再研究一下,对V3s是单核A7

#20 Re: 全志 SOC » v3s 驱动usb以太网,cpu占用过高 » 2020-12-17 09:18:43

muzhi 说:

最近正遇到这样的问题,不过我的是四核处理器挂UVC摄像头中断全部压给cpu0导致系统卡顿,目前修改kernel中irq-gic.c实现四核均衡分担,话说v3s也是四核?为何看你截图只有一列cpu0?

irq-gic.c 请教这个怎么修改呢?

#22 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 请问为什么Qt5.15不提供 qt-opensource-windows-x86-5.15.2.exe 这种 windows 开发工具安装包 » 2020-12-13 16:23:57

https://blog.csdn.net/zxjohnson/article/details/106621457

从Qt5.15.0起,对于开源用户,Qt官方不再提供独立安装文件,且不再有bug修复版本(比如Qt5.15.1)

如果想体验Qt5.15及之后的版本,就要培养一个新技能——编译Qt源码

从编译到发布大概需要这么几个步骤:

1. 从Qt官网下载源码;

2. 编译源码;

3. 将编译后的qmake.exe导入QtCreator或者Visual Studio;

4. 使用QtCreator或者Visual Studio编译Qt项目;

5. 项目发布可仍然使用windeployqt.exe。

#26 Re: Cortex M0/M3/M4/M7 » imx6u板子,编译视频库,用gstremer和ffmpeg,总是编译不成功 » 2020-12-03 15:15:22

raspberryman 说:

建议搜索学习一下提问的艺术

同意,提问不要像海绵挤水一样,要一次性描述清楚前因后果和现象。

#28 Re: 全志 SOC » 自制全志H3核心板 » 2020-12-01 15:21:45

wu150 说:

大佬不会觉得累吗,为什么我坐凳子上一会就觉得累,想躺床上

我一躺下,耳边就想起苍老师振聋发聩的名言,如果你不能躺赚,就不要赖床。

吓得我赶紧起床赚钱

#29 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 自己动手把车钥匙的2032电池换了 » 2020-11-30 15:49:28

为什么我的摩拜单车没有钥匙,也没有电池,难道我开了个假车?

#31 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 发几个关于树莓派raspberrypi的buildroot修改 » 2020-11-30 11:23:05

raspberryman 说:
拉轰的脚踏车 说:

请问下我编写了一个Qt应用程序, 如何添加到buildroot的package里面去,如果自动拷贝到根文件系统?

https://bootlin.com/blog/building-a-linux-system-for-the-stm32mp1-setting-up-a-qt5-application-development-environment/

Building a Linux system for the STM32MP1: setting up a Qt5 application development environment


https://github.com/tpetazzoni/buildroot/commit/a0bdf09634961a84f2d801da08e906eae8d7ebf3

https://github.com/tpetazzoni/buildroot/commits/2019.02/stm32mp157-dk-blog-4

学到了! 简直完美解答我心中的疑虑,这个老外耐心足够好。

#32 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 感觉这个网站是统治的工具,什么我和某某差一个晕伢子的距离! » 2020-11-30 10:27:18

哇酷小二 说:
Blueskull 说:

666是你吗?滚。

等楼主大胸弟酒醒后看到帖子再删吧 ; (

嗯,没有看到自己胡言乱语真可惜

#35 Re: 全志 SOC » 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux) » 2020-11-28 08:34:18

奇怪,我也编译运行成功,但是无论用哪个脚本,电脑按键事件都不能触发屏幕的点击和手势动作呢?

#36 Re: 全志 SOC » 荔枝派zero V3s用主线u-boot和主线Linux,为什么只需要在u-boot里面设置LCD参数,而不需要在Linux里面设置? » 2020-11-26 09:32:21

hanzixi_angel 说:
smartcar 说:
hanzixi_angel 说:


晕哥  如何使用de功能 在Linux设备树中更改lcd屏幕的参数   现在都是更改linux/drivers/gpu/drm/panel/panel-simple.c源码  然后编译镜像之后烧写    以后会有多种屏幕   这样不太方便  最好只修改设备树  在设备树配置参数  只更换设备树即可  这样最好

你的de功能正常了吗?



de功能正常啊  修改了linux/drivers/gpu/drm/panel/panel-simple.c源码  适配了屏幕   但是这样修改不太好  想只修改设备树  在设备树增加屏幕参数

drm的话如果找不到现成的LCD配置估计就一定要修改那部分的代码吧,

#37 Re: 全志 SOC » 请问嵌入式linux下有没有这样的软件,可以根据/etc下面某文件配置,自动检测网线是否插入,是否使用静态ip/动态获取ip » 2020-11-26 08:38:27

https://github.com/ccrisan/motionpie/blob/master/board/common/overlay/etc/init.d/S40network

#!/bin/sh

mkdir -p /var/lib/dhcp
dh_conf="/var/cache/dhclient.conf"
sys_static_conf="/etc/static_ip.conf"
static_conf="/data/etc/static_ip.conf"
watch_conf="/data/etc/watch.conf"

link_watch=yes
link_watch_timeout=20
ip_watch=yes
ip_watch_timeout=40

link_nego_timeout=10
eth=eth0
wlan=wlan0

if [ -f $watch_conf ]; then
    source $watch_conf
fi

if [ -f $sys_static_conf ] && ! [ -f $static_conf ]; then
    mkdir -p $(dirname $static_conf)
    cp $sys_static_conf $static_conf
fi

test -r $static_conf && source $static_conf

watch_eth() {
    count=0
    while true; do
        sleep 5
        if mii-tool $eth 2>&1 | grep "link ok" > /dev/null; then
            count=0
        else
            if [ $count -lt $link_watch_timeout ]; then
                count=$(($count + 5))
                logger -t ethernet -s "disconnected"
            else
                logger -t ethernet -s "disconnected for $link_watch_timeout seconds, rebooting"
                reboot
            fi
        fi
    done
}

watch_ip() {
    iface=$1
    count=0
    while true; do
        sleep 5
        if ip addr show dev $iface | grep inet &>/dev/null; then
            count=0
        else
            if [ $count -lt $ip_watch_timeout ]; then
                count=$(($count + 5))
                logger -t network -s "$iface has no IP address"
            else
                logger -t network -s "$iface had no IP address for $ip_watch_timeout seconds, rebooting"
                reboot
            fi
        fi
    done
}

start_lo() {
    ifconfig lo up
}

start_wlan() {
    if ! ifconfig $wlan >/dev/null 2>&1; then
        echo "$wlan: no device"
        return
    fi

    if [ "$(cat /sys/class/net/$wlan/carrier 2>/dev/null)" != "1" ]; then
        echo "$wlan: no link"
        return
    fi

    if [ -n "$static_ip" ]; then
        echo "$wlan: setting static IP to $static_ip"
        ifconfig $wlan $static_ip up
        static_ip="" # won't be used again
    else
        echo "$wlan: starting dhclient"
        dhclient -cf "$dh_conf" $wlan
    fi

    if [ "$ip_watch" == "yes" ]; then
        watch_ip $wlan &
    fi
}

start_eth() {
    # wait up to 3 seconds for driver
    count=0
    while ! ifconfig $eth >/dev/null 2>&1; do
        sleep 1
        count=$(($count + 1))
        if [ $count -ge 3 ]; then
            echo "$eth: no device"
            return
        fi
    done

    # bring it up
    ifconfig $eth up

    # wait up to 3 seconds for operstate
    count=0
    while [ "$(cat /sys/class/net/$eth/operstate 2>&1)" == "unknown" ]; do
        sleep 1
        count=$(($count + 1))
        if [ $count -ge    3 ]; then
            echo "$eth: no link"
            return
        fi
    done

    # wait up to link_nego_timeout seconds for link
    count=0
    while [ "$(cat /sys/class/net/$eth/carrier 2>&1)" != "1" ]; do
        sleep 1
        count=$(($count + 1))
        if [ $count -ge $link_nego_timeout ]; then
            echo "$eth: no link"
            return
        fi
    done

    if [ -n "$static_ip" ]; then
        echo "$eth: setting static IP to $static_ip"
        ifconfig $eth $static_ip up
        static_ip="" # won't be used again
    else
        echo "$eth: starting dhclient"
        dhclient -cf "$dh_conf" $eth
    fi

    if [ "$link_watch" == "yes" ]; then
        watch_eth &
    fi

    if [ "$ip_watch" == "yes" ]; then
        watch_ip $eth &
    fi
}

start() {
    hostname=$(hostname)
    echo "send host-name = \"$hostname\";" > /var/cache/dhclient.conf

    start_lo
    start_wlan
    
    # if wifi or ppp connection configured, start eth in background
    ssid=$(cat /data/etc/wpa_supplicant.conf 2>&1 | grep ssid | grep -v scan_ssid | cut -d '"' -f 2)
    if [ -n "$ssid" ] || [ -r /data/etc/ppp/modem ]; then
        start_eth &>/dev/null &
    else
        start_eth
    fi

    if [ -n "$static_gw" ]; then
        echo "setting static gateway to $static_gw"
        ip route add default via $static_gw
    fi

    if [ -n "$static_dns" ]; then
        echo "setting static DNS server to $static_dns"
        echo "nameserver $static_dns" > /etc/resolv.conf
    fi

    # print the current network configuration
    ifconfig -a
}

case "$1" in
    start)
        echo -n "Starting network: "
        start
        echo "done"
        ;;

    stop)
        echo -n "Stopping network: "
        killall dhclient
        ps | grep S40network | grep -v $$ | grep -v grep | tr -s ' ' | sed -e 's/^\s//' | cut -d ' ' -f 1 | xargs -r kill
        echo "done"
        ;;

    restart|reload)
        "$0" stop
        "$0" start
        ;;

    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?

这个脚本不错,可以试一试

#38 Re: 全志 SOC » 荔枝派zero V3s用主线u-boot和主线Linux,为什么只需要在u-boot里面设置LCD参数,而不需要在Linux里面设置? » 2020-11-25 17:09:12

hanzixi_angel 说:
晕哥 说:

这个问题我以前也纳闷过,
后来发现 u-boot的 common/fdt_support.c 里面有 fdt_setup_simplefb_node()这个函数,
他居然会自己创建设备树, 然后传递给Linux用,赶脚好神奇!



晕哥  如何使用de功能 在Linux设备树中更改lcd屏幕的参数   现在都是更改linux/drivers/gpu/drm/panel/panel-simple.c源码  然后编译镜像之后烧写    以后会有多种屏幕   这样不太方便  最好只修改设备树  在设备树配置参数  只更换设备树即可  这样最好

你的de功能正常了吗?

#39 Re: 全志 SOC » 使用[Aodzip]的buildroot资源为tiny-200s-r3构建linux运行环境 » 2020-11-19 15:51:02

darthmike 说:

想请问下,这一步
make widora_mangopi_r3_defconfig
的时候,说No make rules是啥情况,555

没遇到,一次编译成功了。

#41 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » Modbus TCP通信问题! » 2020-11-19 13:47:32

有没有试过抓包,看用你的client和plc client,数据包的收发有没有区别?

#42 Re: 8051/STC8/AT89C51/N76E003 » 请问用N76E003作为i2c从机,能占多个i2c地址吗?比如一个i2c地址做键盘, 另外一个i2c做加密通讯 » 2020-11-19 11:52:19

raspberryman 说:

找到了, I2ADDR寄存器的最低位GC设置为1就是接受I2C广播,自己判断关心的地址数据。

那收到的第一个字节就是地址了对吧?

#44 Re: 全志 SOC » 请问大家USB A口 4PIN 封装怎么检测插入的是u盘,或者usb线(连电脑)呢?传给OTG脚处理 » 2020-11-10 16:16:46

zwanh 说:

如果是A口的母座,一般都是主设备。OTG的,接口一般都是micro USB口,如果你接了micro转A公口的线,则为从机,如果接了micro转母口的线,则为主机,所以所以的识别必须有ID线,具体是什么设备应该是由线决定的

感谢回复,现在结构上面只有一个口,老板叫我能同时识别,通过检测vbus电压理论上可以做到,但是目前我没有想到好办法

#45 全志 SOC » 请问大家USB A口 4PIN 封装怎么检测插入的是u盘,或者usb线(连电脑)呢?传给OTG脚处理 » 2020-11-10 15:45:17

smartcar
回复: 2

请问大家USB A口 4PIN 封装怎么检测插入的是u盘,或者usb线(连电脑)呢?传给OTG脚处理

#46 Re: 全志 SOC » 全志f1c200s通过spi使用st7789 1.54寸,240*240像素LCD,初始化完成后只是白屏无法显示串口信息,求助! » 2020-09-24 16:38:31

shuiyihang 说:

刚才测试了,使用gpio模拟驱动,可以正常显示要求的内容,也就是硬件啥的没问题,
那就尴尬了,不知道咋办啊 啊啊啊啊

是f1c100s的gpio吗?

#48 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 在线实时修改 LittleVGL7 / LVGL7 界面主题 » 2020-09-24 15:20:28

无情一刀 说:
smartcar 说:

这个貌似就是C99支持不全,官方都用VS2017了,你何必折腾自己?


好吧  看来要装个装2017 还是2019   可以兼容波 和2013

兼容

#49 Re: 全志 SOC » 全志f1c200s通过spi使用st7789 1.54寸,240*240像素LCD,初始化完成后只是白屏无法显示串口信息,求助! » 2020-09-24 15:18:25

shuiyihang 说:

除了显示 cat: write error: No space left on device
屏幕也变黑了

一点显示都没有?那不对啊,驱动还有问题?

#50 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 在线实时修改 LittleVGL7 / LVGL7 界面主题 » 2020-09-24 15:15:06

无情一刀 说:

https://whycan.com/files/members/1116/_20200924151151.png

就这样的  不知道在那里修改那个编译的版本

这个貌似就是C99支持不全,官方都用VS2017了,你何必折腾自己?

#51 Re: 全志 SOC » 全志f1c200s通过spi使用st7789 1.54寸,240*240像素LCD,初始化完成后只是白屏无法显示串口信息,求助! » 2020-09-24 15:14:19

shuiyihang 说:
smartcar 说:

试一试这个命令:

cat /dev/urandom > /dev/fb0

注意看你的设备是fb0,还是fb1 ...

然后看屏幕有没有反应

提示:cat: write error: No space left on device
什么情况呢?

屏幕有反应吗?有没有雪花飘飘

#52 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 在线实时修改 LittleVGL7 / LVGL7 界面主题 » 2020-09-24 15:11:37

无情一刀 说:
redstar 说:

具体是什么错误?


因为我用的是2013的VS的 编译的时候导致一些变量都要定义在函数的开始的地方 ,4千多个错误 ,你那边有简单的littleVGL的工程吗 可以发给我一个吗来看看

VC的C99一直支持不太好,可能是这个原因,换最新的VS2019吧。

#53 Re: 全志 SOC » 全志f1c200s通过spi使用st7789 1.54寸,240*240像素LCD,初始化完成后只是白屏无法显示串口信息,求助! » 2020-09-24 15:10:33

shuiyihang 说:
smartcar 说:

白屏只能说明背光正常,时序可能有问题。

确认屏是不是好的,再次检查硬件联线。

是这样的大佬,屏幕初始化需要spi的一系列操作,最后才能白屏,这不是说明屏幕和时序是正常的,不然连白屏也做不到

试一试这个命令:

cat /dev/urandom > /dev/fb0

注意看你的设备是fb0,还是fb1 ...

然后看屏幕有没有反应

#54 Re: 全志 SOC » 全志f1c200s通过spi使用st7789 1.54寸,240*240像素LCD,初始化完成后只是白屏无法显示串口信息,求助! » 2020-09-24 15:04:08

白屏只能说明背光正常,时序可能有问题。

确认屏是不是好的,再次检查硬件联线。

#57 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理 » 2020-09-19 16:47:44

armstrong 说:

楼主理解错误吧。
两个http请求之间是没有记忆的;但是同一个http请求和应答是成对的。也就是http总是一个request对应一个response,而且是在同一个TCP连接里。

赞成,就是同一个TCP连接(该连接并没有断开),所以服务器知道订单号。

#59 Re: 全志 SOC » v3s 接SPI 1602点阵液晶,有做过的朋友吗? » 2020-09-08 08:58:18

SPI的简单,先看下linux源码里面有没有对应的驱动,没有就按fbtft依葫芦画瓢弄一个。

#60 Re: 全志 SOC » 求助,v3s-zero有人调试过1024x768分辨率的屏幕没有? » 2020-09-03 08:10:25

cjqdot 说:

https://whycan.cn/files/members/2006/tu1_20191121-1739.jpg
c9这个100n的电容脱了,这个滤波没有不影响吧。
R1,R2没有焊接,RFC脚是悬空的,看手册这个脚是设置上或下降沿读数据的。
https://whycan.cn/files/members/2006/tu2.jpg
https://whycan.cn/files/members/2006/tu0.jpg
https://whycan.cn/files/members/2006/tu3.jpg
https://whycan.cn/files/members/2006/tu4.jpg

怎么感觉显示有点不正常呢,最后解决了吗?

#62 Re: 君正Ingenic/X1000/X2000/T10/T20/T30 » 分享一个 君正 X1000 自动挂载 TF卡/U盘 分区 » 2020-08-31 08:34:26

我用的也是这个脚本,不是很完善,只能自动挂载一个分区,只能显示最后一个u盘

#66 Re: 8051/STC8/AT89C51/N76E003 » 刚刚踩的新唐N76E003新鲜坑 » 2020-08-29 11:29:19

这几行代码可以用C嵌入汇编,这样不会被优化掉。

#74 Re: 全志 SOC » F1C100 使用GPIO模拟SPI 驱动 st7789手表屏 » 2020-08-03 12:32:39

lignin 说:

然后在fbtft的源码里发现可以用8位的spi去模拟,这才明白,下一版就会接到硬件spi上

按上面这个配置,驱动9bit st7789成功了吗?

#76 Re: 全志 SOC » 如何在SD卡上更新uboot on F1c100s? » 2020-07-31 22:25:07

uboot没有在文件系统上,所以你看不到。他在8KiB偏移位置。

#78 Re: 全志 SOC » F1C200S 移植完Linux后怎么做应用开发 » 2020-07-31 13:44:07

小果果 说:

主要驱动不会改,不熟悉

Qt不涉及驱动。

#80 Re: 全志 SOC » 主线 EMMC写入uboot启动问题 » 2020-07-29 11:18:56

dts 里面有没有把 emmc2的引脚都使能?

#82 Re: 全志 SOC » 编译nes出错没有c++编译器 » 2020-07-26 17:57:38

重新编译没问题的。你的应该是工具链没有重新编译。

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

淡定 说:

新人刚入坑,要等明天才能下载

多发几个有用的帖子。

#88 Re: 全志 SOC » 求:V3s kernel-4.13.0RC7,alsa,eth0,waln0,udisk内核 如何启动wifi » 2020-07-23 10:00:43

kingreid 说:

我想跑 debian

驱动一样的,只是文件系统不一样,替换第二分区里面的驱动就可以了

#90 Re: 全志 SOC » DIY一块全志V3S的学习板,尽量引出所有功能(感谢晕哥支持) » 2020-07-22 17:37:51

mysteryli 说:

https://whycan.cn/files/members/3311/QQ图片20200722172134.jpg
第二版已经下单,很快就要与大家见面了,修复了不少第一版的问题

干得漂亮

#94 Re: 全志 SOC » 分享一个 5寸的 800x480 的 f1c100s 固件, 感谢 @xm1994, 调试串口UART0 (PB8/PB9) » 2020-07-13 16:52:17

coolby9458 说:

方案不错,如果移植F1C200S会不会更好点效果?

如果本身内存够用的话,用f1c200s没有改善。

#99 Re: ESP32/ESP8266 » ESP8089就是ESP8266 ? » 2020-07-07 15:52:52

Gentlepig 说:

我从网上搜到的esp8266或es8089都是方方正正的芯片,48脚的。
这个图看上去是个长方形啊。

这个是里面的die,不是外面的塑封

#100 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 学习的意义??? » 2020-07-06 16:15:36

whyabc666 说:

大学干嘛去了?投资个大学确实比自己自学有价值!虽然大学未必能够学到什么真本事,我自己陆陆续续学了有5-6年,结果有能力也没什么用……

大学里面真未必能学到啥

#101 Re: 全志 SOC » [求助]无法识别lichee nano 板子 » 2020-07-06 10:14:15

怀疑吹的时候把隔壁电阻电容或其他元件吹出问题了。

#102 Re: 全志 SOC » f1c100s spi cs gpios无效,如何设置具有多个cs的多个spi设备。 » 2020-07-05 10:46:12

piyush 说:

非常感谢,它对我有用

主要更改是cs_gpios更改为cs-gpios

现在可以了吗?

#103 Re: 全志 SOC » f1c100s 要接以太网咋整? » 2020-07-04 21:46:24

didi 说:

这个有驱动吗?

DM9051不便宜,还不如用V3s了。

#106 Re: 全志 SOC » 小白请问大佬们荔枝派nano怎么开发应用啊,例如摄像头LCD什么的,官方只有搭环境的教程0.0 » 2020-06-22 10:28:31

这个芯片资料就别想了,在这个网站还能找到零零碎碎的资料。

想资料多玩 imx,原子野火大把教程。

#109 Re: 8051/STC8/AT89C51/N76E003 » 问下大家新塘N76E003的IIC从机模式进不了中断是什么问题 » 2020-06-18 14:40:03

有梦的地方 说:

检查i2c控制器的时钟,初始化后的寄存器,中断控制寄存器

再接个逻辑分析仪看看主机确实发出信息了?地址对不对。

#110 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 有在全志工作的铁汁吗?全志的工作氛围、待遇啥的怎么样 » 2020-06-17 10:25:54

中国有句话好事不出门坏事传千里,你细品,要是在某公司一年可以拿几百万年终奖会来网上吹嘘吗,只有觉得公司不好的才会上来吐槽。

#112 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 看看电子厂打工仔得过敏性鼻炎的多不多! » 2020-05-27 11:43:21

还好,注意饮食,蔬菜水果粗粮蛋白质,合理作息,钱是老板的,命是自己的。

#114 Re: NB-IoT/2G模块/4G模块/GPRS模块/GPS/北斗 » 刚刚收到USB电流表,测试一下合宙官方的AIR724功耗, 刷新网页 50mA@5V, 不知道准不准呢. » 2020-05-23 09:43:02

弱弱问下大神们,那个休眠模式是说拉低开机键三秒吗?如何从休眠模式进入工作模式呢?

#116 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » 新唐 N9H30 emwin@linux 库/头文件/源码/文档 下载 » 2020-05-19 16:57:05

gmyu 说:

请问N9Hxx不是在github都有官方的源码么?他们已经得到授权了啊,只是N329xx系列没有demo。我现在编译成功却无显示。

难说一定可以,或许新唐只买了N9H授权。

#117 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » littlevgl 如何制作漂亮的指针? » 2020-05-19 16:00:49

楼上的朋友啊,真是爱死你们了,这个时钟的lvgl找了很久啊.

#118 Re: 全志 SOC » 分享一个tinalinux源码仓库 » 2020-05-11 13:57:13

omg 说:

看了一下好像有f1c200s的解码库

有链接吗?我找了一圈没找到哦。

#120 Re: 全志 SOC » 买了一块荔枝派,烧录好系统后反复重启,麻烦大神帮看看 » 2020-05-08 08:45:06

mysteryli 说:

有关于荔枝派制作文件系统的标准操作么,我就是解压到主分区,可能是我操作有问题

https://whycan.cn/t_561.html

#121 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 8款免费/开源的 CAD 软件 » 2020-05-08 08:43:45

基于Qt的CAD开源项目真挺多,但是开源版本的qcad功能太弱鸡了,收费版本功能比较全。

#122 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 16:12:10

这个速度还行, 反正这种黑白屏内部有GRAM, 不写也会维持显示。

#124 VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » Ubuntu测试can协议栈 » 2020-04-30 11:20:59

smartcar
回复: 2

1. 添加虚拟can网络, 参考can.html:

ip link add type vcan

指定名称的can网络:

ip link add dev vcan42 type vcan

2. 使能 can 网络:
https://www.technexion.com/support/knowledgebase/using-the-can-bus-from-linux-shell/

http://codingadventures.org/2018/10/01/setting-and-testing-a-can-bus-connection-in-linux/

ip link set vcan0 type can bitrate 125000
ifconfig vcan0 up

3. 测试
先抓包:

candump can0 &

再发送:

cansend can1 123#CAFEBABE

#126 Re: 全志 SOC » v3s 串口做485 » 2020-04-21 16:42:59

要实现驱动自动控制gpio收发吗?

#127 Re: 全志 SOC » v3s 串口2 不能收 » 2020-04-21 14:39:25

chendong 说:

正常了,在ARM9 上的串口配置是可以用,到这不行了,重新配置了一下。

怎么配置的?

#128 Re: 全志 SOC » v3s 串口2 不能收 » 2020-04-21 14:23:04

linux4.13 我三个串口都正常

#130 Re: ST/STM8/STM8S/STM8L » STM32H750VB系统板 » 2020-04-21 11:07:13

wujique 说:

官方肯定不会肯定。
平时玩可以用2M,产品就不要冒风险了。

估计制造成本几乎差不多,所以同样的东西,高价卖给凯子客户,低价卖给乞丐客户。

把凯子和乞丐的钱都赚到了,自己还节约了管理成本。

请叫我的全名 ---- 李永乐

#132 Re: 全志 SOC » 分享自制的使用USB网卡的F1C200S开发板 » 2020-04-20 14:03:53

binbin 说:

可以用全志自已的无线网卡  XR819

这个主线Linux有集成驱动了吗?或者说有第三方的吗?

#136 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-04-17 22:25:28

jiangming1399 说:

uboot设备树

有道理,默认是1Mbps那就尴尬了,怪不得那么慢。而且还是1bit的spi

#137 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 找到一篇关于Linux usb gadget 非常使用的说明和使用教程 » 2020-04-17 22:24:06

viken 说:

firstman, 感谢分享,请问可以板载摄像头转为USB gadget UVC 摄像头, 支持在 nano/zero平台移植吗?谢谢!

可以试一试,我记得貌似不行,估计是v3s端点不够

#138 Re: 全志 SOC » 荔枝派nano(f1c100s)的SPI-Flash系统编译创建全过程 » 2020-04-17 21:43:57

jambogo 说:

0.949797] SCSI Media Changer driver v0.25
[    0.957610] m25p80 spi0.0: w25q128 (16384 Kbytes)
[    0.962464] 5 ofpart partitions found on MTD device spi0.0
[    0.968096] Creating 5 MTD partitions on "spi0.0":
[    0.972946] 0x000000000000-0x000000070000 : "u-boot"
[    0.980506] rfd_ftl: no RFD magic found in 'u-boot'
[    0.986556] ftl_cs: FTL header not found.
[    0.992325] 0x000000070000-0x000000080000 : "dtb"
[    0.998475] ftl_cs: FTL header not found.
[    1.004100] 0x000000080000-0x000000480000 : "kernel"
[    1.019930] rfd_ftl: no RFD magic found in 'kernel'
[    1.027130] ftl_cs: FTL header not found.
[    1.032752] 0x000000480000-0x000000c00000 : "rootfs"
[    1.056702] rfd_ftl: no RFD magic found in 'rootfs'
[    1.063882] ftl_cs: FTL header not found.
[    1.069612] 0x000000c00000-0x000001000000 : "overlayfs"
[    1.085693] rfd_ftl: no RFD magic found in 'overlayfs'
[    1.093115] ftl_cs: FTL header not found.

分区信息多了一些 ftl 异常,大家有踩过坑吗?

从来没有遇到这种问题,得跟踪一下代码

#142 Re: 全志 SOC » 求大佬帮我看一下自制F1C200S小板子 » 2020-04-12 11:20:48

Blueskull 说:

顺便,考虑CP2102换CP2102N。现在CP2102已经NRND了,市场上很多都是国产假货。CP2102N目前还没见到过仿品。买到仿品不如直接买国产。CH340系列就不错。

没想到CP2104也被爆破了。

#144 Re: 全志 SOC » 关于 lichee-pi zero v3s 以太网硬件严重发热问题和解决办法 » 2020-04-12 09:53:15

原来如此,我说怎么那么烫手呢,而别家的v3s开发板确没有这种情况,当时没有深究。

#145 Re: 全志 SOC » v3s i2c 写地址 » 2020-04-08 17:25:40

地址的最高位应该是指示读/写吧

#146 Re: 全志 SOC » 试一试用MDK ARMCC 编译全志官方f1c100s sdk --- melis » 2020-04-08 17:24:07

mcu1234mcu 说:

我是meils小白,这个编译,打包,运行都成功后能在这个基础上做出自己个性的东西来吗?

当然可以,只是部分不开源而已,以lib形式提供。

#147 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 请大家推荐一款资料备份硬盘 » 2020-04-08 13:56:04

OggyJFX 说:

小文件,怎么都好说。
我的小文件,至少有三个硬盘中有备份。
顺便给FreeFileSync打个广告,备份,真的挺好用。

不过linux下面开发的东西,可真是难为我的。到现在我也不知道怎么备份比较好。
源码太大了。

Linux代码备份太容易了, 用git就好,天生的云备份,随便你推送到哪个git服务器,或者本地硬盘。

#149 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 总想搞个什么东西出来,靓绝五台山的那种,大伙有没有这种感觉? » 2020-04-06 15:15:54

所以要站在巨人的肩膀上,要多学习成熟的系统,基于成熟的平台。

如果有超人的能力另起炉灶当我没说,哈哈哈哈

#150 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 发个树莓派 ov5647 摄像头资料 » 2020-04-06 13:50:43

whyabc666 说:

V3S ZERO能用这个摄像头吗?直接焊接线相连可以吗?

不一定,zero的mipi多两组线 d2/d3

#154 Re: 全志 SOC » licheepi nano usb网卡 » 2020-03-26 13:58:28

随便拔掉一张也是这样吗?

#156 Re: 8051/STC8/AT89C51/N76E003 » 求助 CH563Q板子 不能启动 » 2020-03-25 20:47:21

没用过,帮顶一下。

这个片子支持 以太网?

#158 Re: 全志 SOC » 求助 !全志A64 LVDS配置 » 2020-03-25 09:22:33

建议先用红白机大佬的这种lvds转换方案,后面再costdown: https://whycan.cn/t_3472.html#p32696

#159 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » ubuntu下用minicom打不开ft3232的串口 » 2020-03-24 11:43:46

Gentlepig 说:

不知道...
网上搜minicom使用usb串口步骤,搜到的文章里有这个,就照着做了,结果可以了。

好神奇的骚操作。

#162 Re: 全志 SOC » Tina的SDK有没有新的? » 2020-03-24 11:42:02

这个得直接问全志那边,都是签了NDA的,即使别人有也不一定会放出来。

#165 Re: 全志 SOC » 荔枝派Zero V3s开发板入坑记录 (TF/SD卡启动)(主线Linux,主线u-boot) » 2020-03-21 14:31:15

你把rootfs文件系统写坏了吗?  或者再换一张卡试一试。

#166 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请问立创商城 LC凭什么卖这么贵? » 2020-03-21 14:30:02

Blueskull 说:

眼图和扛干扰/EFT肯定有区别。而且这种带有隔离性质的器件需要过安全认证,几个主流国家的安全+EMI+EFT认证全做下来最少得200w。器件级认证比成品级认证贵。

原来如此,我做的都是小众产品,没有这种经验,感谢大佬指教。

Quotation 说:

其实LC上要看批量价格8.58多含税,淘宝是仿品+不含税,差的就没那么大了。

如果按前面 @Blueskull 说法,需要那么多认证费用,正品这个价格就不贵了。

#167 Re: 全志 SOC » 全志F1C200S原理图+PCB(公版) » 2020-03-21 00:34:34

这个太棒了,楼主大佬方便转一份 dxp/ad 格式的吗?

#172 Re: 全志 SOC » 全志r333是什么芯片? » 2020-03-19 16:56:21

R331没有了解过,感觉是A33马甲?

#173 Re: 全志 SOC » 买个全志arm9 F1C100s 方案的唱戏机回来拆一拆 » 2020-03-19 16:24:54

molin2050 说:

脸红吗,脸痛吗?就像馋女人的身子一样,不过是性价比高而已

真香定律?

#174 Re: 全志 SOC » 全志r333是什么芯片? » 2020-03-19 16:24:12

R333 就是 S3L
R332 就是 S3

全志搞马甲可能是为了平衡代理商的利益。

#175 Re: 全志 SOC » Lichee Pi Zero 网口导致内存泄漏问题 » 2020-03-19 13:43:52

up 说:

直连也会出现,但是网卡接收数据和内存减少的速度要慢很多

有没有可能是这个问题: https://whycan.cn/t_3887.html

#176 Re: 华芯微特 » SWM320成功移植micropython » 2020-03-18 11:08:02

伍零壹 说:

硬件工一枚,我能问一下 micropython有什么优势么?我觉得C开发很不错啊

让小学生也能愉快的控制LED/继电器不觉得鸡冻么?直接用记事本写好脚本,然后下载进去.

#182 Re: 全志 SOC » 要做这样的一个东西,全志那个cpu比较合适?V3s? » 2020-03-13 22:11:46

camdroid那个基于Android的架构,大部分开发者没有Android经验,可能一脸懵x, 不需编解码的项目干脆用主线Linux了。

#185 Re: 全志 SOC » 要做这样的一个东西,全志那个cpu比较合适?V3s? » 2020-03-12 10:16:30

staunchheart 说:

Z11有以太网,就是V3S。
Z6S是F1C100S,Z6是F1c200S

楼上朋友推荐的R11才是没有以太网的。

大概知道全志为什么要搞这么多马甲了,
因为代理Z系列的,可能不能代理V系列的,但是又想出V系列货,

那怎么办呢,弄马甲啊,多简单。

#188 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请大家推荐优质杜邦线供应商, 淘宝买过的几家,有的线细如头发丝,有的根本不粘锡, 外面的橡胶也是回收那种,真是误事。 » 2020-03-11 11:57:16

Quotation 说:

去立创商城,买正规大厂家的试试。规格书明确说是什么规格的线应该好一些。

感谢推荐, 一直以为立创商城没有杜邦线卖, 刚刚搜了一下, 确实有。

#189 Re: ESP32/ESP8266 » 比ESP8266性价比更优的wifi芯片来了 ----- W600 » 2020-03-11 10:51:26

aozima 说:

不错哦,求插座链接和w600模块链接。

#190 Re: NXP i.MX6UL/6ULL » depmod 命令错误分析 » 2020-03-10 18:32:04

这样执行模块安装:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make modules_install INSTALL_MOD_PATH=/opt/buildroot-2018.08.2/output/target/

modprobe 就不会出错了

#192 Re: ESP32/ESP8266 » 我已经被8266折磨死了,实在不行就换模块了,老掉线~~ » 2020-03-10 15:45:44

zeesser 说:

个人网站还要ICP备案呢?~~~~?

境内任何网站都要备案

#193 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请大家推荐优质杜邦线供应商, 淘宝买过的几家,有的线细如头发丝,有的根本不粘锡, 外面的橡胶也是回收那种,真是误事。 » 2020-03-10 10:42:22

SmallJu 说:

杜邦线永远是不靠谱的  只能暂时用用  长期用最好焊死或者热熔胶伺候
如果一定要用的话建议买那种四个一体的或者八个一体的那种,稍微质量又靠谱一点

问题是暂时用用都不靠谱,多年以前在电子市场买的杜邦线,里面的铜丝都很粗,用料很足。

现在淘宝看不到实物,拿到手才知道垃圾。

#194 Re: ESP32/ESP8266 » 比ESP8266性价比更优的wifi芯片来了 ----- W600 » 2020-03-10 10:22:13

aozima 说:

在PDD买了几个裴讯的智能插座,然后用W600给替换了,现在天天用着。

裴讯,是认真的么?怎么替换,app自己写的么,替换后有什么新发现吗?

#195 Re: 全志 SOC » F1C100S做的串口屏硬件图纸分享,有需要的可以联系,坛友优惠价 » 2020-03-10 10:05:20

dycbaba 说:

没有以太网?

F1C 系列没有以太网, 需要 SPI 外扩, ENC28J60, ENC424J600, DM9051 等。

#198 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 各位从事嵌入式行业的都实现财务自由了吗? » 2020-03-08 21:20:29

对,老板和口罩都是稀缺资源,我朋友以前就是帮前东家送货的,后来公司倒闭,顺利"继承"了前东家的客户,委托前东家的供应商供货,几乎完美白手起家。

#199 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » PC上录音噪声大怎么降低 » 2020-03-07 16:27:04

dbskcnc 说:

至少应该用16bit录音,8bit的声音确实难听,损失太多了

G711就是 8bit的,就是一张 16 <=> 8bit 映射表。

#200 Re: 全志 SOC » 有人知道100s的图层融合怎么用吗 » 2020-03-07 13:55:09

是说bsp linux里面那个 /dev/fb0, /dev/fb1 ... 吗?

#202 Re: 全志 SOC » DIY一块全志V3S的学习板,尽量引出所有功能(感谢晕哥支持) » 2020-03-07 00:35:11

mysteryli 说:

汇报下,今天完成了CPU部分原理图的绘制,顺便想问下,怎么上传截图呀 下次汇报工作就可以上传图片了哈哈 明天计划做SD卡部分和以太网部分,到时候看看吧~

插图方法: https://whycan.cn/t_588.html#p29276

#204 Re: RISC-V » 淘宝上9元包快递打印了一本书 《RISC-V 指令集手册》 » 2020-03-04 15:48:57

演技担当黄晓明 说:

等我死了,如果土葬的话,可以拿来给我垫头

现在考虑是不是有点早啊

#205 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 请教如何判断 windows 端口被哪个进程占用了? » 2020-03-03 15:13:27

SmallJu 说:

win10的话任务管理器里可以看见
详细信息  里面有个dip就是端口号
或者powershell里运行netstat -aon|findstr "这边输入你的端口号"

谢谢, 我的是win7, 这个貌似不管用了。

#206 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 请教如何判断 windows 端口被哪个进程占用了? » 2020-03-03 15:12:55

Blueskull 说:

下个Process Explorer,微软官方的免费系统诊断工具,可以当成是任务管理器的高阶版。里面会写进程的资源占用。

https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer

软件是下载到了, 但是只能右击任务,点属性,然后TCP/IP选项卡看端口吗?

tcp.png

#207 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 请教如何判断 windows 端口被哪个进程占用了? » 2020-03-03 12:50:59

Blueskull 说:

下个Process Explorer,微软官方的免费系统诊断工具,可以当成是任务管理器的高阶版。里面会写进程的资源占用。

给力,下午到办公室测试,谢谢!

#209 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 这个 jlink v11 如何? » 2020-03-03 09:33:05

sblpp 说:

V10的硬件,boot里把v10的字符串改成v11,然后就会升v11的固件了。

https://www.cnblogs.com/emwork/p/11297416.html

也就是说v10与v11硬件相同?

#214 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » deepin的文件浏览器没有地址栏? » 2020-02-28 23:28:50

默认就没有吗,我觉得可以设置出来,或者按下 ctrl + L 试一试

#216 Re: 全志 SOC » 准备用F1C00s做个项目,GUI选什么好呢? » 2020-02-21 11:01:26

dgtg 说:

决定用AWTK了,9楼还有模拟器,不错

那个是设计器吧,当然模拟器也有,这个bbs我就见过不少了。

#217 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 家里Windows电脑安装FRP客户端, 再装上VNC服务器,这样在地球上任何有网络的地方都可以操作家里的电脑了。 » 2020-02-15 11:33:13

chainsx 说:

其实realvnc不用frc的。。。只用登录你的账户就行了,免费的也可以

那就相当于 teamview,向日葵这种软件了?

#219 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 拆完这台树莓派A + 收银机 二维码扫描器, 简直都要吐了 » 2020-02-01 11:28:58

zzm24 说:

那张TF卡是什么操作

应该是焊死的, 可能前面出货的产品经过一/几个春夏秋冬可靠性出问题了.

arychen 说:

感觉这样的系统是没法商用的。
可靠性不高,成本也下不来。

问题是人家真大批量出货了, 而且流向二手市场的还不少呢.

#233 Re: 全志 SOC » 树莓派的一个镜像是如何做到适配不同架构的芯片的,能否做一个f1c100s/v3s的通用镜像。 » 2020-01-31 20:51:58

烧了3d光固化打印机固件nanodlp之后, 发现果然如此, 一个固件走天下, 每款树莓派固件都可以用.

#234 Re: 全志 SOC » 友善之臂的开发板到底卖给谁了,淘宝销量不及树莓派百分之一, 其他家的开发板也差不多. » 2020-01-31 20:50:46

前面在Q群看到一个交通指示牌挂了, 就是显示树莓派的启动log, 哈哈哈

然后还有很多3d热熔打印机, 3d光固化, 写字机都用树莓派量产了.

#236 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 树莓派的社区真强大 » 2020-01-31 20:44:08

树莓派确实不错, 这几天正在研究 nanodlp 光固化打印机, 有没有同行?

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

晕哥 说:

收到海南网友寄过来的 4.3寸高分辨率LCD(800*480), 上电测试, 完美!



4.3寸TFT液晶横屏IPS,超宽温LCD彩色显示屏800*480 RGB通用接口, 108元两片,相当于 54元一片:
https://item.taobao.com/item.htm?id=574813477169  (上图就是用这片液晶)


这是另外一家的:
https://item.taobao.com/item.htm?id=578867148797

第一个链接涨价了?

#241 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » N32903和N32905的单价是多少? » 2020-01-31 00:34:24

淘宝查一下零售价格, 大概乘以 80% 就是小批量开票价格.

#242 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 开源的光固化3D打印机固件nanodlp,可以用于树莓派,大家有用过吗? » 2020-01-30 20:41:23

烧到一张8G的TF卡, 插入树莓派 2B 启动了,

登录账号 pi
登录密码: raspberry

等会找根网线插进去试一试.

#243 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-01-30 20:39:45

颜水花生 说:

我的配置文件已经开源了哦,看帖不认真 big_smile 哈哈,上面有个压缩包,里面镜像和配置文件都有,改了XZ压缩方式,还可以缩到1.7M


奇怪,昨天明明放上去的呀,咋不见了,我再发一次

f1c100s-img_tar.zip

感谢分享, 只是下载有点慢, 一会再仔细研究.

#244 Re: 全志 SOC » 求助:A33主线uboot跑起来了,但是无法从 eMMC 启动 » 2020-01-30 18:14:49

这个的默认串口是哪一组,骚到zksw的板子不知道能不能跑,他用的是 spi nor flash

#245 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 开源的光固化3D打印机固件nanodlp,可以用于树莓派,大家有用过吗? » 2020-01-30 14:53:18

wuxx 说:

嗯,接一个常见的A4988模块就可以了

好, 多谢, 我手里有一个 Raspberry Pi 2 Model B V1.1 2014, 不知道能不能跑,

正在下载 https://www.nanodlp.com/nanodlp.img.gz

等会烧到 TF 试一试.

#246 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 开源的光固化3D打印机固件nanodlp,可以用于树莓派,大家有用过吗? » 2020-01-30 14:45:33

wuxx 说:

树莓派上有一路硬件PWM,LCD打印机只需要一个控制Z轴的电机就可以了,所以可以用树莓派直接驱动打印,不需要额外的电机控制板。

TB2r14_biGO_eBjSZFjXXcU9FXa_!!10972858.jpg

是加这个吗:

https://item.taobao.com/item.htm?id=540841196793

#247 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-01-30 14:36:51

不太可能, 除非你的应用接管了 SIG_KILL 软中断命令.

或者试一试这个命令:
killall 应用名

#248 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 开源的光固化3D打印机固件nanodlp,可以用于树莓派,大家有用过吗? » 2020-01-30 14:29:34

wuxx 说:

之前做产品就准备用这个,我们自己移植到了全志H3上面,这套软件还是很不错的,功能比较丰富,上传STL模型即可开始打印,支持边切边打。

看起来确实不错, 你们得有没有量产呢?

#249 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-01-30 14:27:54

颜水花生 说:

不知道中科视为他们怎么做到的,可以4S启动到界面。很牛掰

中科世为那个速度得确实不错, 加上全志官方sdk可能优化得更好吧.

#250 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-01-30 14:05:55

颜水花生 说:

   uboot 主要是 Starting kernel ...    这个地方花的时间太多,差不多2S

这个地方优化空间估计有限, 除非你再把 zImage一部分编译成 ko把文件尺寸降下来.

还有, spi 速度不建议那么高, 60Mhz 左右就可以, 否则可能会导致不稳定, 比如jffs2根文件系统出错.

#251 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-01-30 13:16:10

超级萌新 说:

1. 看你的log,可以屏蔽uboot的emmc,在.config里面可以删除,估计能提高0.0x秒

2.  /etc/init.d/S90app 改成  /etc/init.d/S01app,可以最先执行lvgl app

这里还浪费了一点点时间,
Trying to boot from MMC1
MMC Device 0 not found
spl: could not find mmc device. error: -19

还有你的 lvgl app有没有 strip ?体积多大?





mount: mounting tmpfs on /dev/shm failed: Invalid argument
mount: mounting tmpfs on /tmp failed: Invalid argument
mount: mounting tmpfs on /run failed: Invalid argument
根文件系统还缺这几个目录, 最好手动建立一下.

#252 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-01-30 12:19:36

颜水花生 说:

刚刚试了下,发现速度倒是没什么差别,修改前8.8S,修改后还是一样8.8S。但是体积小了好多,从2.3M变成1.7M了,感谢支招 big_smile

sf load zImage 的时候, 可以加载小一点,  0.6M大概节省 0.x 秒.

#259 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-01-29 23:40:32

linux设备树你的 spi 速度是多少?

等等,有点不对劲,
0x0000002a0000-0x000001040000 : "rootfs"
这里貌似超过16M了?

#261 Re: 8051/STC8/AT89C51/N76E003 » CH558T USB功能实现+性能测试 » 2020-01-29 12:19:55

伍零壹 说:

USB1.1? USB2.0 淘宝那种逻辑分析仪好像很多都分析不了

淘宝山上的 Saleae16 可以分析 USB 1.1(USB 2.0 FullSpeed)

就是那种传输速率为12Mbps的协议.

QQ图片20200129121949.png

#269 Re: ESP32/ESP8266 » 发个羊毛(ESP32-Audio-Kit)59包邮 » 2019-12-30 16:17:05

帮顶吧,私以为9.9包邮才算羊毛。

#270 Re: 全志 SOC » u-boot复制后不能正常编译问题,请教 » 2019-12-29 22:40:07

这个问题好神奇,我也遇到过,

git status 也没发现什么异样

你试一试 git clean -d -f 试一试

#273 Re: NXP i.MX6UL/6ULL » i.mx6ulz批量低至20元 » 2019-12-24 15:20:52

3个i2s,一个光纤输入这是想做麦克风阵列?

#274 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 比电容还便宜的单片机 » 2019-12-22 12:30:12

Beta_vulgaris 说:

感觉这种芯片,可以做SPI屏幕的初始化啊。不就节省了一个SPI口,顺便降低编程难度?

也可以用来做加密芯片 *_*

#275 Re: 全志 SOC » 【海豚派】海豚派 V3s 开发板资料预览 » 2019-12-21 09:36:24

请教大家一个问题,为什么海豚派他这原理图 dram电源要用一个独立dcdc,而不是直接从axp203里面拉一组ldo出来?

#276 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 《VMWare 使用分享》之三 "磁盘压缩" (disk shrink) 编写中... » 2019-12-20 15:13:24

我很少通过共享剪贴板复制粘贴文件 都是通过 /mnt/hgfs/D/ 这个目录命令行拷贝文件的,请问有没有上面的隐藏文件呢?

#277 Re: 全志 SOC » 新人第一帖,发个S3的核心板(AXP209+S3) » 2019-12-20 15:10:45

aodzip 说:

不用定制的啊,默认的给S3就好用

请问哪里买的?是立创商城吗,我看那里有卖

#278 Re: 全志 SOC » 新人第一帖,发个S3的核心板(AXP209+S3) » 2019-12-20 14:10:24

aodzip 说:

1358含税

感谢回复,我也去关注关注。

#279 Re: 全志 SOC » 新人第一帖,发个S3的核心板(AXP209+S3) » 2019-12-20 14:04:12

aodzip 说:

是外包平台,最终是平台拉微信群沟通

方便透露一下layout费用吗?

#280 Re: 全志 SOC » 新人第一帖,发个S3的核心板(AXP209+S3) » 2019-12-20 14:00:17

aodzip 说:

EDA365

这个是外包平台吗?最终是qq/微信沟通吗?还是平台沟通?

#281 Re: Xilinx/Altera/FPGA/CPLD/Verilog » 收到EdgeBoard Lite了,简单地开个箱 » 2019-12-20 13:59:16

metro 说:

在等官方资料。。买得太早就是这点不好 sad

这个有点尴尬了

#282 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 《VMWare 使用分享》之三 "磁盘压缩" (disk shrink) 编写中... » 2019-12-20 13:58:39

晕哥小弟 说:

这个压缩,会不会导致虚拟机工作不正常了?应该有这个风险吧.

会,所以收缩硬盘前请先备份整个虚拟机。

#285 Re: 全志 SOC » 新人第一帖,发个S3的核心板(AXP209+S3) » 2019-12-20 13:56:07

aodzip 说:

嗯,是四层的
(其实PCB Layout是找的外包……

求推荐外包,年底忙晕了,没外援估计会屎掉了。

#286 Re: 全志 SOC » 荔枝派zero 摄像头ov2640咸鱼使用(踩坑) 持续更新 » 2019-12-19 22:32:34

晕哥小弟 说:

v3s 使用fswebcam 拍一张都要1秒左右.做项目不合适.我发现很慢.没有办法.

实际采集并不慢,可以做到30fps,fswebcam只是演示采集一帧写文件而已。

#289 Re: 全志 SOC » F1C100S的SRAM A能访问吗 » 2019-12-17 17:41:58

貌似可以访问哦,据说是留给编解码的,要用应该可以用吧

#291 Re: 全志 SOC » @assert 修改后的 f1c100s u-boot 开源了, 可以引导bsp linux » 2019-12-17 16:38:37

hclydao 说:

感觉各位大佬的分享,虽然还无法通过sunxi-fel直接写入spi nand但可以通过内存写入,目前W25N01G 128MB spi nandflash uboot启动成功
源码及记录分享链接: https://github.com/hcly/f1c100s

这个更吊,围观

#298 Re: 全志 SOC » 荔枝派zero的录音有杂音怎么破 » 2019-12-10 21:30:18

kekemuyu 说:

把adc的db参数调成了最大,rate设成48000,效果很好了

db是哪个寄存器呢?

#300 Re: 全志 SOC » A64 lvds配置 求助! » 2019-12-06 15:37:42

示波器量一下lvds口,不过也没什么用,你都不知道lvds外设时钟有没有开启。

#301 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 哎哟,腾讯云双十一促销的乞丐版云服务器从88元涨到99元了 » 2019-12-06 09:18:23

腾讯云的新用户比阿里云的新用户友好,阿里云像查户口一样,基本很难享受。

腾讯云这个还能把所有用户绑定到一个微信,为了KPI,腾讯云也是蛮拼的。

#302 Re: 全志 SOC » 电池电量检测 » 2019-12-03 11:55:02

以前我们公司的hifi砖头也是全志的pmu

#303 Re: 全志 SOC » 关于硬件图形加速,如何使用F1C100或者SV3S的display engine? » 2019-11-27 15:33:27

zhouyu2019 说:

libdrm是一个开源库,这里可以下载: http://www.linuxfromscratch.org/blfs/view/stable/x/libdrm.html
下载到的库里面就有测试程序,其实也可以在buildroot里面勾选libdrm,会自动帮你下载和编译。另外libdrm只是将linux的drm驱动包装一下,使接口更加友好而已,实际功能实现还是在内核驱动里面,我觉得它是硬件实现的。

我可能有点知道为什么上次f1c100s debian 跑桌面出不来的原因了,报一堆 drm 错误,然后桌面就挂了。

#305 Re: 全志 SOC » 请教一下关于lichee nano在官网上电容屏的适配 » 2019-11-26 07:14:37

xd717 说:

图好像没发成功。原理图上是有2.2k的上拉电阻到3.3的

2.2k估计也可以,你用逻辑分析仪抓一下i2c的数据看看神马情况

#308 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [bilibili] DIY亚克力/塑料瓶/泡沫板简易切割工具 » 2019-11-19 20:15:22

QQ图片20191119201043.jpg

QQ图片20191119201046.jpg

QQ图片20191119201050.jpg

QQ图片20191119201054.jpg



简直看不下去了, 就像狗啃过的一样. 不知道是烙铁功率不够, 还是这种铁质螺丝的热传导不行.

#309 Re: 全志 SOC » 全志违反gplv2许可 » 2019-11-16 11:59:34

这不就是讳疾忌医吗,明明大家都在干(可能打击面太广),却不许说。

我的意思是今天我们不合规,是为了明天合规。今天我们耍流氓是为了明天能做君子,这辈人为了下一代人不再吃苦。

#310 Re: 全志 SOC » 全志违反gplv2许可 » 2019-11-15 15:34:26

假如公司配的电脑不是正版的 windows,以下请选择:
1. 自己去买正版系统装上
2. 说服公司买正版 windows
3. 自己没钱,公司也不买,我自己安装一个ubuntu/深度等免费linux桌面
4. 和公司志不同道不合,直接拍桌子走人

道貌岸然的朋友们,你们的键盘选哪个?

#311 Re: 全志 SOC » 全志违反gplv2许可 » 2019-11-15 11:47:02

这不是一个非黑即白的世界,站在道德的制高点谴责又有什么用,等社会发展了这些问题自然而然就能解决,以前看电影都是盗版的,现在要找个盗版电影难度已经很难了。

#312 Re: 全志 SOC » 全志违反gplv2许可 » 2019-11-15 09:31:07

我没有反对gpl促进了软件的发展,只是说如果在中国目前不具有严格执行这个法律的条件,大部分都在为温饱奔波,很多程序员和公司都没听说过gpl,即使听说过也未必知道具体条款。

当吃饭都是个问题的时候,版权问题先放一放等吃肉的时候再去解决。

#313 Re: 全志 SOC » 全志违反gplv2许可 » 2019-11-15 09:10:30

所以我认为,随着社会发展和技术进步,才慢慢跟进,有取舍地引进合理的法律制度。

#314 Re: 全志 SOC » 全志违反gplv2许可 » 2019-11-15 09:09:17

我相信存在即合理,法律不能太超前于现实,否则就会阻碍技术和社会发展,我党不是一直说实事求是嘛。

南面的某大国,照抄了英国法律,也非常的皿煮,应该分分钟成为发达国家吧。

事实打脸了,太完善的法律,使制造业寸步难行,土地私有,征不到地建工厂,八人以上就强制成立工会,所以印度基本上没有制造业,基本都是手工艺状态,中国十几万人的工厂规模,他们想都不要想。

#315 Re: ESP32/ESP8266 » 羊毛党机会来了, 免费拿 ESP32/ESP8266 开发板 » 2019-11-15 09:00:04

Gentlepig 说:

AFW121TI已售罄...

还有别的 0.01 包邮,效果一样的

#317 Re: ESP32/ESP8266 » 羊毛党机会来了, 免费拿 ESP32/ESP8266 开发板 » 2019-11-14 22:56:39

谢谢楼主,已撸两个, 注册送一张券,还可以另外领一张券.

#318 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [bilibili] DIY亚克力/塑料瓶/泡沫板简易切割工具 » 2019-11-14 19:51:19

QQ图片20191114194706.jpg

QQ图片20191114194713.jpg

QQ图片20191114200008.jpg


今天办公室发现办公室刚好有窄的刀片, 掰了几片, 感觉挺好用的,

只是那个螺丝不是铜的,导热不太好, 最尾巴处温度不够, 根部又太烫,

切割的缺口不是很完美.

#320 Re: 全志 SOC » v536启动异常 » 2019-11-09 22:19:09

16M flash 是什么型号, w25q128?

理论上软件直接烧到 w25m512jv 不用做任何修改。

#321 Re: 全志 SOC » 全志A40I切换Android6桌面奔溃现象 » 2019-11-08 14:12:18

2505300733 说:

这个问题解决了,是ION内存没有分配够,所以开机一直提示和屏幕卡顿。 感谢关注

原来如此, 感谢分享!

#324 Re: 全志 SOC » TINY200上同支持电阻、电容触摸中断的硬件办法 » 2019-11-08 11:47:35

背面还有一个电容屏座子, 不看帖居然没发现, 不过拿起我桌上的GT911触摸屏,居然线序不一样,白高兴了,看来得做一根转接线才行。

#326 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2019-11-08 10:50:12

看错误提示, 缺 SPI 的引脚定义: spi0_pins_a

#328 Re: 全志 SOC » 买了一个F1c200S的板子tiny200 » 2019-11-05 08:31:56

闲鱼淘宝上面很多库存液晶,很便宜,从几毛到十几块钱都有,有些需要用spi初始化,有些是I80接口,有些是spi接口,都需要转接板才能用上。

#329 Re: 全志 SOC » 【汇总】最便宜的A5 A7 A8 A9 A53芯片汇总 » 2019-11-02 16:22:05

还有这么深的套路深啊,第一次听说,受教了!

#341 Re: 全志 SOC » F1C100s上, ts_calibrate/ts_test 均正常, 但是ZLG AWTK不能触摸, 请问这是为什么? » 2019-10-22 22:30:52

1. 看到这位兄弟 https://whycan.cn/t_2386.html#p25634 修改 c 文件,才想起要改 awtk-port/main_loop_linux.c

#define FB_DEVICE_FILENAME "/dev/fb0"
#define TS_DEVICE_FILENAME "/dev/input/event1"
#define KB_DEVICE_FILENAME "/dev/input/event0"

2. 改完后界面也不抖了.

3. 现在最后一个问题: 如何隐藏界面的光标(cursor)呢?

#342 Re: 全志 SOC » F1C100s上, ts_calibrate/ts_test 均正常, 但是ZLG AWTK不能触摸, 请问这是为什么? » 2019-10-22 21:14:45

电阻屏用 ts_test 测试一切正常, 但是 AWTK 运行的时候, 触摸笔按下不动, 整个界面都抖个不停.

#344 Re: 全志 SOC » F1C100s上, ts_calibrate/ts_test 均正常, 但是ZLG AWTK不能触摸, 请问这是为什么? » 2019-10-22 20:57:24

找到问题了,  awtk 默认使用 /dev/input/event0 作为电阻触摸输入设备, 但是我的 event0 是键盘输入设备,

所以我先删除 event0, 然后把 event1 链接到 event0:

rm /dev/input/event0
ln /dev/input/event1 /dev/input/event0 -s

暂时性解决这个问题


现在问题来了, 能不能通过环境设置tslib 触摸的设备是 /dev/input/event1 ?
或者让程序自动去找合适的 abs 输入设备?

#345 全志 SOC » F1C100s上, ts_calibrate/ts_test 均正常, 但是ZLG AWTK不能触摸, 请问这是为什么? » 2019-10-22 19:58:09

smartcar
回复: 8

QQ图片20191022195534.jpg

TSLIB_TSDEVICE=/dev/input/event1 ts_calibrate

TSLIB_TSDEVICE=/dev/input/event1 ts_test

# TSLIB_TSDEVICE=/dev/input/event1 /awtk/bin/demoui
app_root_is_valid:43 app_root != NULL
try /root
try /awtk/bin
app_root=/awtk
fb_info_t: /dev/fb0
fb_info_t: xres=800 yres=480 bits_per_pixel=32 mem_size=1536000
fb_info_t: red(16 8) green(8 8) blue(0 8)
line_length=3200 mem_size=1536000 smem_len=1536000
xres_virtual =800 yres_virtual=480 xpanstep=1 ywrapstep=0
ratio=1.000000 800 480
Build at: Oct 22 2019 16:41:20
window preload open
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
keyboard pointer down:3198 982
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=0, fd=-1, filename=/dev/input/mice)
Print mouse: : Success
window system_bar open
main
ignore_user_input
window main open
window preload close
main
main
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory

tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success


input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
keyboard pointer up:1148 641
keyboard pointer down:1439 531
keyboard pointer up:1441 530
keyboard pointer down:1488 468
keyboard pointer up:1488 477
keyboard pointer down:1452 523
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
keyboard pointer up:1458 525
keyboard pointer down:1435 424
keyboard pointer up:1428 422
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
keyboard pointer down:1904 750
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
keyboard pointer up:1908 734
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS event type)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success

这里是按压触摸屏的输出:

Print tslib: : Success
keyboard pointer up:1148 641
keyboard pointer down:1439 531
keyboard pointer up:1441 530
keyboard pointer down:1488 468
keyboard pointer up:1488 477
keyboard pointer down:1452 523

但是实际上触摸是没有反应的.

请问这是为什么呢?

#349 Re: 全志 SOC » 全志melis系统环境搭建、打包、烧录流程 » 2019-09-28 15:24:36

根据 80/20 定律, 用量20%的客户占比达到 80%, 原厂不想支持, 加上这些客户可能会对占销量 80% 形成竞争压力, 进而影响 芯片厂商/代理商与大客户 的同盟关系。

大白话就是,不欢迎散装客户。

#351 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » github项目, 开源写字机 ---- Liplo » 2019-09-28 14:52:14

--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
以下是网友仿制:
以下是网友仿制:
以下是网友仿制:
以下是网友仿制:
以下是网友仿制:
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------

#356 Re: Cortex M0/M3/M4/M7 » 记一个stm32运行在48mhz正常大于48mhz就进入hardfault的问题解决办法 » 2019-09-28 11:04:47

哈哈哈,大笑三声,

为什么 stm8s003 那么几个脚也要 vcap呢,这脚到底原来干嘛的?

#360 Re: 全志 SOC » 刚入坑f1c100s,萌新有问 » 2019-09-26 15:48:30

我记得是可以的,反正试一下又不要钱,试试呗

#364 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » 请问 pip install PyQt5 不成功, 这是什么错误? » 2019-09-09 08:54:15

可能外网速度不行,或者文件没有下载完全,用豆瓣的仓库试一试:

pip install PyQt5   --trusted-host http://pypi.douban.com/simple/
pip install PyInstaller   --trusted-host http://pypi.douban.com/simple/

#367 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 给大家推荐一款联通的流量卡, 年付8元, » 2019-08-01 14:44:30

超级萌新 说:

这卡用于小孩的电话手表不错,反正一年到期就销号,羊毛到手。

这卡在手表上用有坑,很多城市的联通2G基站拆了,而我的360手表只支持2G,暑假去北京旅游 ,很多地方提示无服务。

#368 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 1块钱包邮的圣芯 8051 HC89S003F4 开发板(自带仿真器), 手快有,手慢无 » 2019-07-26 10:39:17

撸了撸了,感谢分享。
芯片的前期研发成本很高,但是边际成本很低,配合好的推广方法,钱途不错,支持国产。

#369 Re: 全志 SOC » 请教一下V3S怎么外接扬声器 » 2019-07-21 00:54:52

是看起来没有问题,我们公司的机器也是这么接

#372 Re: 全志 SOC » 全志的引导启动都是一样的吗? » 2019-07-13 08:19:32

通过配置文件 .config 和 设备树 dts 来区分

#373 Re: 全志 SOC » 求问:linux下无法在搭载USB-hub的情况下使用4g网卡? » 2019-07-12 10:26:45

之前 dhcpc 以太网不能获取 ip是什么问题引起呢?

#377 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 修改 dns 可加速 github 访问 » 2019-07-11 08:22:31

smartcar
回复: 2

# GitHub Start
192.30.253.112 github.com
192.30.253.118 gist.github.com
151.101.112.133 assets-cdn.github.com
151.101.184.133 raw.githubusercontent.com
151.101.112.133 gist.githubusercontent.com
151.101.184.133 cloud.githubusercontent.com
151.101.112.133 camo.githubusercontent.com
151.101.112.133 avatars0.githubusercontent.com
151.101.112.133 avatars1.githubusercontent.com
151.101.184.133 avatars2.githubusercontent.com
151.101.12.133 avatars3.githubusercontent.com
151.101.12.133 avatars4.githubusercontent.com
151.101.184.133 avatars5.githubusercontent.com
151.101.184.133 avatars6.githubusercontent.com
151.101.184.133 avatars7.githubusercontent.com
151.101.12.133 avatars8.githubusercontent.com
# GitHub End






以上添加到本地  hosts  文件

#380 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » g_file_storage的同步问题 » 2019-07-08 17:05:57

早期的安卓机也是这么干的吧,插入电脑当U盘的时候,安卓机不能再访问了。

而且很容易把整个文件系统弄挂掉,所以后来的安卓已经换成其他协议了。

#383 Re: 全志 SOC » F1C100S USB转以太网AX88772驱动编译 » 2019-07-05 15:55:53

淘宝上买了几种 usb转 ethernet 的转换线都是这个芯片

#384 Re: 全志 SOC » 内核突然出现5秒重启 ,以前用的好好的 » 2019-07-05 15:54:57

Uncompressing Linux... done, booting the kernel.



这个就是  earlyprink 显示的内容,看起来解压正常,而且试图引导linux了。

#386 Re: 全志 SOC » camdroid 里面添加 RTL8723BS SDIO WIFI 网卡, 编译出错了 » 2019-07-04 07:23:09

https://github.com/AlexELEC/AlexELEC-AML/blob/master/packages/linux-drivers/RTL8812AU/patches/aarch64/RTL8812AU-02-fix-multiple-definitions.patch

diff -Naur a/include/ieee80211.h b/include/ieee80211.h
--- a/include/ieee80211.h	2016-10-20 12:20:19.000000000 -0700
+++ b/include/ieee80211.h	2016-11-15 17:00:32.239848199 -0800
@@ -1388,18 +1388,18 @@
 (((Addr[2]) & 0xff) == 0xff) && (((Addr[3]) & 0xff) == 0xff) && (((Addr[4]) & 0xff) == 0xff) && \
 (((Addr[5]) & 0xff) == 0xff))
 #else
-extern __inline int is_multicast_mac_addr(const u8 *addr)
+static __inline int is_multicast_mac_addr(const u8 *addr)
 {
         return ((addr[0] != 0xff) && (0x01 & addr[0]));
 }
 
-extern __inline int is_broadcast_mac_addr(const u8 *addr)
+static __inline int is_broadcast_mac_addr(const u8 *addr)
 {
 	return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) &&   \
 		(addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
 }
 
-extern __inline int is_zero_mac_addr(const u8 *addr)
+static __inline int is_zero_mac_addr(const u8 *addr)
 {
 	return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) &&   \
 		(addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));

找到解决方案, 更新  drivers/net/wireless/rtl8723bs/include/ieee80211.h 一下试一试.

#387 全志 SOC » camdroid 里面添加 RTL8723BS SDIO WIFI 网卡, 编译出错了 » 2019-07-04 07:21:27

smartcar
回复: 1
  CC [M]  drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/odm_RTL8723B.o
  CC [M]  drivers/net/wireless/rtl8723bs/platform/platform_ops.o
  CC [M]  drivers/net/wireless/rtl8723bs/platform/platform_ARM_SUNnI_sdio.o
  CC [M]  drivers/net/wireless/rtl8723bs/core/rtw_mp.o
  CC [M]  drivers/net/wireless/rtl8723bs/core/rtw_mp_ioctl.o
  CC [M]  drivers/net/wireless/rtl8723bs/core/rtw_bt_mp.o
  LD [M]  drivers/net/wireless/rtl8723bs/8723bs.o
drivers/net/wireless/rtl8723bs/core/rtw_security.o: In function `is_multicast_mac_addr':
rtw_security.c:(.text+0x20b8): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_security.o: In function `is_broadcast_mac_addr':
rtw_security.c:(.text+0x20d8): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_security.o: In function `is_zero_mac_addr':
rtw_security.c:(.text+0x215c): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_debug.o: In function `is_multicast_mac_addr':
rtw_debug.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_debug.o: In function `is_broadcast_mac_addr':
rtw_debug.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_debug.o: In function `is_zero_mac_addr':
rtw_debug.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_io.o: In function `is_multicast_mac_addr':
rtw_io.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_io.o: In function `is_broadcast_mac_addr':
rtw_io.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_io.o: In function `is_zero_mac_addr':
rtw_io.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ioctl_query.o: In function `is_multicast_mac_addr':
rtw_ioctl_query.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ioctl_query.o: In function `is_broadcast_mac_addr':
rtw_ioctl_query.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ioctl_query.o: In function `is_zero_mac_addr':
rtw_ioctl_query.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ioctl_set.o: In function `is_multicast_mac_addr':
rtw_ioctl_set.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ioctl_set.o: In function `is_broadcast_mac_addr':
rtw_ioctl_set.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ioctl_set.o: In function `is_zero_mac_addr':
rtw_ioctl_set.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ieee80211.o: In function `is_multicast_mac_addr':
rtw_ieee80211.c:(.text+0x58): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ieee80211.o: In function `is_broadcast_mac_addr':
rtw_ieee80211.c:(.text+0x78): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ieee80211.o: In function `is_zero_mac_addr':
rtw_ieee80211.c:(.text+0xfc): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_mlme.o: In function `is_multicast_mac_addr':
rtw_mlme.c:(.text+0x38): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_mlme.o: In function `is_broadcast_mac_addr':
rtw_mlme.c:(.text+0x58): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_mlme.o: In function `is_zero_mac_addr':
rtw_mlme.c:(.text+0xdc): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_mlme_ext.o: In function `is_multicast_mac_addr':
rtw_mlme_ext.c:(.text+0x6bc): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_mlme_ext.o: In function `is_broadcast_mac_addr':
rtw_mlme_ext.c:(.text+0x6dc): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_mlme_ext.o: In function `is_zero_mac_addr':
rtw_mlme_ext.c:(.text+0x760): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_wlan_util.o: In function `is_multicast_mac_addr':
rtw_wlan_util.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_wlan_util.o: In function `is_broadcast_mac_addr':
rtw_wlan_util.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_wlan_util.o: In function `is_zero_mac_addr':
rtw_wlan_util.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_vht.o: In function `is_multicast_mac_addr':
rtw_vht.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_vht.o: In function `is_broadcast_mac_addr':
rtw_vht.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_vht.o: In function `is_zero_mac_addr':
rtw_vht.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_pwrctrl.o: In function `is_multicast_mac_addr':
rtw_pwrctrl.c:(.text+0x90): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_pwrctrl.o: In function `is_broadcast_mac_addr':
rtw_pwrctrl.c:(.text+0xb0): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_pwrctrl.o: In function `is_zero_mac_addr':
rtw_pwrctrl.c:(.text+0x134): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_rf.o: In function `is_multicast_mac_addr':
rtw_rf.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_rf.o: In function `is_broadcast_mac_addr':
rtw_rf.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_rf.o: In function `is_zero_mac_addr':
rtw_rf.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_recv.o: In function `is_multicast_mac_addr':
rtw_recv.c:(.text+0x1d8): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_recv.o: In function `is_broadcast_mac_addr':
rtw_recv.c:(.text+0x1f8): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_recv.o: In function `is_zero_mac_addr':
rtw_recv.c:(.text+0x27c): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_sta_mgt.o: In function `is_multicast_mac_addr':
rtw_sta_mgt.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_sta_mgt.o: In function `is_broadcast_mac_addr':
rtw_sta_mgt.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_sta_mgt.o: In function `is_zero_mac_addr':
rtw_sta_mgt.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ap.o: In function `is_multicast_mac_addr':
rtw_ap.c:(.text+0x27c): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ap.o: In function `is_broadcast_mac_addr':
rtw_ap.c:(.text+0x29c): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_ap.o: In function `is_zero_mac_addr':
rtw_ap.c:(.text+0x320): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_xmit.o: In function `is_multicast_mac_addr':
rtw_xmit.c:(.text+0xa4): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_xmit.o: In function `is_broadcast_mac_addr':
rtw_xmit.c:(.text+0xc4): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_xmit.o: In function `is_zero_mac_addr':
rtw_xmit.c:(.text+0x148): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_p2p.o: In function `is_multicast_mac_addr':
rtw_p2p.c:(.text+0x7dc): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_p2p.o: In function `is_broadcast_mac_addr':
rtw_p2p.c:(.text+0x7fc): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_p2p.o: In function `is_zero_mac_addr':
rtw_p2p.c:(.text+0x880): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_tdls.o: In function `is_multicast_mac_addr':
rtw_tdls.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_tdls.o: In function `is_broadcast_mac_addr':
rtw_tdls.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_tdls.o: In function `is_zero_mac_addr':
rtw_tdls.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_br_ext.o: In function `is_multicast_mac_addr':
rtw_br_ext.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_br_ext.o: In function `is_broadcast_mac_addr':
rtw_br_ext.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_br_ext.o: In function `is_zero_mac_addr':
rtw_br_ext.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_iol.o: In function `is_multicast_mac_addr':
rtw_iol.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_iol.o: In function `is_broadcast_mac_addr':
rtw_iol.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_iol.o: In function `is_zero_mac_addr':
rtw_iol.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_sreset.o: In function `is_multicast_mac_addr':
rtw_sreset.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_sreset.o: In function `is_broadcast_mac_addr':
rtw_sreset.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_sreset.o: In function `is_zero_mac_addr':
rtw_sreset.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_btcoex.o: In function `is_multicast_mac_addr':
rtw_btcoex.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_btcoex.o: In function `is_broadcast_mac_addr':
rtw_btcoex.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_btcoex.o: In function `is_zero_mac_addr':
rtw_btcoex.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_beamforming.o: In function `is_multicast_mac_addr':
rtw_beamforming.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_beamforming.o: In function `is_broadcast_mac_addr':
rtw_beamforming.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_beamforming.o: In function `is_zero_mac_addr':
rtw_beamforming.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_odm.o: In function `is_multicast_mac_addr':
rtw_odm.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_odm.o: In function `is_broadcast_mac_addr':
rtw_odm.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/rtw_odm.o: In function `is_zero_mac_addr':
rtw_odm.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/core/efuse/rtw_efuse.o: In function `is_multicast_mac_addr':
rtw_efuse.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/core/efuse/rtw_efuse.o: In function `is_broadcast_mac_addr':
rtw_efuse.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/core/efuse/rtw_efuse.o: In function `is_zero_mac_addr':
rtw_efuse.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/osdep_service.o: In function `is_multicast_mac_addr':
osdep_service.c:(.text+0x98): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/osdep_service.o: In function `is_broadcast_mac_addr':
osdep_service.c:(.text+0xb8): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/osdep_service.o: In function `is_zero_mac_addr':
osdep_service.c:(.text+0x13c): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/os_intfs.o: In function `is_multicast_mac_addr':
os_intfs.c:(.text+0x42c): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/os_intfs.o: In function `is_broadcast_mac_addr':
os_intfs.c:(.text+0x44c): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/os_intfs.o: In function `is_zero_mac_addr':
os_intfs.c:(.text+0x4d0): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/sdio_intf.o: In function `is_multicast_mac_addr':
sdio_intf.c:(.text+0x608): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/sdio_intf.o: In function `is_broadcast_mac_addr':
sdio_intf.c:(.text+0x628): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/sdio_intf.o: In function `is_zero_mac_addr':
sdio_intf.c:(.text+0x6ac): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/sdio_ops_linux.o: In function `is_multicast_mac_addr':
sdio_ops_linux.c:(.text+0x44): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/sdio_ops_linux.o: In function `is_broadcast_mac_addr':
sdio_ops_linux.c:(.text+0x64): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/sdio_ops_linux.o: In function `is_zero_mac_addr':
sdio_ops_linux.c:(.text+0xe8): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/ioctl_linux.o: In function `is_multicast_mac_addr':
ioctl_linux.c:(.text+0xae14): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/ioctl_linux.o: In function `is_broadcast_mac_addr':
ioctl_linux.c:(.text+0xae34): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/ioctl_linux.o: In function `is_zero_mac_addr':
ioctl_linux.c:(.text+0xaeb8): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/xmit_linux.o: In function `is_multicast_mac_addr':
xmit_linux.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/xmit_linux.o: In function `is_broadcast_mac_addr':
xmit_linux.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/xmit_linux.o: In function `is_zero_mac_addr':
xmit_linux.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/mlme_linux.o: In function `is_multicast_mac_addr':
mlme_linux.c:(.text+0x104): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/mlme_linux.o: In function `is_broadcast_mac_addr':
mlme_linux.c:(.text+0x124): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/mlme_linux.o: In function `is_zero_mac_addr':
mlme_linux.c:(.text+0x1a8): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/recv_linux.o: In function `is_multicast_mac_addr':
recv_linux.c:(.text+0x14): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/recv_linux.o: In function `is_broadcast_mac_addr':
recv_linux.c:(.text+0x34): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/recv_linux.o: In function `is_zero_mac_addr':
recv_linux.c:(.text+0xb8): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/ioctl_cfg80211.o: In function `is_multicast_mac_addr':
ioctl_cfg80211.c:(.text+0x3f8c): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/ioctl_cfg80211.o: In function `is_broadcast_mac_addr':
ioctl_cfg80211.c:(.text+0x3fac): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/ioctl_cfg80211.o: In function `is_zero_mac_addr':
ioctl_cfg80211.c:(.text+0x4030): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/wifi_regd.o: In function `is_multicast_mac_addr':
wifi_regd.c:(.text+0x154): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/wifi_regd.o: In function `is_broadcast_mac_addr':
wifi_regd.c:(.text+0x174): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/wifi_regd.o: In function `is_zero_mac_addr':
wifi_regd.c:(.text+0x1f8): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/rtw_android.o: In function `is_multicast_mac_addr':
rtw_android.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/rtw_android.o: In function `is_broadcast_mac_addr':
rtw_android.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/rtw_android.o: In function `is_zero_mac_addr':
rtw_android.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/rtw_proc.o: In function `is_multicast_mac_addr':
rtw_proc.c:(.text+0xee8): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/rtw_proc.o: In function `is_broadcast_mac_addr':
rtw_proc.c:(.text+0xf08): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/rtw_proc.o: In function `is_zero_mac_addr':
rtw_proc.c:(.text+0xf8c): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/custom_gpio_linux.o: In function `is_multicast_mac_addr':
custom_gpio_linux.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/custom_gpio_linux.o: In function `is_broadcast_mac_addr':
custom_gpio_linux.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/os_dep/linux/custom_gpio_linux.o: In function `is_zero_mac_addr':
custom_gpio_linux.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_intf.o: In function `is_multicast_mac_addr':
hal_intf.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_intf.o: In function `is_broadcast_mac_addr':
hal_intf.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_intf.o: In function `is_zero_mac_addr':
hal_intf.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_com.o: In function `is_multicast_mac_addr':
hal_com.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_com.o: In function `is_broadcast_mac_addr':
hal_com.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_com.o: In function `is_zero_mac_addr':
hal_com.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_com_phycfg.o: In function `is_multicast_mac_addr':
hal_com_phycfg.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_com_phycfg.o: In function `is_broadcast_mac_addr':
hal_com_phycfg.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_com_phycfg.o: In function `is_zero_mac_addr':
hal_com_phycfg.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_phy.o: In function `is_multicast_mac_addr':
hal_phy.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_phy.o: In function `is_broadcast_mac_addr':
hal_phy.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_phy.o: In function `is_zero_mac_addr':
hal_phy.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_btcoex.o: In function `is_multicast_mac_addr':
hal_btcoex.c:(.text+0x2c0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_btcoex.o: In function `is_broadcast_mac_addr':
hal_btcoex.c:(.text+0x2e0): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_btcoex.o: In function `is_zero_mac_addr':
hal_btcoex.c:(.text+0x364): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_hci/hal_sdio.o: In function `is_multicast_mac_addr':
hal_sdio.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_hci/hal_sdio.o: In function `is_broadcast_mac_addr':
hal_sdio.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/hal_hci/hal_sdio.o: In function `is_zero_mac_addr':
hal_sdio.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/led/hal_sdio_led.o: In function `is_multicast_mac_addr':
hal_sdio_led.c:(.text+0x3c): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/led/hal_sdio_led.o: In function `is_broadcast_mac_addr':
hal_sdio_led.c:(.text+0x5c): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/led/hal_sdio_led.o: In function `is_zero_mac_addr':
hal_sdio_led.c:(.text+0xe0): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/HalPwrSeqCmd.o: In function `is_multicast_mac_addr':
HalPwrSeqCmd.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/HalPwrSeqCmd.o: In function `is_broadcast_mac_addr':
HalPwrSeqCmd.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/HalPwrSeqCmd.o: In function `is_zero_mac_addr':
HalPwrSeqCmd.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/Hal8723BPwrSeq.o: In function `is_multicast_mac_addr':
Hal8723BPwrSeq.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/Hal8723BPwrSeq.o: In function `is_broadcast_mac_addr':
Hal8723BPwrSeq.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/Hal8723BPwrSeq.o: In function `is_zero_mac_addr':
Hal8723BPwrSeq.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_sreset.o: In function `is_multicast_mac_addr':
rtl8723b_sreset.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_sreset.o: In function `is_broadcast_mac_addr':
rtl8723b_sreset.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_sreset.o: In function `is_zero_mac_addr':
rtl8723b_sreset.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_hal_init.o: In function `is_multicast_mac_addr':
rtl8723b_hal_init.c:(.text+0x21ec): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_hal_init.o: In function `is_broadcast_mac_addr':
rtl8723b_hal_init.c:(.text+0x220c): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_hal_init.o: In function `is_zero_mac_addr':
rtl8723b_hal_init.c:(.text+0x2290): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_phycfg.o: In function `is_multicast_mac_addr':
rtl8723b_phycfg.c:(.text+0x558): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_phycfg.o: In function `is_broadcast_mac_addr':
rtl8723b_phycfg.c:(.text+0x578): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_phycfg.o: In function `is_zero_mac_addr':
rtl8723b_phycfg.c:(.text+0x5fc): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_rf6052.o: In function `is_multicast_mac_addr':
rtl8723b_rf6052.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_rf6052.o: In function `is_broadcast_mac_addr':
rtl8723b_rf6052.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_rf6052.o: In function `is_zero_mac_addr':
rtl8723b_rf6052.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_dm.o: In function `is_multicast_mac_addr':
rtl8723b_dm.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_dm.o: In function `is_broadcast_mac_addr':
rtl8723b_dm.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_dm.o: In function `is_zero_mac_addr':
rtl8723b_dm.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_rxdesc.o: In function `is_multicast_mac_addr':
rtl8723b_rxdesc.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_rxdesc.o: In function `is_broadcast_mac_addr':
rtl8723b_rxdesc.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_rxdesc.o: In function `is_zero_mac_addr':
rtl8723b_rxdesc.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_cmd.o: In function `is_multicast_mac_addr':
rtl8723b_cmd.c:(.text+0x3b4): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_cmd.o: In function `is_broadcast_mac_addr':
rtl8723b_cmd.c:(.text+0x3d4): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_cmd.o: In function `is_zero_mac_addr':
rtl8723b_cmd.c:(.text+0x458): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/sdio_halinit.o: In function `is_multicast_mac_addr':
sdio_halinit.c:(.text+0x914): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/sdio_halinit.o: In function `is_broadcast_mac_addr':
sdio_halinit.c:(.text+0x934): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/sdio_halinit.o: In function `is_zero_mac_addr':
sdio_halinit.c:(.text+0x9b8): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/rtl8723bs_led.o: In function `is_multicast_mac_addr':
rtl8723bs_led.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/rtl8723bs_led.o: In function `is_broadcast_mac_addr':
rtl8723bs_led.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/rtl8723bs_led.o: In function `is_zero_mac_addr':
rtl8723bs_led.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/rtl8723bs_xmit.o: In function `is_multicast_mac_addr':
rtl8723bs_xmit.c:(.text+0x2ec): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/rtl8723bs_xmit.o: In function `is_broadcast_mac_addr':
rtl8723bs_xmit.c:(.text+0x30c): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/rtl8723bs_xmit.o: In function `is_zero_mac_addr':
rtl8723bs_xmit.c:(.text+0x390): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/rtl8723bs_recv.o: In function `is_multicast_mac_addr':
rtl8723bs_recv.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/rtl8723bs_recv.o: In function `is_broadcast_mac_addr':
rtl8723bs_recv.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/rtl8723bs_recv.o: In function `is_zero_mac_addr':
rtl8723bs_recv.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/sdio_ops.o: In function `is_multicast_mac_addr':
sdio_ops.c:(.text+0x728): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/sdio_ops.o: In function `is_broadcast_mac_addr':
sdio_ops.c:(.text+0x748): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/sdio/sdio_ops.o: In function `is_zero_mac_addr':
sdio_ops.c:(.text+0x7cc): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_mp.o: In function `is_multicast_mac_addr':
rtl8723b_mp.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_mp.o: In function `is_broadcast_mac_addr':
rtl8723b_mp.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/rtl8723b/rtl8723b_mp.o: In function `is_zero_mac_addr':
rtl8723b_mp.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_debug.o: In function `is_multicast_mac_addr':
odm_debug.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_debug.o: In function `is_broadcast_mac_addr':
odm_debug.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_debug.o: In function `is_zero_mac_addr':
odm_debug.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_AntDiv.o: In function `is_multicast_mac_addr':
odm_AntDiv.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_AntDiv.o: In function `is_broadcast_mac_addr':
odm_AntDiv.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_AntDiv.o: In function `is_zero_mac_addr':
odm_AntDiv.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_interface.o: In function `is_multicast_mac_addr':
odm_interface.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_interface.o: In function `is_broadcast_mac_addr':
odm_interface.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_interface.o: In function `is_zero_mac_addr':
odm_interface.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_HWConfig.o: In function `is_multicast_mac_addr':
odm_HWConfig.c:(.text+0x38): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_HWConfig.o: In function `is_broadcast_mac_addr':
odm_HWConfig.c:(.text+0x58): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm_HWConfig.o: In function `is_zero_mac_addr':
odm_HWConfig.c:(.text+0xdc): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm.o: In function `is_multicast_mac_addr':
odm.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm.o: In function `is_broadcast_mac_addr':
odm.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/odm.o: In function `is_zero_mac_addr':
odm.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/HalPhyRf.o: In function `is_multicast_mac_addr':
HalPhyRf.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/HalPhyRf.o: In function `is_broadcast_mac_addr':
HalPhyRf.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/HalPhyRf.o: In function `is_zero_mac_addr':
HalPhyRf.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8188c2Ant.o: In function `is_multicast_mac_addr':
HalBtc8188c2Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8188c2Ant.o: In function `is_broadcast_mac_addr':
HalBtc8188c2Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8188c2Ant.o: In function `is_zero_mac_addr':
HalBtc8188c2Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8192d2Ant.o: In function `is_multicast_mac_addr':
HalBtc8192d2Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8192d2Ant.o: In function `is_broadcast_mac_addr':
HalBtc8192d2Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8192d2Ant.o: In function `is_zero_mac_addr':
HalBtc8192d2Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8192e1Ant.o: In function `is_multicast_mac_addr':
HalBtc8192e1Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8192e1Ant.o: In function `is_broadcast_mac_addr':
HalBtc8192e1Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8192e1Ant.o: In function `is_zero_mac_addr':
HalBtc8192e1Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8192e2Ant.o: In function `is_multicast_mac_addr':
HalBtc8192e2Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8192e2Ant.o: In function `is_broadcast_mac_addr':
HalBtc8192e2Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8192e2Ant.o: In function `is_zero_mac_addr':
HalBtc8192e2Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723a1Ant.o: In function `is_multicast_mac_addr':
HalBtc8723a1Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723a1Ant.o: In function `is_broadcast_mac_addr':
HalBtc8723a1Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723a1Ant.o: In function `is_zero_mac_addr':
HalBtc8723a1Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723a2Ant.o: In function `is_multicast_mac_addr':
HalBtc8723a2Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723a2Ant.o: In function `is_broadcast_mac_addr':
HalBtc8723a2Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723a2Ant.o: In function `is_zero_mac_addr':
HalBtc8723a2Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723b1Ant.o: In function `is_multicast_mac_addr':
HalBtc8723b1Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723b1Ant.o: In function `is_broadcast_mac_addr':
HalBtc8723b1Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723b1Ant.o: In function `is_zero_mac_addr':
HalBtc8723b1Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723b2Ant.o: In function `is_multicast_mac_addr':
HalBtc8723b2Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723b2Ant.o: In function `is_broadcast_mac_addr':
HalBtc8723b2Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8723b2Ant.o: In function `is_zero_mac_addr':
HalBtc8723b2Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8812a1Ant.o: In function `is_multicast_mac_addr':
HalBtc8812a1Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8812a1Ant.o: In function `is_broadcast_mac_addr':
HalBtc8812a1Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8812a1Ant.o: In function `is_zero_mac_addr':
HalBtc8812a1Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8812a2Ant.o: In function `is_multicast_mac_addr':
HalBtc8812a2Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8812a2Ant.o: In function `is_broadcast_mac_addr':
HalBtc8812a2Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8812a2Ant.o: In function `is_zero_mac_addr':
HalBtc8812a2Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8821a1Ant.o: In function `is_multicast_mac_addr':
HalBtc8821a1Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8821a1Ant.o: In function `is_broadcast_mac_addr':
HalBtc8821a1Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8821a1Ant.o: In function `is_zero_mac_addr':
HalBtc8821a1Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8821a2Ant.o: In function `is_multicast_mac_addr':
HalBtc8821a2Ant.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8821a2Ant.o: In function `is_broadcast_mac_addr':
HalBtc8821a2Ant.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC-BTCoexist/HalBtc8821a2Ant.o: In function `is_zero_mac_addr':
HalBtc8821a2Ant.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_BB.o: In function `is_multicast_mac_addr':
HalHWImg8723B_BB.c:(.text+0x88): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_BB.o: In function `is_broadcast_mac_addr':
HalHWImg8723B_BB.c:(.text+0xa8): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_BB.o: In function `is_zero_mac_addr':
HalHWImg8723B_BB.c:(.text+0x12c): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_MAC.o: In function `is_multicast_mac_addr':
HalHWImg8723B_MAC.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_MAC.o: In function `is_broadcast_mac_addr':
HalHWImg8723B_MAC.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_MAC.o: In function `is_zero_mac_addr':
HalHWImg8723B_MAC.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_RF.o: In function `is_multicast_mac_addr':
HalHWImg8723B_RF.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_RF.o: In function `is_broadcast_mac_addr':
HalHWImg8723B_RF.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_RF.o: In function `is_zero_mac_addr':
HalHWImg8723B_RF.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_FW.o: In function `is_multicast_mac_addr':
HalHWImg8723B_FW.c:(.text+0x0): multiple definition of `is_multicast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x44): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_FW.o: In function `is_broadcast_mac_addr':
HalHWImg8723B_FW.c:(.text+0x20): multiple definition of `is_broadcast_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0x64): first defined here
drivers/net/wireless/rtl8723bs/hal/OUTSRC/rtl8723b/HalHWImg8723B_FW.o: In function `is_zero_mac_addr':
HalHWImg8723B_FW.c:(.text+0xa4): multiple definition of `is_zero_mac_addr'
drivers/net/wireless/rtl8723bs/core/rtw_cmd.o:rtw_cmd.c:(.text+0xe8): first defined here
....

#389 Re: 全志 SOC » 入坑V3s camdroid编解码视频 » 2019-07-02 20:39:36

得研究一下全志的编解码, 可是又没有什么资料.

#390 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 我也来推荐一个性价比不错的 SD NAND ------ MK(米客方德) » 2019-07-02 20:34:16

可靠性没有批量测试, 请各位自行斟酌!
可靠性没有批量测试, 请各位自行斟酌!
可靠性没有批量测试, 请各位自行斟酌!

#391 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 我也来推荐一个性价比不错的 SD NAND ------ MK(米客方德) » 2019-07-02 20:33:20

smartcar
回复: 14

MK(米客方德) SD NAND:

https://item.szlcsc.com/351535.html  4Gb(512MB) SD NAND, -40°C to +85°C 10+: ¥13.92
https://item.szlcsc.com/351534.html  2Gb(256MB) SD NAND, -25°C to +85°C 10+: ¥8.53
https://item.szlcsc.com/351533.html  1Gb(128MB) SD NAND, -25°C to +85°C 10+: ¥6.63



上次618促销用 立创商城发的100羊毛券撸了不少 SD NAND, 效果还不错, 特此分享.

#392 Re: 全志 SOC » CS品牌新一代SD NAND(又名贴片式T卡)如何让老MCU焕发活力 » 2019-07-02 10:51:03

4GB 肯定贵天上去了, 不如用 eMMC 了.

站长注: [部分被编辑]

#393 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » nuc972换256M nand flash需要做哪些配置修改? » 2019-07-02 10:46:12

是不是 制作文件系统的 page/block 大小和 实际的 nand flash 不符?

#397 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » nuc972移植qt,遇到了一些问题。 » 2019-06-29 17:32:55

/usr/local/Trolltech/QtEmbedded-4.8.5/bin/qmake 执行不了, 对吗?

#398 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » nuc972移植qt,遇到了一些问题。 » 2019-06-29 17:20:57

你生成的 qmake 是在 这里吗: /usr/local/arm_linux_4.8/bin/qmake ?

#399 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » nuc972移植qt,遇到了一些问题。 » 2019-06-29 17:11:47

Gentlepig 说:

972的bsp里的根文件系统的/etc/profile,里面原来只有两行,后面的都是我加的。
原来的两行是:
  1 export LD_LIBRARY_PATH=/lib:/mnt/mmcblk0p2                                 
  2 /mnt/mmcblk0p1/scan_zbar
很好奇,这两行是不是应该合成一行? 第二行没有命令语句吧?

第1行是设置全局环境变量,
如果合并到一行就是这样:

LD_LIBRARY_PATH=/lib:/mnt/mmcblk0p2 /mnt/mmcblk0p1/scan_zbar

估计第2行的 scan_zbar 动态加载了 so 文件,

而 so 文件在 /mnt/mmcblk0p1/ 目录

#401 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » VMware® Workstation 14 Pro 安装 Ubuntu18.04, 安装程序会自动装上 vmtools, 不需要手动安装了 » 2019-06-29 11:53:50

上面的屏保还是没有关掉, 久久不用还是进入了屏保, 还要手势上拉才能进入窗口, 虽然不用输入密码。

还有 通用的电脑配置, Ubuntu18.04 比 14.04 慢了挺多。

#402 Re: 全志 SOC » miyoo游戏机横版拆机 » 2019-06-29 11:52:02

Zodiac 说:

miyoo这么大张旗鼓的,不怕被任天堂告侵权赔偿么?

连小霸王都不怕, miyoo那点蚊子肉,不知道任天堂看不看得上。

#403 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 科普CS品牌SD NAND VS TF卡 SD NAND和TF卡的区别 » 2019-06-28 17:45:32

sd nand 这种只能去定量测试, 整片擦写几万次, 看校验还是否正常, 容量有没有变化(内部有坏块算法)。

接个读卡器用电脑就能测试。

#405 Re: 全志 SOC » miyoo游戏机横版拆机 » 2019-06-27 10:21:40

不错不错, 感谢楼主 @kekemuyu 分享!

#407 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » VMware® Workstation 14 Pro 安装 Ubuntu18.04, 安装程序会自动装上 vmtools, 不需要手动安装了 » 2019-06-26 14:48:31

关闭恼人的屏保: https://askubuntu.com/questions/1048774/disabling-lock-screen-18-04

关闭屏保:

gsettings set org.gnome.desktop.lockdown disable-lock-screen 'true'

读取 是否关闭屏保:

gsettings get org.gnome.desktop.lockdown disable-lock-screen

#408 Re: 全志 SOC » licheepi zero BSP 内核(linux3.4) 编译教程 » 2019-06-25 14:49:48

2019-06-25_144640.gif

可能 bsp Linux 对 RTC 进行了时间换算, 跑了 11 分钟, 还算比较准.

主线 Linux 没有换算, 所以跑得很远。

#409 Re: 全志 SOC » licheepi zero BSP 内核(linux3.4) 编译教程 » 2019-06-25 14:25:30

2019-06-25_142045.gif

左边是 软件浮点数工具链  CROSS_COMPILE=arm-linux-gnueabi-
右边是 硬件浮点数工具链  CROSS_COMPILE=arm-linux-gnueabihf-

右边居然会检测 TF 卡分区没有消息了。


U-Boot SPL 2017.01-rc2-00073-gdd6e874 (Jul 11 2018 - 16:05:42)
DRAM: 64 MiB
Trying to boot from MMC1

U-Boot 2017.01-rc2-00073-gdd6e874 (Jul 11 2018 - 16:05:42 +0800) Allwinner Technology

CPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
SF: unrecognized JEDEC id bytes: c2, 20, 19
*** Warning - spi_flash_probe() failed, using default environment

Setting up a 800x480 lcd console (overscan 0x0)
dotclock: 33000kHz = 33000kHz: (1 * 3MHz * 66) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000


U-Boot 2017.01-rc2-00073-gdd6e874 (Jul 11 2018 - 16:05:42 +0800) Allwinner Technology

CPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
SF: unrecognized JEDEC id bytes: c2, 20, 19
*** Warning - spi_flash_probe() failed, using default environment

Setting up a 800x480 lcd console (overscan 0x0)
dotclock: 33000kHz = 33000kHz: (1 * 3MHz * 66) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000
Net:   No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
reading /boot.scr
290 bytes read in 15 ms (18.6 KiB/s)
## Executing script at 41900000
reading uImage
2440600 bytes read in 140 ms (16.6 MiB/s)
reading script.bin
35240 bytes read in 25 ms (1.3 MiB/s)
## Booting kernel from Legacy Image at 41000000 ...
   Image Name:   Linux-3.4.39+
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2440536 Bytes = 2.3 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
Using machid 0x1029 from environment

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0
[    0.000000] Linux version 3.4.39+ (smartcar@ubuntu) (gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) ) #2 Tue Jun 25 14:14:24 CST 2019
[    0.000000] Initialized persistent memory from 41d20800-41d307ff
[    0.000000] Kernel command line: console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw
[    0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Memory: 64MB = 64MB total
[    0.000000] Memory: 30428k/30428k available, 35108k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xc4800000 - 0xff000000   ( 936 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0470000   (4512 kB)
[    0.000000]       .init : 0xc0470000 - 0xc0493000   ( 140 kB)
[    0.000000]       .data : 0xc0494000 - 0xc04d8750   ( 274 kB)
[    0.000000]        .bss : 0xc04d8774 - 0xc057320d   ( 619 kB)
[    0.000000] NR_IRQS:544
[    0.000000] Architected local timer running at 24.00MHz.
[    0.000000] Switching to timer-based delay loop
[    0.000000] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms
[    0.000000] Console: colour dummy device 80x30
[    0.000161] Calibrating delay loop (skipped), value calculated using timer frequency.. 4800.00 BogoMIPS (lpj=24000000)
[    0.000180] pid_max: default: 32768 minimum: 301
[    0.000321] Mount-cache hash table entries: 512
[    0.000879] CPU: Testing write buffer coherency: ok
[    0.001144] Setting up static identity map for 0x4034b9e0 - 0x4034ba38
[    0.001813] devtmpfs: initialized
[    0.003519] pinctrl core: initialized pinctrl subsystem
[    0.003994] NET: Registered protocol family 16
[    0.004307] DMA: preallocated 128 KiB pool for atomic coherent allocations
[    0.004363] script_sysfs_init success
[    0.005100] gpiochip_add: registered GPIOs 0 to 223 on device: sunxi-pinctrl
[    0.005998] sunxi-pinctrl sunxi-pinctrl: initialized sunXi PIO driver
[    0.006367] gpiochip_add: registered GPIOs 1024 to 1031 on device: axp-pinctrl
[    0.007164] persistent_ram: uncorrectable error in header
[    0.007179] persistent_ram: no valid data in buffer (sig = 0x75175517)
[    0.013834] console [ram-1] enabled
[    0.014631] Not Found clk pll_isp in script
[    0.014757] Not Found clk pll_video in script
[    0.014975] Not Found clk pll_ve in script
[    0.015094] Not Found clk pll_periph0 in script
[    0.015311] Not Found clk pll_de in script
[    0.019022] bio: create slab <bio-0> at 0
[    0.019403] pwm module init!
[    0.021734] SCSI subsystem initialized
[    0.022080] usbcore: registered new interface driver usbfs
[    0.022259] usbcore: registered new interface driver hub
[    0.022617] usbcore: registered new device driver usb
[    0.022877] twi_chan_cfg()340 - [twi0] has no twi_regulator.
[    0.023100] twi_chan_cfg()340 - [twi1] has no twi_regulator.
[    0.023905] sunxi_i2c_do_xfer()985 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x34)
[    0.024142] axp20_board 0-0034: failed reading at 0x03
[    0.024390] axp20_board: probe of 0-0034 failed with error -70
[    0.024556] Linux video capture interface: v2.00
[    0.024761] gpiochip_add: gpios 1024..1028 (axp_pin) failed to register
[    0.025307] Advanced Linux Sound Architecture Driver Version 1.0.25.
[    0.026186] Switching to clocksource arch_sys_counter
[    0.030000] NET: Registered protocol family 2
[    0.030000] IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.030000] TCP established hash table entries: 2048 (order: 2, 16384 bytes)
[    0.030319] TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
[    0.030465] TCP: Hash tables configured (established 2048 bind 2048)
[    0.030688] TCP: reno registered
[    0.030813] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.031044] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.031437] NET: Registered protocol family 1
[    0.031991] standby_mode = 1.
[    0.032116] wakeup src cnt is : 3.
[    0.032254] pmu1_enable = 0x1.
[    0.032374] pmux_id = 0x1.
[    0.032603] config_pmux_para: script_parser_fetch err.
[    0.032724] pmu2_enable = 0x0.
[    0.032847] add_sys_pwr_dm: get ldo name failed
[    0.033067] add_sys_pwr_dm: get ldo name failed
[    0.033187] add_sys_pwr_dm: get ldo name failed
[    0.033408] add_sys_pwr_dm: get ldo name failed
[    0.033527] add_sys_pwr_dm: get ldo name failed
[    0.033645] add_sys_pwr_dm: get ldo name failed
[    0.033864] add_sys_pwr_dm: get ldo name failed
[    0.033984] add_sys_pwr_dm: get ldo name failed
[    0.034203] add_sys_pwr_dm: get ldo name failed
[    0.034321] add_sys_pwr_dm: get ldo name failed
[    0.034439] after inited: sys_mask config = 0x0.
[    0.034659] dynamic_standby enalbe = 0x0.
[    0.034825] sunxi_reg_init enter
[    0.036868] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.037143] jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
[    0.037552] msgmni has been set to 59
[    0.038595] io scheduler noop registered
[    0.038726] io scheduler deadline registered
[    0.039015] io scheduler cfq registered (default)
[    0.039514] [DISP]disp_module_init
[    0.040088] cmdline,disp=
[    0.040766] [DISP] disp_get_rotation_sw,line:68:disp 0 out of range? g_rot_sw=0
[    0.041102] [DISP] disp_init_connections,line:288:NULL pointer: 0, 0
[    0.043741] [DISP] Fb_map_kernel_logo,line:924:Fb_map_kernel_logo failed!
[    0.046334] [DISP] disp_sys_power_enable,line:387:some error happen, fail to get regulator
[    0.047417] [DISP]disp_module_init finish
[    0.047806] sw_uart_get_devinfo()1503 - uart0 has no uart_regulator.
[    0.048389] uart0: ttyS0 at MMIO 0x1c28000 (irq = 32) is a SUNXI
[    0.048521] sw_uart_pm()890 - uart0 clk is already enable
[    0.048753] sw_console_setup()1233 - console setup baud 115200 parity n bits 8, flow n
[    0.162221] console [ttyS0] enabled
[    0.685792] sunxi_spi_chan_cfg()1376 - [spi-0] has no spi_regulator.
[    0.693772] spi spi0: master is unqueued, this is deprecated
[    0.700344] m25p_probe()982 - Use the Dual Mode Read.
[    0.706286] m25p80 spi0.0: found mx25l25635e, expected w25q128
[    0.712925] m25p80 spi0.0: mx25l25635e (32768 Kbytes)
[    0.720232] partitions_register()869 - Invalid partitions count: -499109887
[    0.728521] Creating 4 MTD partitions on "spi0.0":
[    0.734114] 0x000000000000-0x000000080000 : "u-boot"
[    0.740765] 0x000000080000-0x000000100000 : "sys_config"
[    0.747689] 0x000000100000-0x000000400000 : "kernel"
[    0.754251] 0x000000400000-0x000001000000 : "rootfs"
[    0.762223] Failed to alloc md5
[    0.765969] eth0: Use random mac address
[    0.770572] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    0.798215] sunxi-ehci sunxi-ehci.1: SW USB2.0 'Enhanced' Host Controller (EHCI) Driver
[    0.807267] sunxi-ehci sunxi-ehci.1: new USB bus registered, assigned bus number 1
[    0.816008] sunxi-ehci sunxi-ehci.1: irq 104, io mem 0xf1c1a000
[    0.840032] sunxi-ehci sunxi-ehci.1: USB 0.0 started, EHCI 1.00
[    0.847530] hub 1-0:1.0: USB hub found
[    0.851864] hub 1-0:1.0: 1 port detected
[    0.856887] sunxi-ehci sunxi-ehci.1: remove, state 1
[    0.862555] usb usb1: USB disconnect, device number 1
[    0.869858] sunxi-ehci sunxi-ehci.1: USB bus 1 deregistered
[    0.886299] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    0.913493] sunxi-ohci sunxi-ohci.1: SW USB2.0 'Open' Host Controller (OHCI) Driver
[    0.922141] sunxi-ohci sunxi-ohci.1: new USB bus registered, assigned bus number 1
[    0.930801] sunxi-ohci sunxi-ohci.1: irq 105, io mem 0xf1c1a400
[    0.994661] hub 1-0:1.0: USB hub found
[    0.999055] hub 1-0:1.0: 1 port detected
[    1.004028] sunxi-ohci sunxi-ohci.1: remove, state 1
[    1.009762] usb usb1: USB disconnect, device number 1
[    1.016063] sunxi-ohci sunxi-ohci.1: USB bus 1 deregistered
[    1.032610] Initializing USB Mass Storage driver...
[    1.038218] usbcore: registered new interface driver usb-storage
[    1.045019] USB Mass Storage support registered.
[    1.050820] file system registered
[    1.056277] android_usb gadget: Mass Storage Function, version: 2009/09/11
[    1.064180] android_usb gadget: Number of LUNs=1
[    1.069414]  lun0: LUN: removable file: (no medium)
[    1.075540] android_usb gadget: android_usb ready
[    1.081034] sunxikbd_script_init: key para not found, used default para.
[    1.089715] sunxi-rtc sunxi-rtc: rtc core: registered sunxi-rtc as rtc0
[    1.098066] platform reg-20-cs-dcdc2: Driver reg-20-cs-dcdc2 requests probe deferral
[    1.107076] platform reg-20-cs-dcdc3: Driver reg-20-cs-dcdc3 requests probe deferral
[    1.116010] platform reg-20-cs-ldo1: Driver reg-20-cs-ldo1 requests probe deferral
[    1.124645] platform reg-20-cs-ldo2: Driver reg-20-cs-ldo2 requests probe deferral
[    1.133379] platform reg-20-cs-ldo3: Driver reg-20-cs-ldo3 requests probe deferral
[    1.142116] platform reg-20-cs-ldo4: Driver reg-20-cs-ldo4 requests probe deferral
[    1.150735] platform reg-20-cs-ldoio0: Driver reg-20-cs-ldoio0 requests probe deferral
[    1.159748] sunxi_wdt_init_module: sunxi WatchDog Timer Driver v1.0
[    1.167108] sunxi_wdt_probe: devm_ioremap return wdt_reg 0xf1c20ca0, res->start 0x01c20ca0, res->end 0x01c20cbf
[    1.178441] sunxi_wdt_probe: initialized (g_timeout=16s, g_nowayout=0)
[    1.186233] wdt_enable, write reg 0xf1c20cb8 val 0x00000000
[    1.192647] wdt_set_tmout, write 0x000000b0 to mode reg 0xf1c20cb8, actual timeout 16 sec
[    1.204497] no led_3, ignore it!
[    1.208350] no led_4, ignore it!
[    1.212074] no led_5, ignore it!
[    1.215763] no led_6, ignore it!
[    1.219450] no led_7, ignore it!
[    1.225188] usbcore: registered new interface driver usbhid
[    1.231538] usbhid: USB HID core driver
[    1.236548] ashmem: initialized
[    1.240672] logger: created 256K log 'log_main'
[    1.245930] logger: created 32K log 'log_events'
[    1.251420] logger: created 32K log 'log_radio'
[    1.256703] logger: created 32K log 'log_system'
[    1.263541] script_get_item return type err, consider it no ldo
[    1.274558] *******************Try sdio*******************
[    1.281140] asoc: sndcodec <-> sunxi-codec mapping ok
[    1.289197] TCP: cubic registered
[    1.293104] NET: Registered protocol family 17
[    1.298170] *******************Try sd *******************
[    1.304433] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[    1.313307] ThumbEE CPU extension supported.
[    1.318191] Registering SWP/SWPB emulation handler
[    1.328185] platform reg-20-cs-ldoio0: Driver reg-20-cs-ldoio0 requests probe deferral
[    1.337353] platform reg-20-cs-ldo4: Driver reg-20-cs-ldo4 requests probe deferral
[    1.346074] platform reg-20-cs-ldo3: Driver reg-20-cs-ldo3 requests probe deferral
[    1.354647] platform reg-20-cs-ldo2: Driver reg-20-cs-ldo2 requests probe deferral
[    1.363228] platform reg-20-cs-ldo1: Driver reg-20-cs-ldo1 requests probe deferral
[    1.371907] platform reg-20-cs-dcdc3: Driver reg-20-cs-dcdc3 requests probe deferral
[    1.380783] platform reg-20-cs-dcdc2: Driver reg-20-cs-dcdc2 requests probe deferral
[    1.389652] sunxi-rtc sunxi-rtc: setting system clock to 1970-01-01 00:00:05 UTC (5)
[    1.400211] ALSA device list:
[    1.403639]   #0: audiocodec
[    1.407369] Waiting for root device /dev/mmcblk0p2...
[    1.414264] mmc0: new high speed SD card at address 0001
[    1.420737] mmcblk0: mmc0:0001 00000 1.83 GiB
[    1.427334]  mmcblk0: p1 p2
[    1.431310] mmcblk mmc0:0001: Card claimed for testing.
[    1.437235] mmc0:0001: 00000 1.83 GiB
[    1.441785] platform reg-20-cs-dcdc2: Driver reg-20-cs-dcdc2 requests probe deferral
[    1.450552] *******************sd init ok*******************
[    1.457173] platform reg-20-cs-dcdc3: Driver reg-20-cs-dcdc3 requests probe deferral
[    1.466035] platform reg-20-cs-ldo1: Driver reg-20-cs-ldo1 requests probe deferral
[    1.474602] platform reg-20-cs-ldo2: Driver reg-20-cs-ldo2 requests probe deferral
[    1.483262] platform reg-20-cs-ldo3: Driver reg-20-cs-ldo3 requests probe deferral
[    1.491922] platform reg-20-cs-ldo4: Driver reg-20-cs-ldo4 requests probe deferral
[    1.500474] platform reg-20-cs-ldoio0: Driver reg-20-cs-ldoio0 requests probe deferral
[    1.520980] EXT4-fs (mmcblk0p2): couldn't mount as ext3 due to feature incompatibilities
[    1.531014] EXT4-fs (mmcblk0p2): couldn't mount as ext2 due to feature incompatibilities
[    1.632188] EXT4-fs (mmcblk0p2): recovery complete
[    1.644073] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    1.653353] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    1.662223] devtmpfs: mounted
[    1.665918] Freeing init memory: 140K
[    1.796753] EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered
Starting logging: OK
Initializing random number generator... done.
Starting network: OK

Welcome to Buildroot
buildroot login:
U-Boot SPL 2017.01-rc2-00073-gdd6e874 (Jul 11 2018 - 16:05:42)
DRAM: 64 MiB
Trying to boot from MMC1

U-Boot 2017.01-rc2-00073-gdd6e874 (Jul 11 2018 - 16:05:42 +0800) Allwinner Technology

CPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
SF: unrecognized JEDEC id bytes: c2, 20, 19
*** Warning - spi_flash_probe() failed, using default environment

Setting up a 800x480 lcd console (overscan 0x0)
dotclock: 33000kHz = 33000kHz: (1 * 3MHz * 66) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000


U-Boot 2017.01-rc2-00073-gdd6e874 (Jul 11 2018 - 16:05:42 +0800) Allwinner Technology

CPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
SF: unrecognized JEDEC id bytes: c2, 20, 19
*** Warning - spi_flash_probe() failed, using default environment

Setting up a 800x480 lcd console (overscan 0x0)
dotclock: 33000kHz = 33000kHz: (1 * 3MHz * 66) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000
Net:   No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
reading /boot.scr
290 bytes read in 17 ms (16.6 KiB/s)
## Executing script at 41900000
reading uImage
2572800 bytes read in 151 ms (16.2 MiB/s)
reading script.bin
35240 bytes read in 29 ms (1.2 MiB/s)
## Booting kernel from Legacy Image at 41000000 ...
   Image Name:   Linux-3.4.39+
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2572736 Bytes = 2.5 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
Using machid 0x1029 from environment

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0
[    0.000000] Linux version 3.4.39+ (smartcar@ubuntu) (gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) ) #1 Tue Jun 25 11:22:20 CST 2019
[    0.000000] Initialized persistent memory from 41d20800-41d307ff
[    0.000000] Kernel command line: console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw
[    0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Memory: 64MB = 64MB total
[    0.000000] Memory: 30196k/30196k available, 35340k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xc4800000 - 0xff000000   ( 936 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0492000   (4648 kB)
[    0.000000]       .init : 0xc0492000 - 0xc04b9000   ( 156 kB)
[    0.000000]       .data : 0xc04ba000 - 0xc04d4920   ( 107 kB)
[    0.000000]        .bss : 0xc0513174 - 0xc05adc05   ( 619 kB)
[    0.000000] NR_IRQS:544
[    0.000000] Architected local timer running at 24.00MHz.
[    0.000000] Switching to timer-based delay loop
[    0.000000] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms
[    0.000000] Console: colour dummy device 80x30
[    0.000167] Calibrating delay loop (skipped), value calculated using timer frequency.. 4800.00 BogoMIPS (lpj=24000000)
[    0.000192] pid_max: default: 32768 minimum: 301
[    0.000328] Mount-cache hash table entries: 512
[    0.000895] CPU: Testing write buffer coherency: ok
[    0.001180] Setting up static identity map for 0x40382b50 - 0x40382ba8
[    0.001867] devtmpfs: initialized
[    0.003566] pinctrl core: initialized pinctrl subsystem
[    0.004068] NET: Registered protocol family 16
[    0.004391] DMA: preallocated 128 KiB pool for atomic coherent allocations
[    0.004452] script_sysfs_init success
[    0.005211] gpiochip_add: registered GPIOs 0 to 223 on device: sunxi-pinctrl
[    0.006125] sunxi-pinctrl sunxi-pinctrl: initialized sunXi PIO driver
[    0.006521] gpiochip_add: registered GPIOs 1024 to 1031 on device: axp-pinctrl
[    0.007365] persistent_ram: error in header, 8
[    0.007381] persistent_ram: found existing buffer, size 16618, start 16618
[    0.088049] console [ram-1] enabled
[    0.088922] Not Found clk pll_isp in script
[    0.089054] Not Found clk pll_video in script
[    0.089276] Not Found clk pll_ve in script
[    0.089397] Not Found clk pll_periph0 in script
[    0.089617] Not Found clk pll_de in script
[    0.093547] bio: create slab <bio-0> at 0
[    0.093950] pwm module init!
[    0.096335] SCSI subsystem initialized
[    0.096704] usbcore: registered new interface driver usbfs
[    0.096892] usbcore: registered new interface driver hub
[    0.097264] usbcore: registered new device driver usb
[    0.097534] twi_chan_cfg()340 - [twi0] has no twi_regulator.
[    0.097760] twi_chan_cfg()340 - [twi1] has no twi_regulator.
[    0.098581] sunxi_i2c_do_xfer()985 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x34)
[    0.098827] axp20_board 0-0034: failed reading at 0x03
[    0.098979] axp20_board: probe of 0-0034 failed with error -70
[    0.099254] Linux video capture interface: v2.00
[    0.099465] gpiochip_add: gpios 1024..1028 (axp_pin) failed to register
[    0.100040] Advanced Linux Sound Architecture Driver Version 1.0.25.
[    0.100956] Switching to clocksource arch_sys_counter
[    0.109838] NET: Registered protocol family 2
[    0.109838] IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.110314] TCP established hash table entries: 2048 (order: 2, 16384 bytes)
[    0.110578] TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
[    0.110725] TCP: Hash tables configured (established 2048 bind 2048)
[    0.110952] TCP: reno registered
[    0.111076] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.111307] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.111691] NET: Registered protocol family 1
[    0.112156] standby_mode = 1.
[    0.112382] wakeup src cnt is : 3.
[    0.112524] pmu1_enable = 0x1.
[    0.112645] pmux_id = 0x1.
[    0.112874] config_pmux_para: script_parser_fetch err.
[    0.112996] pmu2_enable = 0x0.
[    0.113119] add_sys_pwr_dm: get ldo name failed
[    0.113341] add_sys_pwr_dm: get ldo name failed
[    0.113462] add_sys_pwr_dm: get ldo name failed
[    0.113583] add_sys_pwr_dm: get ldo name failed
[    0.113804] add_sys_pwr_dm: get ldo name failed
[    0.113925] add_sys_pwr_dm: get ldo name failed
[    0.114146] add_sys_pwr_dm: get ldo name failed
[    0.114266] add_sys_pwr_dm: get ldo name failed
[    0.114386] add_sys_pwr_dm: get ldo name failed
[    0.114604] add_sys_pwr_dm: get ldo name failed
[    0.114724] after inited: sys_mask config = 0x0.
[    0.114944] dynamic_standby enalbe = 0x0.
[    0.115117] sunxi_reg_init enter
[    0.117245] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.117522] jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
[    0.117837] msgmni has been set to 58
[    0.119061] io scheduler noop registered
[    0.119195] io scheduler deadline registered
[    0.119387] io scheduler cfq registered (default)
[    0.120067] [DISP]disp_module_init
[    0.120621] cmdline,disp=
[    0.121326] [DISP] disp_get_rotation_sw,line:68:disp 0 out of range? g_rot_sw=0
[    0.121672] [DISP] disp_init_connections,line:288:NULL pointer: 0, 0
[    0.124334] [DISP] Fb_map_kernel_logo,line:924:Fb_map_kernel_logo failed!
[    0.127007] [DISP] disp_sys_power_enable,line:387:some error happen, fail to get regulator
[    0.128105] [DISP]disp_module_init finish
[    0.128510] sw_uart_get_devinfo()1503 - uart0 has no uart_regulator.
[    0.129096] uart0: ttyS0 at MMIO 0x1c28000 (irq = 32) is a SUNXI
[    0.129230] sw_uart_pm()890 - uart0 clk is already enable
[    0.129463] sw_console_setup()1233 - console setup baud 115200 parity n bits 8, flow n
[    0.242938] console [ttyS0] enabled
[    0.765567] sunxi_spi_chan_cfg()1376 - [spi-0] has no spi_regulator.
[    0.773582] spi spi0: master is unqueued, this is deprecated
[    0.780175] m25p_probe()982 - Use the Dual Mode Read.
[    0.786030] m25p80 spi0.0: found mx25l25635e, expected w25q128
[    0.792774] m25p80 spi0.0: mx25l25635e (32768 Kbytes)
[    0.799996] partitions_register()869 - Invalid partitions count: -499109887
[    0.808429] Creating 4 MTD partitions on "spi0.0":
[    0.813917] 0x000000000000-0x000000080000 : "u-boot"
[    0.820712] 0x000000080000-0x000000100000 : "sys_config"
[    0.827563] 0x000000100000-0x000000400000 : "kernel"
[    0.834259] 0x000000400000-0x000001000000 : "rootfs"
[    0.842357] Failed to alloc md5
[    0.846109] eth0: Use random mac address
[    0.850724] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    0.878285] sunxi-ehci sunxi-ehci.1: SW USB2.0 'Enhanced' Host Controller (EHCI) Driver
[    0.887443] sunxi-ehci sunxi-ehci.1: new USB bus registered, assigned bus number 1
[    0.896189] sunxi-ehci sunxi-ehci.1: irq 104, io mem 0xf1c1a000
[    0.920032] sunxi-ehci sunxi-ehci.1: USB 0.0 started, EHCI 1.00
[    0.927539] hub 1-0:1.0: USB hub found
[    0.931928] hub 1-0:1.0: 1 port detected
[    0.936974] sunxi-ehci sunxi-ehci.1: remove, state 1
[    0.942649] usb usb1: USB disconnect, device number 1
[    0.949969] sunxi-ehci sunxi-ehci.1: USB bus 1 deregistered
[    0.966537] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    0.993639] sunxi-ohci sunxi-ohci.1: SW USB2.0 'Open' Host Controller (OHCI) Driver
[    1.002406] sunxi-ohci sunxi-ohci.1: new USB bus registered, assigned bus number 1
[    1.011074] sunxi-ohci sunxi-ohci.1: irq 105, io mem 0xf1c1a400
[    1.074805] hub 1-0:1.0: USB hub found
[    1.079200] hub 1-0:1.0: 1 port detected
[    1.084216] sunxi-ohci sunxi-ohci.1: remove, state 1
[    1.089858] usb usb1: USB disconnect, device number 1
[    1.096292] sunxi-ohci sunxi-ohci.1: USB bus 1 deregistered
[    1.112749] Initializing USB Mass Storage driver...
[    1.118472] usbcore: registered new interface driver usb-storage
[    1.125268] USB Mass Storage support registered.
[    1.130939] file system registered
[    1.136471] android_usb gadget: Mass Storage Function, version: 2009/09/11
[    1.144384] android_usb gadget: Number of LUNs=1
[    1.149622]  lun0: LUN: removable file: (no medium)
[    1.155773] android_usb gadget: android_usb ready
[    1.161285] sunxikbd_script_init: key para not found, used default para.
[    1.169684] [RTC] WARNING: Rtc time will be wrong!!
[    1.175555] sunxi-rtc sunxi-rtc: rtc core: registered sunxi-rtc as rtc0
[    1.184159] platform reg-20-cs-dcdc2: Driver reg-20-cs-dcdc2 requests probe deferral
[    1.193057] platform reg-20-cs-dcdc3: Driver reg-20-cs-dcdc3 requests probe deferral
[    1.202014] platform reg-20-cs-ldo1: Driver reg-20-cs-ldo1 requests probe deferral
[    1.210751] platform reg-20-cs-ldo2: Driver reg-20-cs-ldo2 requests probe deferral
[    1.219393] platform reg-20-cs-ldo3: Driver reg-20-cs-ldo3 requests probe deferral
[    1.228127] platform reg-20-cs-ldo4: Driver reg-20-cs-ldo4 requests probe deferral
[    1.236864] platform reg-20-cs-ldoio0: Driver reg-20-cs-ldoio0 requests probe deferral
[    1.245789] sunxi_wdt_init_module: sunxi WatchDog Timer Driver v1.0
[    1.253163] sunxi_wdt_probe: devm_ioremap return wdt_reg 0xf1c20ca0, res->start 0x01c20ca0, res->end 0x01c20cbf
[    1.264593] sunxi_wdt_probe: initialized (g_timeout=16s, g_nowayout=0)
[    1.272307] wdt_enable, write reg 0xf1c20cb8 val 0x00000000
[    1.278706] wdt_set_tmout, write 0x000000b0 to mode reg 0xf1c20cb8, actual timeout 16 sec
[    1.290742] no led_3, ignore it!
[    1.294459] no led_4, ignore it!
[    1.298149] no led_5, ignore it!
[    1.301920] no led_6, ignore it!
[    1.305712] no led_7, ignore it!
[    1.311383] usbcore: registered new interface driver usbhid
[    1.317704] usbhid: USB HID core driver
[    1.322886] ashmem: initialized
[    1.326727] logger: created 256K log 'log_main'
[    1.332069] logger: created 32K log 'log_events'
[    1.337577] logger: created 32K log 'log_radio'
[    1.343084] logger: created 32K log 'log_system'
[    1.349926] script_get_item return type err, consider it no ldo
[    1.357712] asoc: sndcodec <-> sunxi-codec mapping ok
[    1.369329] TCP: cubic registered
[    1.373195] *******************Try sdio*******************
[    1.379411] NET: Registered protocol family 17
[    1.384737] VFP support v0.3: [mmc]: *** sunxi_mci_dump_errinfo(L826): smc 0 err, cmd 5,  RTO !!
[    1.394997] ThumbEE CPU extension supported.
[    1.399874] Registering SWP/SWPB emulation handler
[    1.406222] *******************Try sd *******************
[    1.412720] platform reg-20-cs-ldoio0: Driver reg-20-cs-ldoio0 requests probe deferral
[    1.421884] platform reg-20-cs-ldo4: Driver reg-20-cs-ldo4 requests probe deferral
[    1.431802] platform reg-20-cs-ldo3: Driver reg-20-cs-ldo3 requests probe deferral
[    1.442673] platform reg-20-cs-ldo2: Driver reg-20-cs-ldo2 requests probe deferral
[    1.451375] platform reg-20-cs-ldo1: Driver reg-20-cs-ldo1 requests probe deferral
[    1.459955] platform reg-20-cs-dcdc3: Driver reg-20-cs-dcdc3 requests probe deferral
[    1.468831] platform reg-20-cs-dcdc2: Driver reg-20-cs-dcdc2 requests probe deferral
[    1.477724] sunxi-rtc sunxi-rtc: hctosys: unable to read the hardware clock
[    1.487168] ALSA device list:
[    1.490759]   #0: audiocodec
[    1.494460] Waiting for root device /dev/mmcblk0p2...

#410 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » VMware® Workstation 14 Pro 安装 Ubuntu18.04, 安装程序会自动装上 vmtools, 不需要手动安装了 » 2019-06-25 14:03:44

解决右上角网络图标消失, 网络连接失败等问题:

sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start

#411 Re: 全志 SOC » 用 gcc7 编译 bsp V3s 出错了, 有没有大神可以帮忙解决? » 2019-06-25 11:25:45

复制一份,骗一骗编译器搞定:

cp include/linux/compiler-gcc4.h include/linux/compiler-gcc7.h

'make CONFIG_DEBUG_SECTION_MISMATCH=y'
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
  KSYM    .tmp_kallsyms1.S
  AS      .tmp_kallsyms1.o
  LD      .tmp_vmlinux2
  KSYM    .tmp_kallsyms2.S
  AS      .tmp_kallsyms2.o
  LD      vmlinux
  SYSMAP  System.map
  SYSMAP  .tmp_System.map
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  AS      arch/arm/boot/compressed/head.o
  GZIP    arch/arm/boot/compressed/piggy.gzip
  AS      arch/arm/boot/compressed/piggy.gzip.o
  CC      arch/arm/boot/compressed/misc.o
  CC      arch/arm/boot/compressed/decompress.o
  CC      arch/arm/boot/compressed/string.o
  SHIPPED arch/arm/boot/compressed/lib1funcs.S
  AS      arch/arm/boot/compressed/lib1funcs.o
  SHIPPED arch/arm/boot/compressed/ashldi3.S
  AS      arch/arm/boot/compressed/ashldi3.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-3.4.39+
Created:      Tue Jun 25 11:22:27 2019
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2572736 Bytes = 2512.44 KiB = 2.45 MiB
Load Address: 40008000
Entry Point:  40008000
  Image arch/arm/boot/uImage is ready

#412 Re: 全志 SOC » 用 gcc7 编译 bsp V3s 出错了, 有没有大神可以帮忙解决? » 2019-06-25 11:18:55

我是参考 @qianhao 大神这个帖子: https://whycan.cn/t_682.html

6.编译内核

使用我提供的 lichee_BSP_config 说明一下  这里修改了内核支持网口 支持ext4文件系统 就直接给出我配置好的。
cd linux-3.4

cp lichee_BSP_config .config

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage -j16

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j16 INSTALL_MOD_PATH=out modules

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j16 INSTALL_MOD_PATH=out modules_install

这时  我们要用的  uImage 在 arch/arm/boot/uImage

#413 全志 SOC » 用 gcc7 编译 bsp V3s 出错了, 有没有大神可以帮忙解决? » 2019-06-25 11:18:10

smartcar
回复: 2

smartcar@ubuntu:/opt/v3s_linux3.4$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf --silentoldconfig Kconfig
  WRAP    arch/arm/include/generated/asm/auxvec.h
  WRAP    arch/arm/include/generated/asm/bitsperlong.h
  WRAP    arch/arm/include/generated/asm/cputime.h
  WRAP    arch/arm/include/generated/asm/emergency-restart.h
  WRAP    arch/arm/include/generated/asm/errno.h
  WRAP    arch/arm/include/generated/asm/ioctl.h
  WRAP    arch/arm/include/generated/asm/irq_regs.h
  WRAP    arch/arm/include/generated/asm/kdebug.h
  WRAP    arch/arm/include/generated/asm/local.h
  WRAP    arch/arm/include/generated/asm/local64.h
  WRAP    arch/arm/include/generated/asm/percpu.h
  WRAP    arch/arm/include/generated/asm/poll.h
  WRAP    arch/arm/include/generated/asm/resource.h
  WRAP    arch/arm/include/generated/asm/sections.h
  WRAP    arch/arm/include/generated/asm/siginfo.h
  WRAP    arch/arm/include/generated/asm/sizes.h
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  Generating include/generated/mach-types.h
  CC      kernel/bounds.s
In file included from include/linux/compiler.h:48:0,
                 from include/linux/stddef.h:4,
                 from include/linux/posix_types.h:4,
                 from include/linux/types.h:17,
                 from include/linux/page-flags.h:8,
                 from kernel/bounds.c:9:
include/linux/compiler-gcc.h:100:1: fatal error: linux/compiler-gcc7.h: No such file or directory
#include gcc_header(__GNUC__)
^~~~
compilation terminated.
/opt/v3s_linux3.4/./Kbuild:35: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:985: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2

#414 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » VMware® Workstation 14 Pro 安装 Ubuntu18.04, 安装程序会自动装上 vmtools, 不需要手动安装了 » 2019-06-25 08:55:08

2019-06-25_085205.gif


sudo apt install gnome-tweak-tool
gnome-tweaks

虚拟机里面还是关闭动画显示比较好,没必要那么炫酷。

#416 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » VMware® Workstation 14 Pro 安装 Ubuntu18.04, 安装程序会自动装上 vmtools, 不需要手动安装了 » 2019-06-24 23:41:19

smartcar:/$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)





smartcar:/$ arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/7/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --disable-werror --enable-multilib --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- --includedir=/usr/arm-linux-gnueabihf/include
Thread model: posix
gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)



gcc 默认都是 7.4 了, 这很好,不需要再手动安装其他工具链

#419 Re: 全志 SOC » v3s的mipi最高支持多少万像素的摄像头 » 2019-06-23 22:26:38

Performance:
- Still capture resolution up to 5M with parallel interface
- Video capture resolution up to 1080p@30fps with parallel interface
- Still capture resolution up to 5M with MIPI-CSI2 interface
- Video capture resolution up to 1080p@30fps with MIPI-CSI2 interface
- MIPI-DPHY maximum data rate up to 1Gbps per lane




性能:
- 使用并行接口仍可捕获高达5M的分辨率
- 具有并行接口的视频捕获分辨率高达1080p @ 30fps
- 使用MIPI-CSI2接口仍可捕获高达5M的分辨率
- 使用MIPI-CSI2接口,视频捕获分辨率高达1080p @ 30fps
-  MIPI-DPHY每通道最高数据速率高达1Gbps

#420 Re: 君正Ingenic/X1000/X2000/T10/T20/T30 » 君正的X1830要来了 » 2019-06-21 14:50:06

资源超级多, 还 SIP 了 128M ddr2, 只是 BGA 封装玩不了, 等大佬出核心板了。

#423 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 第一次体验 JLC 嘉立创 SMT » 2019-06-21 08:37:46

cityf 说:

发现JLC偷偷给了我一张100元SMT打样券。

我也有, 但是发现 FPC 座子已经不能贴了, 嘉立创的工艺这么差差差差差?

#430 Re: 全志 SOC » 关于 Gparted进行SD卡分区问题 » 2019-06-20 19:40:25

可能依赖别的软件:

sudo apt-get install e2fsprogs

#431 Re: 全志 SOC » f1c100s在bootloader里如何把app的bin文件拷贝至内存0x80000000处运行? » 2019-06-20 19:37:57

1.上电初始化 spi 控制器,
2. 初始化ddr,
3. 把代码从flash拷贝到ddr上
4 .跳转运行。

	AREA WB_INIT, CODE, READONLY
		
USR_MODE	EQU		0x10
FIQ_MODE	EQU		0x11
IRQ_MODE	EQU		0x12
SVC_MODE	EQU		0x13
ABT_MODE	EQU		0x17
UDF_MODE	EQU		0x1B
SYS_MODE	EQU		0x1F
	
I_BIT		EQU		0x80
F_BIT		EQU		0x40
	
IRQ_RAMStack EQU	0x81FA0000		
DRAM_Limit	EQU		0x81F00000		;DDR栈顶
RAM_Limit	EQU		0x4000 ;内存大小 32k
UND_Stack	EQU		RAM_Limit - 128
Abort_Stack	EQU		RAM_Limit - 256
IRQ_Stack	EQU		RAM_Limit - 512
FIQ_Stack	EQU		RAM_Limit - 768
SVC_Stack	EQU		RAM_Limit - 1024
USR_Stack	EQU		RAM_Limit - 2048

	ENTRY
;	EXPORT	Reset_Go
;	EXPORT 	Vector_Table
	IMPORT  ||Load$$ER_IROM1$$Length||
	IMPORT	||Image$$RW_RAM1$$RW$$Length||	

; 链接器产生代码链接运行位置	
_start
;	/* Boot head information for BROM */
	
	DCD 0xea000016
	DCB 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
	DCD 0, ||Load$$ER_IROM1$$Length||
;	DCD 0, __bootloader_size
	DCB 'S', 'P', 'L', 2
	DCD 0, 0
	DCD 0, 0, 0, 0, 0, 0, 0, 0
	DCD 0, 0, 0, 0, 0, 0, 0, 0	;/* 0x40 - boot params, 0x58 - fel boot type, 0x5c - dram size */

Vector_Table
	B		Reset_Go
	LDR     PC, Undefined_Addr
	LDR     PC, SWI_Addr
	LDR     PC, Prefetch_Addr
	LDR     PC, Abort_Addr
	DCD		0x0
	LDR     PC, IRQ_Addr
	LDR     PC, FIQ_Addr
	
	
Reset_Addr      DCD     Reset_Go
Undefined_Addr  DCD     Undefined_Handler
SWI_Addr        DCD     SWI_Handler1
Prefetch_Addr   DCD     Prefetch_Handler
Abort_Addr      DCD     Abort_Handler
				DCD		0
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler
	
Undefined_Handler
        B       Undefined_Handler
SWI_Handler1
        B       SWI_Handler1     
Prefetch_Handler
        B       Prefetch_Handler
Abort_Handler
        B       Abort_Handler
		IMPORT	arm32_do_irq
		PRESERVE8
IRQ_Handler
	ldr sp,=IRQ_RAMStack
	sub sp, sp, #72
	stmia sp, {r0 - r12}
	add r8, sp, #60
	stmdb r8, {sp, lr}^
	str lr, [r8, #0]
	mrs r6, spsr
	str r6, [r8, #4]
	str r0, [r8, #8]
	mov r0, sp
	bl arm32_do_irq
	ldmia sp, {r0 - lr}^
	mov r0, r0
	ldr lr, [sp, #60]
	add sp, sp, #72
	subs pc, lr, #4
	
FIQ_Handler
        B       FIQ_Handler

	EXPORT	__CodeAddr__
; 引入链接器产生符号,以确定代码运行位置,编译生成的大小
	IMPORT  ||Load$$ER_IROM1$$Base||
	IMPORT	||Load$$RW_RAM1$$RW$$Length||	
	IMPORT  ||Load$$ER_IROM2$$Length||
;	IMPORT  ||Image$$ER_IROM2$$Length||	
; 链接器产生代码链接运行位置
__CodeAddr__	DCD		||Load$$ER_IROM1$$Base||
__CodeSize__    DCD 	||Load$$ER_IROM1$$Length|| + ||Load$$ER_IROM2$$Length|| + ||Load$$RW_RAM1$$RW$$Length||

Reset_Go
;/* Save boot params to 0x00000040 */
	ldr r0, =0x01c20890
	ldr r1, = 0x11111111
	str r1,[r0]
	
	ldr r0, =0x01c20894
	ldr r1, = 0x11111111
	str r1,[r0]
	
	;ldr r0, =0x01c208a0
	;ldr r1, = 0xffffffff
	;str r1,[r0]
	
	ldr r0, =0x00000040
	str sp, [r0, #0]
	str lr, [r0, #4]
	mrs lr, cpsr
	str lr, [r0, #8]
	mrc p15, 0, lr, c1, c0, 0
	str lr, [r0, #12]
	mrc p15, 0, lr, c1, c0, 0
	str lr, [r0, #16]

;	/* Check boot type just for fel */
	mov r0, #0x0
	ldr r1, [r0, #8]
	ldr r2, =0x4c45462e
	cmp r1, r2
	bne lab1
;	ldr r1, =0x1
;	str r1, [r0, #0x58]
lab1	nop
;	/* Enter svc mode and mask interrupts */
	mrs r0, cpsr
	bic r0, r0, #0x1f
	orr r0, r0, #0xd3
	msr CPSR_cxsf, r0
	
;	/* Set vector to the low address */
	mrc p15, 0, r0, c1, c0, 0
	bic r0, #(1<<13)
	mcr p15, 0, r0, c1, c0, 0
	
;	/* Copy vector to the correct address */
	adr r0, Vector_Table
	mrc p15, 0, r2, c1, c0, 0
	ands r2, r2, #(1 << 13)
	ldreq r1, =0x00000000
	ldrne r1, =0xffff0000
;	mcr p15, 0, r2, c1, c0, 0
	ldmia r0!, {r2-r8, r10}
	stmia r1!, {r2-r8, r10}
	ldmia r0!, {r2-r8, r10}
	stmia r1!, {r2-r8, r10}
	
	IMPORT	sys_clock_init
	IMPORT	sys_dram_init
	IMPORT	sys_spi_flash_init
	IMPORT	sys_spi_flash_read
	IMPORT	sys_spi_flash_exit
	IMPORT	memcpy
	IMPORT	memset
	IMPORT	MMU_Init
		
	PRESERVE8
;	/* Boot speed up, leave slower sram */
	adr r0, _start
	ldr r1, =_start
	cmp r0, r1
	
	beq _speedup
	bl sys_dram_init
	bl sys_clock_init
	bl sys_spi_flash_init
	bl MMU_Init	
	
	ldr r0,=0x00
	ldr r1,__CodeAddr__
	ldr r2,__CodeSize__
	bl sys_spi_flash_read
;	bl sys_spi_flash_exit
_speedup    	
	nop
	
	MSR	CPSR_c, #UDF_MODE :OR: I_BIT :OR: F_BIT
	LDR	SP, =UND_Stack + DRAM_Limit
	
	MSR	CPSR_c, #ABT_MODE :OR:	I_BIT :OR: F_BIT
	LDR	SP, =Abort_Stack + DRAM_Limit

	MSR	CPSR_c, #IRQ_MODE :OR: I_BIT :OR: F_BIT
	LDR     SP, =IRQ_Stack + DRAM_Limit

	MSR	CPSR_c, #FIQ_MODE :OR: I_BIT :OR: F_BIT
	LDR     SP, =FIQ_Stack + DRAM_Limit

	MSR	CPSR_c, #SYS_MODE :OR: I_BIT :OR: F_BIT
	LDR     SP, =USR_Stack + DRAM_Limit

	MSR	CPSR_c, #SVC_MODE :OR: I_BIT :OR: F_BIT
	
	LDR     SP, =SVC_Stack + DRAM_Limit

	MRS r1, CPSR
;		BIC r1, #0x1f
;		ORR r1, #0x7f;进入IRQ模式
	AND r1, #0x7f;允许IRQ中断
	MSR CPSR_c,r1
	                                      
;	MRC	p15, 0, r0 , c1, c0   	; r0 := cp15 register 1
;	BIC r0, r0, #0x2000			; Clear bit13 in r1
;	MCR p15, 0, r0 , c1, c0     ; cp15 register 1 := r0
	
	IMPORT	__main	
	adr r0, _start
	ldr r1, =_start
	cmp r0, r1
	bne _NoDdr
	bl sys_clock_init
	bl sys_spi_flash_init
	bl MMU_Init	
_NoDdr	
	 LDR     R0, =__main
     BX      R0
;	B __main
	end

#432 Re: 全志 SOC » F1C100S PE11 CLK_OUT输出时钟问题 » 2019-06-15 10:10:30

Quotation 说:

CSI_CLK的意思不是摄像头MCLK,是芯片内CSI功能的时钟。
摄像头MCLK我是用F1C100s的PWM代替有源晶振,PE12(PWM0)调成12M输出,妥妥的。

请教这个如何实现呢?

#433 Re: 全志 SOC » F1C100S PE11 CLK_OUT输出时钟问题 » 2019-06-14 15:34:42

引脚复用应该也设置了吧,最好贴一下代码分析

#438 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 买了个MICROMAKE LCD光固化打印机,打印whycan.cn网址测试了一下精度很高 » 2019-06-06 22:45:17

紫外光是装哪里?装在最顶上?然后照射下来吗

就是一个换成紫外光背光的LCD?这个LCD是怎样的?

没见过这种装置,想象不出来如何操作的

#439 Re: 全志 SOC » 全志又发马甲了 » 2019-06-06 17:06:09

zxfk8440 说:

工控会开源的,4.9也会有的

这么确定,大神你是全志内部员工?

#440 Re: 全志 SOC » 荔枝派F1C100S RAM空间占用问题 » 2019-06-06 17:05:08

去掉一些不必要的驱动和文件系统,把kernel变小,可以省出一些Text段占用的RAM

#441 Re: 全志 SOC » JTAG 调试 H3 » 2019-06-04 14:24:57

有的,本站就有很多 jlink 调试v3s, f1c100s的帖子,搜一下

#442 Re: 全志 SOC » V3S驱动Lt7381时序还是不对 » 2019-06-03 14:25:55

找块正常的板子,逻辑分析仪抓时序对比

#444 Re: 全志 SOC » V3s 从flash启动串口打印乱码 » 2019-05-29 19:41:30

用逻辑分析仪抓数据,然后用不同的波特率解析,看到底是哪个波特率

#446 Re: 全志 SOC » 全志R11有人用过吗? » 2019-05-28 09:28:12

全志已经不是当年的全志了,
倒是把当年的诺基亚学得如出一辙!

#454 Re: 全志 SOC » f1c100s 的串口怎么开启? » 2019-05-22 08:28:49

设备树里面把 uart1  uart2 配置就可以了

#455 Re: 全志 SOC » 成功打响在f1c100s运行go程序的第一炮 » 2019-05-20 08:58:59

大家都别学了,我有点跟不上进度了。

#456 Re: 全志 SOC » f1c100s调起4.3寸800x480液晶屏 » 2019-05-16 21:54:06

u-boot不用改, 自动识别 64M DRAM ?

#458 Re: 全志 SOC » 感谢华嵌HQEmbed赠送的 漂亮高颜值S3 开发板 (底板 + 核心板) » 2019-05-14 13:45:34

zhenfanhei 说:

@smartcar, 没有啊,f1c200s是16块多, v3s/s3是27块吧
@晕哥, 啊啊,我以为f1c200s已经跑起来了呢,

S3L 我记得22元未税,V3s也差不多这个价格。

#459 Re: 全志 SOC » 感谢华嵌HQEmbed赠送的 漂亮高颜值S3 开发板 (底板 + 核心板) » 2019-05-14 11:55:32

zhenfanhei 说:

@smartcar,要贵个7块左右

那价格很接近 V3s/S3L了,这样感觉性价比没有 f1c100s好

#460 Re: 全志 SOC » 感谢华嵌HQEmbed赠送的 漂亮高颜值S3 开发板 (底板 + 核心板) » 2019-05-14 10:03:36

zhenfanhei 说:

100颗 f1c100s   100颗f1c200s芯片到了晒晒,PCB在华强pcb做的,四层板,邮票孔嘉立创说不能做4边的,比较郁闷,华强贵了150块钱
https://whycan.cn/files/members/428/f1c200s.png

不错, 强势围观,  f1c200s 比 f1c100s  贵多少钱?

#461 Re: 全志 SOC » 荔枝派nano(f1c100s)的SPI-Flash系统编译创建全过程 » 2019-05-14 09:43:31

小王子&木头人 说:
jiangming1399 说:
小王子&木头人 说:

你们用16Mflash可以成功reboot吗

不行……

主线linux spiflash能不能重启

确实不能重启, 不过和 flash 根文件系统没有关系。

我用 initramfs 根文件系统也一样:

# reboot
# Stopping network: OK
Stopping klogd: OK
Stopping syslogd: OK
umount: can't unmount /: Invalid argument
The system is going down NOW!
Sent SIGTERM to all processes


Sent SIGKILL to all processes
[  894.514832] reboot: Restarting system
[  895.514598] Reboot failed -- System halted







arch/arm/kernel/reboot.c

/*
 * Restart requires that the secondary CPUs stop performing any activity
 * while the primary CPU resets the system. Systems with a single CPU can
 * use soft_restart() as their machine descriptor's .restart hook, since that
 * will cause the only available CPU to reset. Systems with multiple CPUs must
 * provide a HW restart implementation, to ensure that all CPUs reset at once.
 * This is required so that any code running after reset on the primary CPU
 * doesn't have to co-ordinate with other CPUs to ensure they aren't still
 * executing pre-reset code, and using RAM that the primary CPU's code wishes
 * to use. Implementing such co-ordination would be essentially impossible.
 */
void machine_restart(char *cmd)
{
        local_irq_disable();
        smp_send_stop();

        if (arm_pm_restart)
                arm_pm_restart(reboot_mode, cmd);
        else
                do_kernel_restart(cmd);

        /* Give a grace period for failure to restart of 1s */
        mdelay(1000);

        /* Whoops - the platform was unable to reboot. Tell the user! */
        printk("Reboot failed -- System halted\n");
        while (1);
}

#462 Re: 全志 SOC » 买两片 W25M512JVFIQ 测试一下 » 2019-05-14 08:59:22

wu150 说:

太折腾吧花那么多时间

没办法, 客户指定要用这种 spi nor flash, 32M字节的又小了, 只能硬着头皮上 64M的。

#463 Re: 全志 SOC » 买两片 W25M512JVFIQ 测试一下 » 2019-05-13 17:51:01

发现主线上面并没有 W25M512 的补丁, 代码里面并没有适配这个芯片。

哪怕 最新的 linux 5.1 也没有关于 die 切换的代码

https://github.com/torvalds/linux/blob/v5.1/include/linux/mtd/spi-nor.h
https://github.com/torvalds/linux/blob/v5.1/drivers/mtd/spi-nor/spi-nor.c




不知道这个能不能用上:
https://github.com/ya-mouse/openbmc-target/blob/master/aspeed/patches-3.18/0006-Add-various-MTD-SPI-chips.patch

From c7025568f83800de384c457557169e44740dc8f7 Mon Sep 17 00:00:00 2001
From: "Anton D. Kachalov" <mouse@yandex-team.ru>
Date: Tue, 24 May 2016 19:36:35 +0300
Subject: [PATCH 06/14] Add various MTD SPI chips

Signed-off-by: Anton D. Kachalov <mouse@yandex-team.ru>
---
 drivers/mtd/spichips/Kconfig     |   94 ++++
 drivers/mtd/spichips/Makefile    |   18 +
 drivers/mtd/spichips/astspi.c    |  367 +++++++++++++
 drivers/mtd/spichips/atmel.c     |  133 +++++
 drivers/mtd/spichips/default.c   |  106 ++++
 drivers/mtd/spichips/generic.c   | 1052 ++++++++++++++++++++++++++++++++++++++
 drivers/mtd/spichips/intels33.c  |   96 ++++
 drivers/mtd/spichips/m25pxx.c    |  121 +++++
 drivers/mtd/spichips/macronix.c  |  208 ++++++++
 drivers/mtd/spichips/micron.c    |  104 ++++
 drivers/mtd/spichips/spansion.c  |  103 ++++
 drivers/mtd/spichips/spiaccess.c |  433 ++++++++++++++++
 drivers/mtd/spichips/spiflash.h  |  178 +++++++
 drivers/mtd/spichips/spimtd.c    |  241 +++++++++
 drivers/mtd/spichips/spireg.c    |  180 +++++++
 drivers/mtd/spichips/winbond.c   |   98 ++++
 16 files changed, 3532 insertions(+)
 create mode 100644 drivers/mtd/spichips/Kconfig
 create mode 100644 drivers/mtd/spichips/Makefile
 create mode 100644 drivers/mtd/spichips/astspi.c
 create mode 100644 drivers/mtd/spichips/atmel.c
 create mode 100644 drivers/mtd/spichips/default.c
 create mode 100644 drivers/mtd/spichips/generic.c
 create mode 100644 drivers/mtd/spichips/intels33.c
 create mode 100644 drivers/mtd/spichips/m25pxx.c
 create mode 100644 drivers/mtd/spichips/macronix.c
 create mode 100644 drivers/mtd/spichips/micron.c
 create mode 100644 drivers/mtd/spichips/spansion.c
 create mode 100644 drivers/mtd/spichips/spiaccess.c
 create mode 100644 drivers/mtd/spichips/spiflash.h
 create mode 100644 drivers/mtd/spichips/spimtd.c
 create mode 100644 drivers/mtd/spichips/spireg.c
 create mode 100644 drivers/mtd/spichips/winbond.c

diff --git a/drivers/mtd/spichips/Kconfig b/drivers/mtd/spichips/Kconfig
new file mode 100644
index 0000000..c5e5a4c
--- /dev/null
+++ b/drivers/mtd/spichips/Kconfig
@@ -0,0 +1,94 @@
+# drivers/mtd/chips/Kconfig
+# $Id: Kconfig,v 1.18 2005/11/07 11:14:22 gleixner Exp $
+
+menu "SPI Flash chip drivers"
+	depends on MTD!=n
+
+config MTD_SPI
+	bool "Enable MTD support on SPI devices"
+	depends on MTD
+	help
+	  Select this if you want to access SPI flash devices via MTD
+
+config MTD_SPI_SPANSION
+	bool "Spansion SPI devices Support"
+	depends on MTD_SPI
+	help
+	  Select this if you want to use Spansion SPI devices
+
+config MTD_SPI_MACRONIX
+	bool "Macronix SPI devices Support"
+	depends on MTD_SPI
+	help
+	  Select this if you want to use Macronix SPI devices
+
+config MTD_SPI_INTEL_S33
+	bool "Intel S33 SPI devices Support"
+	depends on MTD_SPI
+	help
+	  Select this if you want to use Intel S33 SPI devices
+
+config MTD_SPI_WINBOND
+	bool "Winbond SPI devices Support"
+	depends on MTD_SPI
+	help
+	  Select this if you want to use Winbond SPI devices
+
+config MTD_SPI_AT
+	bool "Atmel SPI devices Support"
+	depends on MTD_SPI
+	help
+	  Select this if you want to use Atmel SPI devices
+
+config MTD_SPI_ST
+	bool "ST Micro SPI devices Support"
+	depends on MTD_SPI
+	help
+	  Select this if you want to use ST Microelectronics SPI devices
+
+config MTD_SPI_NUMONYX
+	bool "Numonyx SPI devices Support"
+	depends on MTD_SPI
+	help
+	  Select this if you want to use Numonyx SPI devices
+
+config MTD_SPI_MICRON
+	bool "Numonyx SPI devices Support"
+	depends on MTD_SPI
+	help
+	  Select this if you want to use Micron SPI devices
+
+config MTD_SPI_DEFAULT
+	bool "Support for SPI Devices not supporting ReadID"
+	depends on MTD_SPI
+	help
+	   Select this if the SPI device on your board does not SPI ReadID Command
+
+config DEFAULT_SPI_NAME  
+	string "Default SPI Name"
+	depends on MTD_SPI && MTD_SPI_DEFAULT
+	default "default"
+	help
+	   Name of the SPI Device that does not support ReadID 
+
+config DEFAULT_SPI_SIZE
+	int "Default SPI Size in Bytes"
+	depends on MTD_SPI && MTD_SPI_DEFAULT
+	default "65536"
+	help
+	   Chip Size of the SPI Device that does not support ReadID 
+
+config DEFAULT_SPI_ERASE_SIZE
+	int "Default SPI Erase Block Size in Bytes"
+	depends on MTD_SPI && MTD_SPI_DEFAULT
+	default "65536"
+	help
+	   Erase Block Size of the SPI Device that does not support ReadID 
+
+config MTD_AST_SPI
+	bool "AST SOC SPI Flash Controller"
+	depends on MTD_SPI
+	help
+		If you are using SPI device on AST SOC, select Y
+
+endmenu
diff --git a/drivers/mtd/spichips/Makefile b/drivers/mtd/spichips/Makefile
new file mode 100644
index 0000000..b30a452
--- /dev/null
+++ b/drivers/mtd/spichips/Makefile
@@ -0,0 +1,18 @@
+#
+# linux/drivers/spichips/Makefile
+#
+obj-$(CONFIG_MTD_SPI)		+= spimtd.o spiaccess.o spireg.o generic.o
+
+obj-$(CONFIG_MTD_SPI_ST)   	+= m25pxx.o
+obj-$(CONFIG_MTD_SPI_SPANSION) += spansion.o
+obj-$(CONFIG_MTD_SPI_MACRONIX) += macronix.o
+obj-$(CONFIG_MTD_SPI_AT)   	+= atmel.o
+obj-$(CONFIG_MTD_SPI_INTEL_S33) += intels33.o
+obj-$(CONFIG_MTD_SPI_WINBOND) += winbond.o
+obj-$(CONFIG_MTD_SPI_MICRON) += micron.o
+obj-$(CONFIG_MTD_SPI_NUMONYX) += micron.o
+
+# The default driver  should be the last in the list of suppported devices
+obj-$(CONFIG_MTD_SPI_DEFAULT)   += default.o
+
+obj-$(CONFIG_MTD_AST_SPI)   += astspi.o
diff --git a/drivers/mtd/spichips/astspi.c b/drivers/mtd/spichips/astspi.c
new file mode 100644
index 0000000..a0dc9d4
--- /dev/null
+++ b/drivers/mtd/spichips/astspi.c
@@ -0,0 +1,367 @@
+/*
+ * (C) Copyright 2009
+ * American Megatrends Inc.
+ *
+ * SPI flash controller driver for the AST SoC
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include "spiflash.h"
+
+#define AST_FMC_REG_BASE		AST_FMC_VA_BASE /* 0x1E620000 */
+#define AST_FMC_FLASH_CTRL_REG		0x00
+
+#define AST_FMC_CE0_CTRL_REG		0x10
+#define AST_FMC_CTRL_REG_SIZE           0x04 
+
+#define AST_SPI_CMD_MASK		0x00FF0000 /* bit[23:16] */
+#define AST_SPI_CMD_SHIFT		16
+
+#define AST_SPI_CLOCK_MASK		0x00000F00 /* bit[11:8] */
+#define AST_SPI_CLOCK_SHIFT		8
+
+#define AST_SPI_DUMMY_MASK		0x000000C0 /* bit[7:6] */
+#define AST_SPI_DUMMY_0			0x00000000
+#define AST_SPI_DUMMY_1			0x00000040
+#define AST_SPI_DUMMY_2			0x00000080
+#define AST_SPI_DUMMY_3			0x000000C0
+
+#define AST_SPI_DATA_SINGLE		0x00000000
+#define AST_SPI_DATA_DUAL		0x00000008
+#define AST_SPI_DUAL_IO		0x00000002
+#define AST_SPI_FULL_DUAL_IO		0x00000003
+#define AST_SPI_DATA_MASK		7
+#define AST_SPI_DUAL_IO_SHIFT		28
+
+#define AST_SPI_CE_LOW			0x00000000
+#define AST_SPI_CE_HI			0x00000004
+
+#define AST_SPI_CMD_MODE_MASK		0x00000007 /* bit[2:0] */
+#define AST_SPI_CMD_MODE_NORMAL		0x00000000
+#define AST_SPI_CMD_MODE_FAST		0x00000001
+#define AST_SPI_CMD_MODE_WRITE		0x00000002
+#define AST_SPI_CMD_MODE_USER		0x00000003
+
+#define SPI_FAST_READ_CMD		0x0B
+#define SPI_DREAD_CMD		0x3B
+#define SPI_2READ_CMD		0xBB
+
+extern unsigned long ractrends_spiflash_flash_size[MAX_SPI_BANKS];
+static int *g_fast_read = 0;
+
+static void reset_flash(int bank)
+{
+	uint32_t reg;
+	uint32_t ctrl_reg;
+
+        // bank = 0,CE0 (0x10) ; bank = 1,CE1 (0x14) ; bank = 2,CE2 (0x18)
+        ctrl_reg = AST_FMC_CE0_CTRL_REG + (bank * AST_FMC_CTRL_REG_SIZE);
+	
+	reg = ioread32((void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+	if (*g_fast_read == 3)//2xI/O Read
+	{
+		reg &= ~(AST_SPI_CMD_MASK | AST_SPI_DUMMY_MASK | AST_SPI_CMD_MODE_MASK);
+		reg |= (SPI_2READ_CMD << AST_SPI_CMD_SHIFT) | AST_SPI_DUMMY_1 | AST_SPI_CE_LOW | AST_SPI_CMD_MODE_FAST | (AST_SPI_FULL_DUAL_IO << AST_SPI_DUAL_IO_SHIFT);
+	}
+	else if (*g_fast_read == 2)//Dual Read
+	{
+		reg &= ~(AST_SPI_CMD_MASK | AST_SPI_DUMMY_MASK | AST_SPI_CMD_MODE_MASK);
+		reg |= (SPI_DREAD_CMD << AST_SPI_CMD_SHIFT) | AST_SPI_DUMMY_1 | AST_SPI_CE_LOW | AST_SPI_CMD_MODE_FAST | (AST_SPI_DUAL_IO << AST_SPI_DUAL_IO_SHIFT);			
+	}
+	else if (*g_fast_read == 1)//Fast Read
+	{
+		reg &= ~(AST_SPI_CMD_MASK | AST_SPI_DUMMY_MASK | AST_SPI_CMD_MODE_MASK);
+		reg |= (SPI_FAST_READ_CMD << AST_SPI_CMD_SHIFT) | AST_SPI_DUMMY_1 | AST_SPI_CE_LOW | AST_SPI_CMD_MODE_FAST;
+	}
+	else
+	{
+		reg &= (~AST_SPI_CMD_MODE_MASK);
+		reg |= (AST_SPI_CE_LOW | AST_SPI_CMD_MODE_NORMAL);
+	}
+	iowrite32(reg, (void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+	
+}
+
+static void reset_iomode (int bank)
+{
+	uint32_t reg;
+	uint32_t ctrl_reg;
+
+	// bank = 0,CE0 (0x10) ; bank = 1,CE1 (0x14) ; bank = 2,CE2 (0x18)
+	ctrl_reg = AST_FMC_CE0_CTRL_REG + (bank * AST_FMC_CTRL_REG_SIZE);
+
+	reg = ioread32((void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+	reg &= ~(AST_SPI_CMD_MASK | AST_SPI_DUMMY_MASK | (AST_SPI_DATA_MASK << AST_SPI_DUAL_IO_SHIFT));
+
+	if (*g_fast_read == 2)//Dual Read
+		reg |= (AST_SPI_DUAL_IO << AST_SPI_DUAL_IO_SHIFT);		
+	else if (*g_fast_read == 3)//2xI/O Read
+		reg |= (AST_SPI_FULL_DUAL_IO << AST_SPI_DUAL_IO_SHIFT);
+		
+	iowrite32(reg, (void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+
+	return;
+}
+
+static void chip_select_active(int bank)
+{
+	uint32_t reg;
+	uint32_t ctrl_reg;
+
+        // bank = 0,CE0 (0x10) ; bank = 1,CE1 (0x14) ; bank = 2,CE2 (0x18)
+        ctrl_reg = AST_FMC_CE0_CTRL_REG + (bank * AST_FMC_CTRL_REG_SIZE);
+
+	reg = ioread32((void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+	reg &= (~(AST_SPI_CMD_MODE_MASK | (AST_SPI_DATA_MASK << AST_SPI_DUAL_IO_SHIFT)) );
+	reg |= (AST_SPI_CE_LOW | AST_SPI_CMD_MODE_USER);
+	iowrite32(reg, (void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+}
+
+static void chip_select_deactive(int bank)
+{
+	uint32_t reg;
+	uint32_t ctrl_reg;
+
+        // bank = 0,CE0 (0x10) ; bank = 1,CE1 (0x14) ; bank = 2,CE2 (0x18)
+        ctrl_reg = AST_FMC_CE0_CTRL_REG + (bank * AST_FMC_CTRL_REG_SIZE);
+
+	reg = ioread32((void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+	reg &= (~(AST_SPI_CMD_MODE_MASK | (AST_SPI_DATA_MASK << AST_SPI_DUAL_IO_SHIFT)) );
+	reg |= (AST_SPI_CE_HI | AST_SPI_CMD_MODE_USER);
+	iowrite32(reg, (void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+}
+
+static int astspiflash_transfer(int bank, unsigned char *cmd, int cmdlen, SPI_DIR dir, unsigned char *data, unsigned long datalen)
+{
+	ulong base;
+	int i;
+	ulong offset = 0;
+	
+	for(i = 0; i < bank; i++) 
+	{
+		offset += ractrends_spiflash_flash_size[i];
+	}
+
+	base = AST_SPI_FLASH_VA_BASE + offset;
+
+	chip_select_active(bank);
+
+	if (cmd[0] == 0xBB)
+	{
+		*((volatile unsigned char *) base) = cmd[0];
+		reset_iomode(bank);
+		for (i = 1; i < cmdlen; i ++)
+			*((volatile unsigned char *) base) = cmd[i];
+	}
+	else if (cmd[0] == 0x3B)
+	{
+		for (i = 0; i < cmdlen; i ++)
+			*((volatile unsigned char *) base) = cmd[i];
+		reset_iomode(bank);			
+	}
+	else
+	{
+	/* issue command */
+	for (i = 0; i < cmdlen; i ++)
+		*((volatile unsigned char *) base) = cmd[i];
+	}
+
+	if (dir == SPI_WRITE) {
+		/* write data to flash */
+		for (i = 0; i < datalen; i ++) {
+			*((volatile unsigned char *) base) = data[i];
+		}
+	} else if (dir == SPI_READ) {
+		/* read data from flash */
+		for (i = 0; i < datalen; i ++) {
+			data[i] = ((volatile unsigned char *) base)[i];
+		}
+	}
+
+	chip_select_deactive(bank);
+
+
+	reset_flash(bank);
+	return 0;
+}
+
+static const unsigned char clock_selection_table[] = {
+	0x0F, /* 1 */
+	0x07, /* 2 */
+	0x0E, /* 3 */
+	0x06, /* 4 */
+	0x0D, /* 5 */
+	0x05, /* 6 */
+	0x0C, /* 7 */
+	0x04, /* 8 */
+	0x0B, /* 9 */
+	0x03, /* 10 */
+	0x0A, /* 11 */
+	0x02, /* 12 */
+	0x09, /* 13 */
+	0x01, /* 14 */
+	0x08, /* 15 */
+	0x00, /* 16 */
+};
+
+static int astspiflash_configure_clock(int bank, unsigned int clock)
+{
+	uint32_t reg;
+	uint32_t cpu_clock;
+	uint32_t clock_divisor;
+	uint32_t ctrl_reg;
+#if defined(CONFIG_SOC_AST2500) || defined(CONFIG_SOC_AST2530)
+	uint32_t cpu_ratio;
+	uint32_t axi_ratio;
+#endif		
+        // bank = 0,CE0 (0x10) ; bank = 1,CE1 (0x14) ; bank = 2,CE2 (0x18)
+        ctrl_reg = AST_FMC_CE0_CTRL_REG + (bank * AST_FMC_CTRL_REG_SIZE);
+
+	/* according to AST spec, clock of SPI controller can not exceed 50M Hz */
+	if (clock > (50 * 1000000))
+		clock = 50 * 1000000;
+
+	/* read CPU clock rate and CPU/AHB ratio from SCU */
+	reg = ioread32((void __iomem *)SCU_HW_STRAPPING_REG);
+	
+	#if defined(CONFIG_SOC_AST2500) || defined(CONFIG_SOC_AST2530)
+	cpu_ratio = 2;
+
+	switch ((reg & 0x00000E00) >> 9) {
+	case 0x01:
+		axi_ratio = 2;
+		break;
+	case 0x02:
+		axi_ratio = 3;
+		break;
+	case 0x03:
+		axi_ratio = 4;
+		break;		
+	case 0x04:
+		axi_ratio = 5;
+		break;		
+	case 0x05:
+		axi_ratio = 6;
+		break;		
+	case 0x06:
+		axi_ratio = 7;
+		break;		
+	case 0x07:
+		axi_ratio = 8;
+		break;		
+	default:
+		axi_ratio = 2;
+		break;
+	}
+
+	cpu_clock = 792 * 1000000;//Default H-PLL value
+	cpu_clock = cpu_clock / cpu_ratio / axi_ratio;	
+	#else
+	switch ((reg & 0x00000300) >> 8) {
+	case 0x00:
+		cpu_clock = 384 * 1000000;
+		break;
+	case 0x01:
+		cpu_clock = 360 * 1000000;
+		break;
+	case 0x02:
+		cpu_clock = 336 * 1000000;
+		break;
+	case 0x03:
+		cpu_clock = 408 * 1000000;
+		break;
+	default:
+		cpu_clock = 408 * 1000000;
+	}
+
+	switch ((reg & 0x00000C00) >> 10) {
+	case 0x01:
+		cpu_clock /= 2;
+		break;
+	case 0x02:
+		cpu_clock /= 4;
+		break;
+	case 0x03:
+		cpu_clock /= 3;
+		break;
+	}
+	#endif
+
+	clock_divisor = 1;
+	while ((cpu_clock / clock_divisor) > clock) {
+		clock_divisor ++;
+		if (clock_divisor == 16)
+			break;
+	}
+
+	reg = ioread32((void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+	reg &= ~AST_SPI_CLOCK_MASK;
+	reg |= (clock_selection_table[clock_divisor - 1] << AST_SPI_CLOCK_SHIFT);
+	iowrite32(reg, (void __iomem *)AST_FMC_REG_BASE + ctrl_reg);
+
+	return 0;
+}
+
+struct spi_ctrl_driver astspi_driver = {
+	.name = "astspiflash",
+	.module = THIS_MODULE,
+	.max_read = (64 * 1024 * 1024), /* 32 MB */
+	#ifdef CONFIG_FLASH_OPERATION_MODE_MASK
+	.operation_mode_mask = CONFIG_FLASH_OPERATION_MODE_MASK,
+	#else
+	.operation_mode_mask = 0x00010003, //Default
+	#endif
+	.fast_read = 1,
+	.fast_write = 0,	
+	.spi_transfer = astspiflash_transfer,
+	.spi_burst_read = astspiflash_transfer,
+	.spi_configure_clock = astspiflash_configure_clock,
+};
+
+static int astspi_init(void)
+{
+	sema_init(&astspi_driver.lock, 1);
+	register_spi_ctrl_driver(&astspi_driver);
+
+	g_fast_read = &astspi_driver.fast_read;
+
+	reset_flash(0);	// CE0
+
+	reset_flash(1);	// CE1
+
+	reset_flash(2);	// CE2
+	#if !defined(CONFIG_SOC_AST2500) && !defined(CONFIG_SOC_AST2530)
+	reset_flash(3);	// CE3
+	#endif
+
+	return 0;
+}
+
+static void astspi_exit(void)
+{
+	unregister_spi_ctrl_driver(&astspi_driver);
+}
+
+module_init(astspi_init);
+module_exit(astspi_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("AST SOC SPI flash controller driver");
diff --git a/drivers/mtd/spichips/atmel.c b/drivers/mtd/spichips/atmel.c
new file mode 100644
index 0000000..a7cfddb
--- /dev/null
+++ b/drivers/mtd/spichips/atmel.c
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifdef __UBOOT__	
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+/* Name, ID1, ID2 , Size, Clock, Erase regions, address mode,{ Offset, Erase Size, Erase Block Count } */
+/* address mode:  0x00 -3 byte address
+			 	0x01 - 4 byte address	
+			 	0x02 - Low byte: 3 byte address, High byte: 4 byte address*/
+static struct spi_flash_info atmel_data [] = 
+{
+	/* Atmel 26F 64K Sectors */
+	{ "Atmel at26f004"   , 0x1F, 0x0004, 0x00010001, 0x100000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 8   },} },
+
+	/* Atmel 25DF 64K Sectors */
+	{ "Atmel at25df041a" , 0x1F, 0x0144, 0x00010001, 0x100000 , 70 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 8   },} },
+
+	/* Atmel 26DF 64K Sectors */
+	{ "Atmel at26df081a" , 0x1F, 0x0145, 0x00010001, 0x100000 , 70 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 16  },} },
+	{ "Atmel at26df161a" , 0x1F, 0x0146, 0x00010001, 0x200000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 32  },} },
+	{ "Atmel at26df161"  , 0x1F, 0x0046, 0x00010001, 0x200000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 32  },} },
+	{ "Atmel at26df321"  , 0x1F, 0x0047, 0x00010001, 0x400000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 64  },} },
+	{ "Atmel at25df321"  , 0x1F, 0x0147, 0x00010001, 0x400000 , 85 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 64  },} },
+};
+
+
+static
+int 
+atmel_probe(int bank,struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info)
+{
+	int retval;
+	unsigned char status;
+
+	retval =  spi_generic_probe(bank, ctrl_drv,chip_info,"atmel",atmel_data,ARRAY_SIZE(atmel_data));
+	if (retval == -1)
+		return retval;
+
+	if (spi_generic_read_status(bank,ctrl_drv,&status) < 0)
+	{
+		printk("atmel: Read SR Failed.Cannot Unprotect all sectors\n");
+		return retval;
+	}
+
+	/* If SRPL = 1 (Bit 7)and WP/ = 0 (Bit 4), then it is hardware locked */
+	if ((status & 0x80) && (!(status & 0x10)))
+	{
+		printk("atmel: Hardware Locked\n");
+		return retval;
+	}
+
+	/* Check if already unprotected */
+	if ((status & 0xC) == 0)
+		return retval;
+
+	/* if SRPL is set, we have to disable SRPL before unprotect */
+	if (status & 0x80)
+	{
+		if (spi_generic_write_status(bank,ctrl_drv,status& 0x7F) < 0)
+		{
+			printk("atmel: Clearing SRPL failed .Cannot Unprotect all sectors\n");
+			return retval;
+		}
+	}
+	
+	/* Unprotect all sectors */
+	if (spi_generic_write_status(bank,ctrl_drv,0x0) < 0)
+		printk("atmel: Unable to Unprotect all sectors\n");
+
+
+	return retval;
+}
+
+struct spi_chip_driver atmel_driver =
+{
+	.name 		= "atmel",
+	.module 	= THIS_MODULE,
+	.probe	 	= atmel_probe,
+	.erase_sector 	= spi_generic_erase,
+	.read_bytes	= spi_generic_read,
+	.write_bytes	= spi_generic_write,
+	/* Atmel supports individual protect and unprotect of sectors */
+	/* if needed implement the functions and add here */
+};
+
+int 
+atmel_init(void)
+{
+	sema_init(&atmel_driver.lock, 1);
+#ifdef __UBOOT__	/* MIPS */
+	atmel_driver.probe	 		= atmel_probe;
+	atmel_driver.erase_sector 	= spi_generic_erase;
+	atmel_driver.read_bytes		= spi_generic_read;
+	atmel_driver.write_bytes	= spi_generic_write;
+#endif
+	register_spi_chip_driver(&atmel_driver);
+	return 0;
+}
+
+void 
+atmel_exit(void)
+{
+	sema_init(&atmel_driver.lock, 1);
+	unregister_spi_chip_driver(&atmel_driver);
+	return;
+}
+
+module_init(atmel_init);
+module_exit(atmel_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("MTD SPI driver for Atmel flash chips");
+
+#endif
diff --git a/drivers/mtd/spichips/default.c b/drivers/mtd/spichips/default.c
new file mode 100644
index 0000000..93f31d7
--- /dev/null
+++ b/drivers/mtd/spichips/default.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifdef __UBOOT__	
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+#ifndef CONFIG_DEFAULT_SPI_NAME  
+#define CONFIG_DEFAULT_SPI_NAME "Unknown SPI Device"
+#endif
+
+#ifndef CONFIG_DEFAULT_SPI_SIZE
+#define CONFIG_DEFAULT_SPI_SIZE 0
+#endif
+
+#ifndef CONFIG_DEFAULT_SPI_CLOCK
+#define CONFIG_DEFAULT_SPI_CLOCK (25 * 1000000)
+#endif
+
+#ifndef CONFIG_DEFAULT_SPI_ERASE_SIZE
+#define CONFIG_DEFAULT_SPI_ERASE_SIZE	(64 *1024)
+#endif
+
+
+/* This driver is called at end when all probe failed. Some chips don't support read id
+   commands and user can provide the information here */
+
+/* Name, ID1, ID2 , Size, Clock, Erase regions, address mode,{ Offset, Erase Size, Erase Block Count } */
+/* address mode:  0x00 -3 byte address
+			 	0x01 - 4 byte address	
+			 	0x02 - Low byte: 3 byte address, High byte: 4 byte address*/
+static struct spi_flash_info default_data [] = 
+{
+	{ CONFIG_DEFAULT_SPI_NAME , 0xFF, 0x0FFFF, 0x00010001, CONFIG_DEFAULT_SPI_SIZE , CONFIG_DEFAULT_SPI_CLOCK, 1, 0x00,
+			{{ 0, CONFIG_DEFAULT_SPI_ERASE_SIZE, CONFIG_DEFAULT_SPI_SIZE/CONFIG_DEFAULT_SPI_ERASE_SIZE },} },
+};
+
+static
+int 
+default_probe(int bank,struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info)
+{
+	memcpy(chip_info,&default_data[0],sizeof(struct spi_flash_info));
+
+	if (spi_generic_write_status(bank,ctrl_drv,0x0) < 0)
+		printk("%s: Unable to Unprotect all sectors\n",CONFIG_DEFAULT_SPI_NAME);
+	return 0;
+}
+
+struct spi_chip_driver default_driver =
+{
+	.name 		= "default",
+	.module 	= THIS_MODULE,
+	.probe	 	= default_probe,
+	.erase_sector 	= spi_generic_erase,
+	.read_bytes	= spi_generic_read,
+	.write_bytes	= spi_generic_write,
+};
+
+int 
+default_init(void)
+{
+	sema_init(&default_driver.lock, 1);
+#ifdef __UBOOT__	/* MIPS */
+	default_driver.probe	 		= default_probe;
+	default_driver.erase_sector 	= spi_generic_erase;
+	default_driver.read_bytes		= spi_generic_read;
+	default_driver.write_bytes	= spi_generic_write;
+#endif
+	register_spi_chip_driver(&default_driver);
+	return 0;
+}
+
+void 
+default_exit(void)
+{
+	sema_init(&default_driver.lock, 1);
+	unregister_spi_chip_driver(&default_driver);
+	return;
+}
+
+module_init(default_init);
+module_exit(default_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("MTD SPI driver for Default flash chips");
+
+#endif
diff --git a/drivers/mtd/spichips/generic.c b/drivers/mtd/spichips/generic.c
new file mode 100644
index 0000000..50a70f6
--- /dev/null
+++ b/drivers/mtd/spichips/generic.c
@@ -0,0 +1,1052 @@
+/*
+ * Copyright (C) 2007-2013 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifdef __UBOOT__
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+/* Flash opcodes. */
+#define	OPCODE_WREN		0x06	/* Write enable */
+#define	OPCODE_WRDI		0x04	/* Write disable*/
+#define	OPCODE_RDID		0x9F	/* Read JEDEC ID */
+#define	OPCODE_RDSR		0x05	/* Read status register */
+#define OPCODE_WRSR		0x01	/* Write status register */
+#define	OPCODE_READ		0x03	/* Read data bytes */
+#define	OPCODE_FAST_READ	0x0B	/* Read Fast read */
+#define	OPCODE_DREAD	0x3B	/* Dual Read Mode */
+#define	OPCODE_2READ	0xBB	/* 2 x I/O Read Mode */
+#define	OPCODE_PP		0x02	/* Page program */
+#define	OPCODE_SE		0xD8	/* Sector erase */
+#define OPCODE_DP		0xB9	/* Deep Power Down */
+#define	OPCODE_RES		0xAB	/* Read Electronic Signature */
+
+/* Status Register bits. */
+#define	SR_WIP			0x01	/* Write in progress */
+#define	SR_WEL			0x02	/* Write enable latch */
+#define	SR_BP0			0x04	/* Block protect 0 */
+#define	SR_BP1			0x08	/* Block protect 1 */
+#define	SR_BP2			0x10	/* Block protect 2 */
+#define	SR_SRWD			0x80	/* SR write protect */
+
+#define PROGRAM_PAGE_SIZE	256	/* Max Program Size */
+
+#define ADDR_16MB 		0x1000000
+#define CMD_MX25XX_EN4B		0xb7	/* Enter 4-byte address mode */
+#define CMD_MX25XX_EX4B		0xe9	/* Exit 4-byte address mode */
+
+
+#define ADDRESS_3BYTE	0x00
+#define ADDRESS_4BYTE	0x01
+#define ADDRESS_LO3_HI4_BYTE 0x02
+
+#define ADDRESS_DIE_LO3_HI4_BYTE 0x06
+#define ADDR_32MB 		0x2000000
+#define CMD_WX25XX_CS		0xc2	/* Die select */
+
+extern unsigned long ractrends_spiflash_flash_id[MAX_SPI_BANKS];
+
+static int wait_till_ready(int bank,struct spi_ctrl_driver *ctrl_drv);
+
+static
+int inline
+spi_error(int retval)
+{
+	printk("SPI Chip %s (%d) : Error (%d)\n",__FILE__,__LINE__,retval);
+	return retval;
+}
+
+static int
+spi_generic_read_flag_status(int bank, struct spi_ctrl_driver *ctrl_drv,unsigned char *status)
+{
+	int  retval;
+	u8 code = 0x70;
+
+	/* Issue Controller Transfer Routine */
+	retval = ctrl_drv->spi_transfer(bank,&code, 1,SPI_READ,status, 1);
+
+	if (retval < 0)
+		return spi_error(retval);
+
+	return 0;
+}
+
+
+
+int
+spi_generic_read_status(int bank, struct spi_ctrl_driver *ctrl_drv,unsigned char *status)
+{
+	int  retval;
+	u8 code = OPCODE_RDSR;
+
+	/* Issue Controller Transfer Routine */
+	retval = ctrl_drv->spi_transfer(bank,&code, 1,SPI_READ,status, 1);
+
+	if (retval < 0)
+		return spi_error(retval);
+
+	return 0;
+}
+
+int
+spi_generic_write_status(int bank,struct spi_ctrl_driver *ctrl_drv, unsigned char status)
+{
+	int retval;
+	u8 code = OPCODE_WRSR;
+
+	/* Send write enable */
+	spi_generic_write_enable(bank,ctrl_drv);
+
+	/* Issue Controller Transfer Routine */
+	retval = ctrl_drv->spi_transfer(bank,&code, 1,SPI_WRITE,&status, 1);
+	if (retval < 0) 
+		return spi_error(retval);
+
+	return 0;
+}
+
+
+int
+spi_generic_write_enable(int bank,struct spi_ctrl_driver *ctrl_drv)
+{
+	u8 code = OPCODE_WREN;
+	int retval;
+
+	/* Issue Controller Transfer Routine */
+	retval = ctrl_drv->spi_transfer(bank,&code, 1,SPI_NONE, NULL, 0);
+	if (retval < 0)
+		return spi_error(retval);
+	return 0;
+}
+
+int
+spi_generic_write_disable(int bank, struct spi_ctrl_driver *ctrl_drv)
+{
+	u8 code = OPCODE_WRDI;
+	int retval;
+
+	/* Issue Controller Transfer Routine */
+	retval = ctrl_drv->spi_transfer(bank,&code, 1,SPI_NONE, NULL, 0);
+	if (retval < 0)
+		return spi_error(retval);
+	return 0;
+}
+
+int spi_generic_select_die(int bank, u8 die_num, struct spi_ctrl_driver *ctrl_drv)
+{
+	int retval;
+	u8 command[2];
+
+	command[0] = CMD_WX25XX_CS;
+	command[1] = die_num;
+
+	/* Wait until finished previous command. */
+	if (wait_till_ready(bank,ctrl_drv))
+	{
+		return -1;
+	}
+
+	retval = ctrl_drv->spi_transfer(bank, command, 2, SPI_NONE, NULL, 0);
+
+	if (retval < 0)
+	{
+		printk ("Could not select die.\n");
+		return spi_error(retval);
+	}
+	return 0;
+}
+
+int enter_4byte_addr_mode(int bank, struct spi_ctrl_driver *ctrl_drv)
+{
+	//enable 32 MB Address mode
+	u8 code = CMD_MX25XX_EN4B;
+	int retval;
+
+	//printf("<ENTER> 4 BYTE\n");
+	/* Wait until finished previous command. */
+	if (wait_till_ready(bank,ctrl_drv))
+	{
+		return -1;
+	}
+
+
+	/* Issue Controller Transfer Routine */
+	if ((ractrends_spiflash_flash_id[bank] == 0x002019BA) || (ractrends_spiflash_flash_id[bank] == 0x002020BA) || (ractrends_spiflash_flash_id[bank] == 0x002021BA))
+		spi_generic_write_enable(bank,ctrl_drv);
+	retval = ctrl_drv->spi_transfer(bank, &code, 1, SPI_NONE, NULL, 0);
+	if ((ractrends_spiflash_flash_id[bank] == 0x002019BA) || (ractrends_spiflash_flash_id[bank] == 0x002021BA)) 
+		spi_generic_write_disable(bank,ctrl_drv);
+	if (retval < 0)
+	{
+		printk ("Could not Enter into 4-byte address mode\n");
+		return spi_error(retval);
+	}
+	return 0;
+}
+
+int exit_4byte_addr_mode(int bank, struct spi_ctrl_driver *ctrl_drv)
+{
+	//Disable 32 MB Address mode
+	u8 code = CMD_MX25XX_EX4B;
+	int retval;
+
+	//printf("<EXIT> 4 BYTE\n");
+	/* Wait until finished previous command. */
+	if (wait_till_ready(bank,ctrl_drv))
+	{
+		return -1;
+	}
+
+
+	/* Issue Controller Transfer Routine */
+	if ((ractrends_spiflash_flash_id[bank] == 0x002019BA) || (ractrends_spiflash_flash_id[bank] == 0x002020BA) || (ractrends_spiflash_flash_id[bank] == 0x002021BA)) 
+		spi_generic_write_enable(bank,ctrl_drv);
+	retval = ctrl_drv->spi_transfer(bank, &code, 1, SPI_NONE, NULL, 0);
+	if ((ractrends_spiflash_flash_id[bank] == 0x002019BA) || (ractrends_spiflash_flash_id[bank] == 0x002020BA) || (ractrends_spiflash_flash_id[bank] == 0x002021BA)) 
+		spi_generic_write_disable(bank,ctrl_drv);
+	if (retval < 0)
+	{
+		printk ("Could not Exit from 4-byte address mode\n");
+		return spi_error(retval);
+	}
+	return 0;
+}
+
+int spi_generic_extended_address(int bank, SPI_DIR dir, u8 addr, struct spi_ctrl_driver *ctrl_drv)
+{
+	int retval;
+
+	if (dir == SPI_READ)
+	{
+		u8 code = 0xC8;
+		u8 reg_data;
+
+		ctrl_drv->spi_transfer(bank, &code, 1, SPI_READ, &reg_data, 1);
+		retval = (int) reg_data;
+	}
+	else if (dir == SPI_WRITE)
+	{
+		u8 command[2];
+
+		command[0] = 0xC5;
+		command[1] = addr;
+		spi_generic_write_enable(bank, ctrl_drv);
+		ctrl_drv->spi_transfer(bank, command, 2, SPI_NONE, NULL, 0);
+		spi_generic_write_disable(bank, ctrl_drv);
+		retval = command[1];
+	}
+	else // SPI_NONE
+	{
+		retval = 0;
+	}
+
+	return retval;
+}
+
+// the function just for WINBOND W25Q256 only, always revise the extended address to the defalut
+int w25q256_force_extended_address(int bank, struct spi_ctrl_driver *ctrl_drv)
+{
+	int retval;
+	u8 code;
+	u8 reg_data;
+	u8 command[5];
+
+	code = 0xC8; // "Read Extended Address Register"
+	retval = ctrl_drv->spi_transfer(bank, &code, 1, SPI_READ, &reg_data, 1);
+	if (reg_data == 0x01)
+	{
+		spi_generic_write_enable(bank,ctrl_drv);
+		command[0] = 0xC5; // "Write Extended Address Register" with the force address 0x00
+		command[1] = command[2] = command[3] = command[4] = 0x00;
+		retval = ctrl_drv->spi_transfer(bank, command, 5, SPI_NONE, NULL, 0);
+		spi_generic_write_disable(bank,ctrl_drv);
+	}
+	return 0;
+}
+
+/* Define max times to check status register before we give up. */
+#define	MAX_READY_WAIT_COUNT	4000000
+
+static int
+wait_till_ready(int bank,struct spi_ctrl_driver *ctrl_drv)
+{
+	unsigned long  count;
+	unsigned char sr;
+
+	for (count = 0; count < MAX_READY_WAIT_COUNT; count++)
+	{
+		if (spi_generic_read_status(bank,ctrl_drv,&sr) < 0)
+		{
+			printk("Error reading SPI Status Register\n");
+			break;
+		}
+		else
+		{
+			if (!(sr & SR_WIP))
+				return 0;
+		}
+	}
+
+	printk("spi_generic: Waiting for Ready Failed\n");
+	return 1;
+}
+
+static int
+require_read_flag_status(int bank,struct spi_ctrl_driver *ctrl_drv)
+{
+	unsigned long count;
+	unsigned char sr;
+
+	for (count = 0; count < MAX_READY_WAIT_COUNT; count++)
+	{
+		if (spi_generic_read_flag_status(bank,ctrl_drv,&sr) < 0)
+		{
+			printk("Error reading SPI Status Register\n");
+			break;
+		}
+		else
+		{
+			if (sr & SR_SRWD)
+				return 0;
+		}
+	}
+
+	printk("spi_generic %s() : Waiting for Ready Failed\n", __func__);
+	return 1;
+}
+
+
+
+int
+spi_generic_erase(struct map_info *map, unsigned long sect_addr)
+{
+	struct spi_flash_private *priv=map->fldrv_priv;
+	int bank = map->map_priv_1;
+	struct spi_ctrl_driver *ctrl_drv = priv->ctrl_drv;	
+	int retval;
+	unsigned char command[5];
+	int cmd_size;	
+	u8 address32 = priv->address32;
+	//unsigned long flash_size = priv->size;
+	u8 had_switch_die = 0;
+    u8 pwr_up_mode = 0;
+	
+	down(&priv->chip_drv->lock);
+	
+	
+	/* Wait until finished previous command. */
+	if (wait_till_ready(bank,ctrl_drv))
+	{
+		up(&priv->chip_drv->lock);
+		return -1;
+	}
+
+	if (address32 == ADDRESS_DIE_LO3_HI4_BYTE) {
+		if(sect_addr>=ADDR_32MB){
+			spi_generic_select_die( bank, 1,ctrl_drv);
+			had_switch_die = 1;
+			sect_addr-=ADDR_32MB;
+		}
+	}
+
+    if (ractrends_spiflash_flash_id[bank] == 0x00EF1940)
+    {
+        u8 reg_data;
+
+        command[0] = 0x15; /* Read Status Register S23 ~ S16 */
+        cmd_size = 1;
+        retval = ctrl_drv->spi_transfer(bank,command, cmd_size ,SPI_READ, &reg_data, 1);
+        pwr_up_mode = (reg_data & 0x2)>>1; /* S17(ADP) field */
+    }
+
+	/* Logic for 4 byte address mode Enter */
+	if ( ((sect_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE )||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || pwr_up_mode)
+	{
+		retval = enter_4byte_addr_mode(bank, ctrl_drv);
+		if (retval < 0)
+		{
+			printk ("Unable to enter 4 byte address mode\n");
+			if(had_switch_die == 1)
+			{
+				spi_generic_select_die( bank, 0,ctrl_drv);
+			}
+			up(&priv->chip_drv->lock);
+			return spi_error(retval);
+		}
+	}
+
+	if (ractrends_spiflash_flash_id[bank]  == 0x00EF1940) w25q256_force_extended_address(bank, ctrl_drv);
+	if ((ractrends_spiflash_flash_id[bank]  == 0x002020BA) || (ractrends_spiflash_flash_id[bank]  == 0x002021BA) || (ractrends_spiflash_flash_id[bank]  == 0x00C21A20))
+		spi_generic_extended_address(bank, SPI_WRITE, (sect_addr & 0xFF000000) >> 24, ctrl_drv);
+
+	if ( (((sect_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || (address32 == ADDRESS_4BYTE)) || pwr_up_mode)
+	{
+		/* Set up command buffer. */
+		command[0] = OPCODE_SE;
+		if (ractrends_spiflash_flash_id[bank] == 0x00011902) command[0] = 0xDC; // ERASE command in 4byte mode [spansion only]
+		if (address32 == ADDRESS_DIE_LO3_HI4_BYTE) command[0] = 0xDC; // ERASE command in 4byte mode
+		command[1] = sect_addr >> 24;
+		command[2] = sect_addr >> 16;
+		command[3] = sect_addr >> 8;
+		command[4] = sect_addr;
+
+		cmd_size = 5;
+	}
+	else {
+		/* Set up command buffer. */
+		command[0] = OPCODE_SE;
+		command[1] = sect_addr >> 16;
+		command[2] = sect_addr >> 8;
+		command[3] = sect_addr;
+
+		cmd_size = 4;
+	}
+
+	/* Issue Controller Transfer Routine */
+	spi_generic_write_enable(bank,ctrl_drv); /* Send write enable */
+	retval = ctrl_drv->spi_transfer(bank,command, cmd_size ,SPI_NONE, NULL, 0);
+	spi_generic_write_disable(bank,ctrl_drv); /* Send write disable */
+
+	if (ractrends_spiflash_flash_id[bank] == 0x002020BA || ractrends_spiflash_flash_id[bank] == 0x002021BA)
+	{
+		/* requires the read flag status with at latest one byte. */
+		if (require_read_flag_status(bank,ctrl_drv))
+		{
+			up(&priv->chip_drv->lock);
+			return -1;
+		}
+	}
+
+	if (retval < 0)
+	{
+		//if 4 byte mode exit
+		if ( ((sect_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || pwr_up_mode)
+		{
+			retval = exit_4byte_addr_mode(bank, ctrl_drv);
+			if (retval < 0)
+			{
+				printk ("Unable to exit 4 byte address mode\n");
+			}
+		}
+
+		if (ractrends_spiflash_flash_id[bank] == 0x00EF1940) w25q256_force_extended_address(bank, ctrl_drv);
+		if ((ractrends_spiflash_flash_id[bank] == 0x002020BA) || (ractrends_spiflash_flash_id[bank] == 0x002021BA) || (ractrends_spiflash_flash_id[bank] == 0x00C21A20))
+			spi_generic_extended_address(bank, SPI_WRITE, 0x00, ctrl_drv);
+
+		if(had_switch_die == 1)
+		{
+			spi_generic_select_die( bank, 0,ctrl_drv);
+		}
+		up(&priv->chip_drv->lock);
+		return spi_error(retval);
+	}
+
+	if ( ((sect_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || pwr_up_mode)
+	{
+		retval = exit_4byte_addr_mode(bank, ctrl_drv);
+		if (retval < 0)
+		{
+			printk ("Unable to exit 4 byte address mode\n");
+		}
+	}
+
+	if (ractrends_spiflash_flash_id[bank] == 0x00EF1940) w25q256_force_extended_address(bank, ctrl_drv);
+	if ((ractrends_spiflash_flash_id[bank] == 0x002020BA) || (ractrends_spiflash_flash_id[bank] == 0x002021BA) || (ractrends_spiflash_flash_id[bank] == 0x00C21A20))
+		spi_generic_extended_address(bank, SPI_WRITE, 0x00, ctrl_drv);
+
+	if(had_switch_die == 1)
+	{
+		spi_generic_select_die( bank, 0,ctrl_drv);
+	}
+	up(&priv->chip_drv->lock);
+	return retval;
+}
+
+
+int
+spi_generic_read(struct map_info *map, loff_t addr, size_t bytes, unsigned char *buff)
+{
+	struct spi_flash_private *priv=map->fldrv_priv;
+	int bank = map->map_priv_1;
+	struct spi_ctrl_driver *ctrl_drv = priv->ctrl_drv;	
+	int retval = 0;
+	size_t transfer;
+	unsigned char command[6];
+	int cmd_size;
+	int  (*readfn)(int bank,unsigned char *,int , SPI_DIR, unsigned char *, unsigned long); //unsigned long);
+	int end_addr = (addr+bytes-1);	
+	u8 address32 = priv->address32;
+	//unsigned long flash_size = priv->size;
+	u8 had_switch_die = 0;
+    u8 pwr_up_mode = 0;
+	
+	/* Some time zero bytes length are sent */
+	if (bytes==0)
+		return 0;
+	
+    if (ractrends_spiflash_flash_id[bank] == 0x00EF1940)
+    {
+        u8 reg_data;
+
+        command[0] = 0x15; /* Read Status Register S23 ~ S16 */
+        cmd_size = 1;
+        retval = ctrl_drv->spi_transfer(bank,command, cmd_size ,SPI_READ, &reg_data, 1);
+        pwr_up_mode = (reg_data & 0x2)>>1; /* S17(ADP) field */
+    }
+
+	if (address32 == ADDRESS_DIE_LO3_HI4_BYTE)
+	{ 
+		if (addr < ADDR_32MB && end_addr >= ADDR_32MB)
+		{
+			int ErrorCode;
+			transfer = (ADDR_32MB - addr);
+			ErrorCode = spi_generic_read(map, addr, transfer, buff);
+			if (ErrorCode != 0) return ErrorCode;
+			 
+			 //fix address
+			bytes-=transfer;
+			addr+=transfer;
+			buff+=transfer;
+			
+			end_addr = (addr+bytes-1);
+			if (bytes==0) return 0;
+		}
+	}
+	down(&priv->chip_drv->lock);
+	
+	
+	
+	/* Wait until finished previous command. */
+	if (wait_till_ready(bank,ctrl_drv))
+	{
+		up(&priv->chip_drv->lock);
+		return -1;
+	}
+
+	if (address32 == ADDRESS_DIE_LO3_HI4_BYTE){
+		if(addr >= ADDR_32MB){
+			spi_generic_select_die( bank, 1,ctrl_drv);
+			had_switch_die = 1;
+			addr-=ADDR_32MB;
+			end_addr = (addr+bytes-1);
+		}
+	}
+	
+	if (ctrl_drv->spi_burst_read)
+		readfn = ctrl_drv->spi_burst_read;
+	else
+		readfn = ctrl_drv->spi_transfer;
+
+	transfer=bytes;
+
+
+	/* Logic for 4 byte address mode Enter */
+	if ( (( end_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE )||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || pwr_up_mode)
+	{
+		//printk ("Trying to enter 4 byte mode\n");
+		retval = enter_4byte_addr_mode(bank, ctrl_drv);
+		if (retval < 0)
+		{
+			printk ("Unable to enter 4 byte address mode\n");
+			if(had_switch_die == 1)
+			{
+				spi_generic_select_die( bank, 0,ctrl_drv);
+			}
+			up(&priv->chip_drv->lock);
+			return spi_error(retval);
+		}
+	}
+
+	if (ractrends_spiflash_flash_id[bank] == 0x00EF1940) w25q256_force_extended_address(bank, ctrl_drv);
+	if ((ractrends_spiflash_flash_id[bank] == 0x002020BA) || (ractrends_spiflash_flash_id[bank] == 0x002021BA) || (ractrends_spiflash_flash_id[bank] == 0x00C21A20))
+		spi_generic_extended_address(bank, SPI_WRITE, (addr & 0xFF000000) >> 24, ctrl_drv);
+
+	while (bytes)
+	{
+		if (ctrl_drv->spi_burst_read)
+			transfer=bytes;
+		else
+		{
+			transfer=ctrl_drv->max_read;
+			if (transfer > bytes)
+				transfer = bytes;
+		}
+
+		if (!ctrl_drv->fast_read)
+		{
+			if ( ((( end_addr  >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || (address32 == ADDRESS_4BYTE)) || pwr_up_mode )
+			{
+				/* Set up command buffer. */	/* Normal Read */
+				command[0] = OPCODE_READ;
+				if (ractrends_spiflash_flash_id[bank] == 0x00011902) command[0] = 0x13; // READ command in 4byte mode [spansion only]
+				if (address32 == ADDRESS_DIE_LO3_HI4_BYTE) command[0] = 0x13; // READ command in 4byte mode
+				command[1] = addr >> 24;
+				command[2] = addr >> 16;
+				command[3] = addr >> 8;
+				command[4] = addr;
+
+				cmd_size = 5;
+			}
+			else {
+
+				/* Set up command buffer. */	/* Normal Read */
+				command[0] = OPCODE_READ;
+				command[1] = addr >> 16;
+				command[2] = addr >> 8;
+				command[3] = addr;
+
+				cmd_size = 4;
+			}
+			/* Issue Controller Transfer Routine */
+			retval = (*readfn)(bank,command, cmd_size ,SPI_READ, buff, (unsigned long)transfer);
+		}
+		else if (ctrl_drv->fast_read == 1) // Need to check Fast Read in 4 byte address mode
+		{
+			if ( ((( end_addr  >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || (address32 == ADDRESS_4BYTE)) || pwr_up_mode )
+			{ 
+				/* Set up command buffer. */   /* Fast Read */
+				command[0] = OPCODE_FAST_READ;
+				if (ractrends_spiflash_flash_id[bank] == 0x00011902) command[0] = 0x0C; // FAST_READ command in 4byte mode [spansion only]
+				if (address32 == ADDRESS_DIE_LO3_HI4_BYTE) command[0] = 0x0C; // FAST_READ command in 4byte mode
+				command[1] = addr >> 24;
+				command[2] = addr >> 16;
+				command[3] = addr >> 8;
+				command[4] = addr;
+				command[5] = 0;			/* dummy data */
+
+				cmd_size = 6;
+			}
+			else
+			{
+				/* Set up command buffer. */   /* Fast Read */
+				command[0] = OPCODE_FAST_READ;
+				command[1] = addr >> 16;
+				command[2] = addr >> 8;
+				command[3] = addr;
+				command[4] = 0;			/* dummy data */
+
+				cmd_size = 5;
+			}
+			/* Issue Controller Transfer Routine */
+			retval = (*readfn)(bank,command, cmd_size ,SPI_READ, buff, (unsigned long)transfer);
+		}
+		else if (ctrl_drv->fast_read == 2) // Need to check Dual Read in 4 byte address mode
+		{
+			if ( ((( end_addr  >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || (address32 == ADDRESS_4BYTE)) || pwr_up_mode )
+			{ 
+				/* Set up command buffer. */   /* Dual Read */
+				command[0] = OPCODE_DREAD;
+				command[1] = addr >> 24;
+				command[2] = addr >> 16;
+				command[3] = addr >> 8;
+				command[4] = addr;
+				command[5] = 0;			/* dummy data */
+
+				cmd_size = 6;
+			}
+			else
+			{ 
+				/* Set up command buffer. */   /* Dual Read */
+				command[0] = OPCODE_DREAD;
+				command[1] = addr >> 16;
+				command[2] = addr >> 8;
+				command[3] = addr;
+				command[4] = 0;			/* dummy data */
+
+				cmd_size = 5;
+			}
+			/* Issue Controller Transfer Routine */
+			retval = (*readfn)(bank,command, cmd_size ,SPI_READ, buff, (unsigned long)transfer);
+		}		
+		else if (ctrl_drv->fast_read == 3) // Need to check 2xI/O Read in 4 byte address mode 
+		{
+			if ( ((( end_addr  >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || (address32 == ADDRESS_4BYTE)) || pwr_up_mode )
+			{ 
+				/* Set up command buffer. */   /* 2xI/O Read */
+				command[0] = OPCODE_2READ;
+				command[1] = addr >> 24;
+				command[2] = addr >> 16;
+				command[3] = addr >> 8;
+				command[4] = addr;
+				command[5] = 0;			/* dummy data */
+
+				cmd_size = 6;
+			}
+			else
+			{ 
+				/* Set up command buffer. */   /* 2xI/O Read */
+				command[0] = OPCODE_2READ;
+				command[1] = addr >> 16;
+				command[2] = addr >> 8;
+				command[3] = addr;
+				command[4] = 0;			/* dummy data */
+
+				cmd_size = 5;
+			}
+			/* Issue Controller Transfer Routine */
+			retval = (*readfn)(bank,command, cmd_size ,SPI_READ, buff, (unsigned long)transfer);
+		}
+
+		if (retval < 0)
+		{
+			//if 4 byte mode, exit
+			if ( (( end_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || pwr_up_mode)
+			{
+				retval = exit_4byte_addr_mode(bank, ctrl_drv);
+				if (retval < 0)
+				{
+					printk ("Unable to exit 4 byte address mode\n");
+				}
+			}
+
+			if (ractrends_spiflash_flash_id[bank] == 0x00EF1940) w25q256_force_extended_address(bank, ctrl_drv);
+			if ((ractrends_spiflash_flash_id[bank] == 0x002020BA) || (ractrends_spiflash_flash_id[bank] == 0x002021BA) || (ractrends_spiflash_flash_id[bank] == 0x00C21A20))
+				spi_generic_extended_address(bank, SPI_WRITE, 0x00, ctrl_drv);
+
+			if(had_switch_die == 1)
+			{
+				spi_generic_select_die( bank, 0,ctrl_drv);
+			}
+			up(&priv->chip_drv->lock);
+			return spi_error(retval);
+		}
+
+		bytes-=transfer;
+		addr+=transfer;
+		buff+=transfer;
+	}
+
+	//if 4 byte mode exit
+	if ( (( end_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || pwr_up_mode)
+	{
+		//printk ("Trying to exit 4 byte mode\n");
+		retval = exit_4byte_addr_mode(bank, ctrl_drv);
+		if (retval < 0)
+		{
+			printk ("Unable to exit 4 byte address mode\n");
+		}
+	}
+
+	if (ractrends_spiflash_flash_id[bank]  == 0x00EF1940) w25q256_force_extended_address(bank, ctrl_drv);
+	if ((ractrends_spiflash_flash_id[bank]  == 0x002020BA) || (ractrends_spiflash_flash_id[bank]  == 0x002021BA) || (ractrends_spiflash_flash_id[bank]  == 0x00C21A20))
+		spi_generic_extended_address(bank, SPI_WRITE, 0x00, ctrl_drv);
+
+	if(had_switch_die == 1)
+	{
+		spi_generic_select_die( bank, 0,ctrl_drv);
+	}
+	up(&priv->chip_drv->lock);
+	return 0;
+}
+
+
+int
+spi_generic_write(struct map_info *map, loff_t addr, size_t bytes, const unsigned char *buff)
+{
+	struct spi_flash_private *priv=map->fldrv_priv;
+	int bank = map->map_priv_1;
+	struct spi_ctrl_driver *ctrl_drv = priv->ctrl_drv;
+	
+	int retval;
+	unsigned char command[5];
+	size_t transfer;
+	int cmd_size = 0;
+	int end_addr = (addr+bytes-1);
+	u8 address32 = priv->address32;
+	//unsigned long flash_size = priv->size;
+	u8 had_switch_die = 0;
+    u8 pwr_up_mode = 0;
+	
+	/* Some time zero bytes length are sent */
+	if (bytes==0)
+		return 0;
+
+    if (ractrends_spiflash_flash_id[bank] == 0x00EF1940)
+    {
+        u8 reg_data;
+
+        command[0] = 0x15; /* Read Status Register S23 ~ S16 */
+        cmd_size = 1;
+        retval = ctrl_drv->spi_transfer(bank,command, cmd_size ,SPI_READ, &reg_data, 1);
+        pwr_up_mode = (reg_data & 0x2)>>1; /* S17(ADP) field */
+    }
+
+	if (address32 == ADDRESS_DIE_LO3_HI4_BYTE)
+	{ 
+		if (addr < ADDR_32MB && end_addr >= ADDR_32MB)
+		{
+			int ErrorCode;
+			transfer = (ADDR_32MB - addr);
+			ErrorCode = spi_generic_write(map, addr, transfer, buff);
+			if (ErrorCode != 0) return ErrorCode;
+			 
+			 //fix address
+			bytes-=transfer;
+			addr+=transfer;
+			buff+=transfer;
+			
+			end_addr = (addr+bytes-1);
+			if (bytes==0) return 0;
+		}
+	}
+
+	down(&priv->chip_drv->lock);
+	
+	if (address32 == ADDRESS_DIE_LO3_HI4_BYTE){
+		if(addr >= ADDR_32MB){
+			spi_generic_select_die( bank, 1,ctrl_drv);
+			had_switch_die = 1;
+			addr-=ADDR_32MB;
+			end_addr = (addr+bytes-1);
+		}
+	}
+	
+	/* Logic for 4 byte address mode Enter */
+	if ( (( end_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || pwr_up_mode)
+	{
+		retval = enter_4byte_addr_mode(bank, ctrl_drv);
+		if (retval < 0)
+		{
+			printk ("Unable to enter 4 byte address mode\n");
+			if(had_switch_die == 1)
+			{
+				spi_generic_select_die( bank, 0,ctrl_drv);
+			}
+			up(&priv->chip_drv->lock);
+			return spi_error(retval);
+		}
+	}
+
+	if (ractrends_spiflash_flash_id[bank]  == 0x00EF1940) w25q256_force_extended_address(bank, ctrl_drv);
+	if ((ractrends_spiflash_flash_id[bank]  == 0x002020BA) || (ractrends_spiflash_flash_id[bank]  == 0x002021BA) || (ractrends_spiflash_flash_id[bank]  == 0x00C21A20))
+		spi_generic_extended_address(bank, SPI_WRITE, (addr & 0xFF000000) >> 24, ctrl_drv);
+
+	while (bytes)
+	{
+		/* Wait until finished previous command. */
+		if (wait_till_ready(bank,ctrl_drv))
+		{
+			if(had_switch_die == 1)
+			{
+				spi_generic_select_die( bank, 0,ctrl_drv);
+			}
+			up(&priv->chip_drv->lock);
+			return -1;
+		}
+
+		transfer = PROGRAM_PAGE_SIZE;
+		if (bytes <  transfer)
+			transfer = bytes;
+
+		if (!ctrl_drv->fast_write)
+		{
+			if ( (((end_addr >= ADDR_16MB) && (address32 == ADDRESS_LO3_HI4_BYTE)) || (address32 == ADDRESS_4BYTE)) || pwr_up_mode) 
+			{
+				/* Set up command buffer. */
+				command[0] = OPCODE_PP;
+				if (ractrends_spiflash_flash_id[bank]  == 0x00011902) command[0] = 0x12; // PROGRAM command in 4byte mode [spansion only]
+				if (address32 == ADDRESS_DIE_LO3_HI4_BYTE) command[0] = 0x12; // PROGRAM command in 4byte mode
+				command[1] = addr >> 24;
+				command[2] = addr >> 16;
+				command[3] = addr >> 8;
+				command[4] = addr;
+				cmd_size = 5;
+			}
+			else {
+				/* Set up command buffer. */
+				command[0] = OPCODE_PP;
+				command[1] = addr >> 16;
+				command[2] = addr >> 8;
+				command[3] = addr;
+				cmd_size = 4;
+			}
+		}
+
+		/* Issue Controller Transfer Routine */
+		spi_generic_write_enable(bank,ctrl_drv); /* Send write enable */
+		retval = ctrl_drv->spi_transfer(bank,command,cmd_size ,SPI_WRITE,
+						(unsigned char *)buff, transfer);
+		spi_generic_write_disable(bank,ctrl_drv); /* Send write disable */
+
+		if (ractrends_spiflash_flash_id[bank]  == 0x002020BA || ractrends_spiflash_flash_id[bank]  == 0x002021BA)
+		{
+			/* requires the read flag status with at latest one byte. */
+			if (require_read_flag_status(bank,ctrl_drv))
+			{
+				up(&priv->chip_drv->lock);
+				return -1;
+			}
+		}
+
+		if (retval < 0)
+		{
+			//if 4 byte mode exit
+			if ( (( end_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || pwr_up_mode)
+			{
+				retval = exit_4byte_addr_mode(bank, ctrl_drv);
+				if (retval < 0)
+				{
+					printk ("Unable to exit 4 byte address mode\n");
+				}
+			}
+
+			if (ractrends_spiflash_flash_id[bank]  == 0x00EF1940) w25q256_force_extended_address(bank, ctrl_drv);
+			if ((ractrends_spiflash_flash_id[bank]  == 0x002020BA) || (ractrends_spiflash_flash_id[bank]  == 0x002021BA) || (ractrends_spiflash_flash_id[bank]  == 0x00C21A20))
+				spi_generic_extended_address(bank, SPI_WRITE, 0x00, ctrl_drv);
+
+			if(had_switch_die == 1)
+			{
+				spi_generic_select_die( bank, 0,ctrl_drv);
+			}
+			up(&priv->chip_drv->lock);
+			return spi_error(retval);
+		}
+		addr+=(transfer-retval);
+		buff+=(transfer-retval);
+		bytes-=(transfer-retval);
+	}
+
+	//if 4 byte mode exit
+	if ( (( end_addr >= ADDR_16MB) && ((address32 == ADDRESS_LO3_HI4_BYTE)||(address32 == ADDRESS_DIE_LO3_HI4_BYTE))) || pwr_up_mode)
+	{
+		retval = exit_4byte_addr_mode(bank, ctrl_drv);
+		if (retval < 0)
+		{
+			printk ("Unable to exit 4 byte address mode\n");
+		}
+	}
+
+	if (ractrends_spiflash_flash_id[bank]  == 0x00EF1940) w25q256_force_extended_address(bank, ctrl_drv);
+	if ((ractrends_spiflash_flash_id[bank]  == 0x002020BA) || (ractrends_spiflash_flash_id[bank]  == 0x002021BA) || (ractrends_spiflash_flash_id[bank]  == 0x00C21A20))
+		spi_generic_extended_address(bank, SPI_WRITE, 0x00, ctrl_drv);
+
+	if(had_switch_die == 1)
+	{
+		spi_generic_select_die( bank, 0,ctrl_drv);
+	}
+	up(&priv->chip_drv->lock);
+	return 0;
+}
+
+/***********************************************************************************/
+extern int spi_verbose;
+int
+spi_generic_probe(int bank,struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info,
+			char *spi_name,struct spi_flash_info *spi_list, int spi_list_len)
+{
+	int  retval;
+	u32 val;
+	int i;
+	u16 opread;
+	u16 opwrite;
+	u8 code = OPCODE_RDID;
+	//int address_mode = 0;
+	
+	if (spi_verbose == 2)
+		printk("SPI: probing for %s devices ...\n",spi_name);
+
+	/* Send write enable */
+	retval =spi_generic_write_enable(bank,ctrl_drv);
+	if (retval < 0)
+	 	return -1;
+	
+	/* Issue Controller Transfer Routine */
+	val = 0;
+	retval = ctrl_drv->spi_transfer(bank,&code, 1,SPI_READ,(unsigned char *)&val, 3);
+	val &= 0x00FFFFFF;
+
+	if (retval < 0)
+	{
+		spi_error(retval);
+		return -1;
+	}
+
+	/* Send write disable */
+	retval = spi_generic_write_disable(bank,ctrl_drv);
+	if (retval < 0)
+		return -1;
+
+	/* Match the ID against the table entries */
+	for (i = 0; i < spi_list_len; i++)
+	{
+		if ((spi_list[i].mfr_id == ((val)& 0xFF)) && (spi_list[i].dev_id == ((val >> 8)& 0xFFFF)))
+		{
+			/* Check Operation Mode */
+			//for Read Operation
+			opread = (spi_list[i].operationmode & 0xFFFF);
+			opread &= ctrl_drv->operation_mode_mask;
+			if (opread > 0x7)
+			{
+				ctrl_drv->fast_read = 3;
+			}
+			else if ((0x3 < opread) && (opread  <= 0x7))
+			{
+				ctrl_drv->fast_read = 2;
+			}
+			else if ((0x1 < opread) && (opread <= 0x3))
+			{
+				ctrl_drv->fast_read = 1;
+			}
+			else if (opread <= 0x1)
+			{
+				ctrl_drv->fast_read = 0;
+			}
+			
+			//for Write Operation
+			opwrite = (spi_list[i].operationmode >> 16);
+			opwrite &= (ctrl_drv->operation_mode_mask >> 16);
+			if (opwrite <= 0x1)
+			{
+				ctrl_drv->fast_write = 0;
+			}
+			
+		  break;
+		}
+	}
+
+	if (i == spi_list_len)
+	{
+//		if (spi_verbose == 2)
+//			printk("%s : Unrecognized ID (0x%x) got \n",spi_name,val);
+		return -1;
+	}
+	memcpy(chip_info,&spi_list[i],sizeof(struct spi_flash_info));
+
+	if (spi_verbose > 0)
+		printk(KERN_INFO"Found SPI Chip %s \n",spi_list[i].name);
+
+	return 0;
+
+}
+
+EXPORT_SYMBOL(spi_generic_probe);
+EXPORT_SYMBOL(spi_generic_erase);
+EXPORT_SYMBOL(spi_generic_read);
+EXPORT_SYMBOL(spi_generic_write);
+EXPORT_SYMBOL(spi_generic_write_disable);
+EXPORT_SYMBOL(spi_generic_write_enable);
+EXPORT_SYMBOL(spi_generic_read_status);
+EXPORT_SYMBOL(spi_generic_write_status);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("MTD SPI driver for Generic SPI flash chips");
+
+#endif
diff --git a/drivers/mtd/spichips/intels33.c b/drivers/mtd/spichips/intels33.c
new file mode 100644
index 0000000..6900319
--- /dev/null
+++ b/drivers/mtd/spichips/intels33.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifdef __UBOOT__	
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+/* Name, ID1, ID2 , Size, Clock, Erase regions, address mode,{ Offset, Erase Size, Erase Block Count } */
+/* address mode:  0x00 -3 byte address
+			 	0x01 - 4 byte address	
+			 	0x02 - Low byte: 3 byte address, High byte: 4 byte address*/
+static struct spi_flash_info s33_data [] = 
+{
+	/* Intel S33  64 K Sectors */
+	{ "Intel S33 16Mb"  , 0x89, 0x1189, 0x00010001, 0x200000 , 68 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 32  },} },
+	{ "Intel S33 32Mb"  , 0x89, 0x1289, 0x00010001, 0x400000 , 68 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 64  },} },
+	{ "Intel S33 64Mb"  , 0x89, 0x1389, 0x00010001, 0x800000 , 68 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 128 },} },
+};
+
+
+static
+int 
+s33_probe(int bank,struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info)
+{
+	int retval;
+	retval = spi_generic_probe(bank,ctrl_drv,chip_info,"intel s33",
+						s33_data,ARRAY_SIZE(s33_data));	
+
+	if (retval == -1)
+		return retval;
+
+	/* UnProctect all sectors */
+ 	/* SRWD=0 (Bit 7)  BP0,BP1,BP2 = 0 (Bit 2,3,4) */
+	if (spi_generic_write_status(bank,ctrl_drv,0x0) < 0)
+		printk("intel s33: Unable to Unprotect all sectors\n");
+	return retval;
+}
+
+struct spi_chip_driver s33_driver =
+{
+	.name 		= "intel s33",
+	.module 	= THIS_MODULE,
+	.probe	 	= s33_probe,
+	.erase_sector 	= spi_generic_erase,
+	.read_bytes	= spi_generic_read,
+	.write_bytes	= spi_generic_write,
+};
+
+int 
+s33_init(void)
+{
+	sema_init(&s33_driver.lock, 1);
+#ifdef __UBOOT__	/* MIPS */
+	s33_driver.probe	 		= s33_probe;
+	s33_driver.erase_sector 	= spi_generic_erase;
+	s33_driver.read_bytes		= spi_generic_read;
+	s33_driver.write_bytes		= spi_generic_write;
+#endif
+	register_spi_chip_driver(&s33_driver);
+	return 0;
+}
+
+void 
+s33_exit(void)
+{
+	sema_init(&s33_driver.lock, 1);
+	unregister_spi_chip_driver(&s33_driver);
+	return;
+}
+
+module_init(s33_init);
+module_exit(s33_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("MTD SPI driver for Intel S33 flash chips");
+
+#endif
diff --git a/drivers/mtd/spichips/m25pxx.c b/drivers/mtd/spichips/m25pxx.c
new file mode 100644
index 0000000..448fe06
--- /dev/null
+++ b/drivers/mtd/spichips/m25pxx.c
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifdef __UBOOT__	
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+/* Name, ID1, ID2 , Size, Clock, Erase regions, address mode,{ Offset, Erase Size, Erase Block Count } */
+/* address mode: 0x00 -3 byte address
+			      0x01 - 4 byte address	
+			      0x02 - Low byte: 3 byte address, High byte: 4 byte address*/
+static struct spi_flash_info m25pxx_data [] = 
+{
+	/* ST Micro 32K Sectors */
+	{ "ST Micro m25p05A" , 0x20, 0x1020, 0x00010001, 0x010000 , 50 * 1000000, 1, 0x00, {{ 0, 32  * 1024, 2   },} },
+	{ "ST Micro m25p10A" , 0x20, 0x1120, 0x00010001, 0x020000 , 50 * 1000000, 1, 0x00, {{ 0, 32  * 1024, 4   },} },
+
+	/* ST Micro 64 K Sectors */
+	{ "ST Micro m25p20"  , 0x20, 0x1220, 0x00010001, 0x040000 , 75 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 4   },} },
+	{ "ST Micro m25p40"  , 0x20, 0x1320, 0x00010001, 0x080000 , 75 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 8   },} },
+	{ "ST Micro m25p80"  , 0x20, 0x1420, 0x00010001, 0x100000 , 75 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 16  },} },
+	{ "ST Micro m25p16"  , 0x20, 0x1520, 0x00010001, 0x200000 , 75 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 32  },} },
+	{ "ST Micro m25p32"  , 0x20, 0x1620, 0x00010001, 0x400000 , 75 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 64  },} },
+	{ "ST Micro m25p64"  , 0x20, 0x1720, 0x00010001, 0x800000 , 75 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 128 },} },
+	{ "ST Micro m25px64"  , 0x20, 0x1771, 0x00010001, 0x800000 , 75 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 128 },} },
+
+	/* ST Micro 256K Sectors */
+	{ "ST Micro m25p128" , 0x20, 0x1820, 0x00010001, 0x1000000, 50 * 1000000, 1, 0x00, {{ 0, 256 * 1024, 64  },} },
+
+	/* ST Micro 64 K Sectors, 25MHz speed */
+	{ "ST Micro m45p20"  , 0x20, 0x1240, 0x00010001, 0x040000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 4   },} },
+	{ "ST Micro m45p40"  , 0x20, 0x1340, 0x00010001, 0x080000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 8   },} },
+	{ "ST Micro m45p80"  , 0x20, 0x1440, 0x00010001, 0x100000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 16  },} },
+	{ "ST Micro m45p16"  , 0x20, 0x1540, 0x00010001, 0x200000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 32  },} },
+	{ "ST Micro m45p32"  , 0x20, 0x1640, 0x00010001, 0x400000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 64  },} },
+	{ "ST Micro m45p64"  , 0x20, 0x1740, 0x00010001, 0x800000 , 25 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 128 },} },
+
+};
+
+
+static
+int 
+m25pxx_probe(int bank,struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info)
+{
+	int retval;
+	retval = spi_generic_probe(bank,ctrl_drv,chip_info,"m25pxx",
+						m25pxx_data,ARRAY_SIZE(m25pxx_data));	
+
+	if (retval == -1)
+		return retval;
+
+	/* UnProctect all sectors */
+ 	/* SRWD=0 (Bit 7)  BP0,BP1,BP2 = 0 (Bit 2,3,4) */
+	if (spi_generic_write_status(bank,ctrl_drv,0x0) < 0)
+		printk("m25pxx: Unable to Unprotect all sectors\n");
+
+	return retval;
+}
+
+struct spi_chip_driver m25pxx_driver =
+{
+	.name 		= "m25pxx",
+	.module 	= THIS_MODULE,
+	.probe	 	= m25pxx_probe,
+	.erase_sector 	= spi_generic_erase,
+	.read_bytes	= spi_generic_read,
+	.write_bytes	= spi_generic_write,
+};
+
+
+
+int 
+m25pxx_init(void)
+{
+	sema_init(&m25pxx_driver.lock, 1);
+#ifdef __UBOOT__	/* MIPS */
+	m25pxx_driver.probe	 		= m25pxx_probe;
+	m25pxx_driver.erase_sector 	= spi_generic_erase;
+	m25pxx_driver.read_bytes	= spi_generic_read;
+	m25pxx_driver.write_bytes	= spi_generic_write;
+#endif
+	register_spi_chip_driver(&m25pxx_driver);
+	return 0;
+}
+
+
+void 
+m25pxx_exit(void)
+{
+	sema_init(&m25pxx_driver.lock, 1);
+	unregister_spi_chip_driver(&m25pxx_driver);
+	return;
+}
+
+
+module_init(m25pxx_init);
+module_exit(m25pxx_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("MTD SPI driver for ST M25Pxx flash chips");
+
+#endif
diff --git a/drivers/mtd/spichips/macronix.c b/drivers/mtd/spichips/macronix.c
new file mode 100644
index 0000000..176d101
--- /dev/null
+++ b/drivers/mtd/spichips/macronix.c
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifdef __UBOOT__	
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+#define CMD_MX25XX_RDSCUR		0x2B	/* Read security register */
+#define CMD_MX25XX_RDCR			0x15	/* Read configuration register */
+
+/* Security register */
+#define SCUR_BIT2			0x04
+
+/* Configuration register */
+#define CR_BIT5				0x20
+
+#define ADDRESS_3BYTE	0x00
+#define ADDRESS_4BYTE	0x01
+#define ADDRESS_LO3_HI4_BYTE 0x02
+#define MX25L25x35E_MFR_ID 0xC2 
+#define MX25L25x35E_DEV_ID 0x1920
+
+
+/* Name, ID1, ID2 , Size, Clock, Erase regions, address mode,{ Offset, Erase Size, Erase Block Count } */
+/* address mode:  0x00 -3 byte address
+			 	0x01 - 4 byte address	
+			 	0x02 - Low byte: 3 byte address, High byte: 4 byte address*/
+static struct spi_flash_info macronix_data [] = 
+{
+	/* Macronix 64 K Sectors */
+	{ "Macronix MX25L1605D" , 0xC2, 0x1520, 0x0001000B, 0x200000 , 66 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 32 },} },
+	{ "Macronix MX25L3205D" , 0xC2, 0x1620, 0x0001000B, 0x400000 , 66 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 64 },} },
+	{ "Macronix MX25L6405D" , 0xC2, 0x1720, 0x0001000B, 0x800000 , 66 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 128 },} },
+	{ "Macronix MX25L12805D", 0xC2, 0x1820, 0x00010001, 0x1000000, 50 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 256 },} },
+   	{ "Macronix MX25L25635E", 0xC2, 0x1920, 0x0001000F, 0x2000000, 50 * 1000000, 1, 0x02, {{ 0, 64  * 1024, 512 },} },
+    	{ "Macronix MX25L25735E", 0xC2, 0x1920, 0x0001000F, 0x2000000, 50 * 1000000, 1, 0x01, {{ 0, 64  * 1024, 512 },} },      
+    	{ "Macronix MX66L51235F", 0xC2, 0x1A20, 0x0001000F, 0x4000000, 50 * 1000000, 1, 0x02, {{ 0, 64  * 1024, 1024 },} },      
+    	{ "EON EN25QH256",        0x1C, 0x1970, 0x0001000F, 0x2000000, 50 * 1000000, 1, 0x02, {{ 0, 64  * 1024, 512 },} },      
+
+};
+
+/* to dinstinguish between MX25L25635/MX25L25735 E and F type */
+static int read_security_register(int bank, struct spi_ctrl_driver *ctrl_drv)
+{
+	u8 code = CMD_MX25XX_RDSCUR;
+	int retval;
+	unsigned char scur_reg;
+	
+	/* Issue Controller Transfer Routine*/ 
+	retval = ctrl_drv->spi_transfer(bank,&code, 1,SPI_READ,&scur_reg, 1);
+	if (retval < 0)
+	{
+		printk ("Could not read security register\n");
+		return -1;
+		
+	}
+
+	/* 0x00 - 3 byte mode
+	   0x04 - 4 byte mode */
+	scur_reg &= SCUR_BIT2;
+	
+	if(scur_reg == 0x04)
+		return ADDRESS_4BYTE;		// MX25L25735E
+	else
+		return ADDRESS_LO3_HI4_BYTE;	// MX25L25635E, MX25L25635F, MX25L25735F
+
+	return 0;
+}	
+
+/* to dinstinguish MX25L25635/MX25L25735 F type */
+static int read_configuration_register(int bank, struct spi_ctrl_driver *ctrl_drv)
+{
+	u8 code = CMD_MX25XX_RDCR;
+	int retval;
+	unsigned char conf_reg;
+
+	/* Issue Controller Transfer Routine */
+	retval = ctrl_drv->spi_transfer(bank,&code,1,SPI_READ,&conf_reg,1);
+	if (retval < 0)
+	{
+		printk ("Could not read configuration register\n");
+		return -1;
+	}
+
+	if (conf_reg == 0xFF) conf_reg = 0x00; // invalid value (maybe unsupported the RDCR command)
+
+	/* 0x00 - 3 byte mode
+	   0x20 - 4 byte mode */
+	conf_reg &= CR_BIT5;
+
+	if(conf_reg == CR_BIT5)
+		return ADDRESS_4BYTE;		// MX25L25735F
+	else
+		return ADDRESS_LO3_HI4_BYTE;	// MX25L25635E or MX25L25635F
+
+	return 0;
+}
+
+static
+int 
+macronix_probe(int bank,struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info)
+{
+	int retval;
+	int address_mode = 0;
+	int i=0;
+	
+	retval = spi_generic_probe(bank,ctrl_drv,chip_info,"macronix",
+						macronix_data,ARRAY_SIZE(macronix_data));	
+
+	if (retval == -1)
+		return retval;
+
+	/* MX25L25635E, MX25L25735E, MX25L25635F, MX25L25735F - the same ID code */
+	if((chip_info->mfr_id == MX25L25x35E_MFR_ID) && (chip_info->dev_id == MX25L25x35E_DEV_ID))
+	{
+		address_mode = read_security_register(bank, ctrl_drv);
+		if (address_mode == ADDRESS_LO3_HI4_BYTE) address_mode = read_configuration_register(bank, ctrl_drv);
+
+		if (address_mode == -1)
+			return address_mode;
+			
+		if(chip_info->address32 != address_mode)
+		{
+			memset(chip_info,0,sizeof(struct spi_flash_info));
+			for (i = 0; i < (ARRAY_SIZE(macronix_data)); i++)
+			{
+				if((macronix_data[i].mfr_id == MX25L25x35E_MFR_ID) && (macronix_data[i].dev_id == MX25L25x35E_DEV_ID))
+				{
+					if(macronix_data[i].address32 == address_mode)
+					{
+							
+					   break;
+					}
+				}
+	
+			}
+			memcpy(chip_info,&macronix_data[i],sizeof(struct spi_flash_info));
+		
+		}
+	
+	}
+
+	/* UnProctect all sectors */
+ 	/* SRWD=0 (Bit 7)  BP0,BP1,BP2 = 0 (Bit 2,3,4) */
+	if (spi_generic_write_status(bank,ctrl_drv,0x0) < 0)
+		printk("macronix: Unable to Unprotect all sectors\n");
+
+	return retval;
+}
+
+struct spi_chip_driver macronix_driver =
+{
+	.name 		= "macronix",
+	.module 	= THIS_MODULE,
+	.probe	 	= macronix_probe,
+	.erase_sector 	= spi_generic_erase,
+	.read_bytes	= spi_generic_read,
+	.write_bytes	= spi_generic_write,
+};
+
+int 
+macronix_init(void)
+{
+	sema_init(&macronix_driver.lock, 1);
+#ifdef __UBOOT__	/* MIPS */
+	macronix_driver.probe	 		= macronix_probe;
+	macronix_driver.erase_sector 	= spi_generic_erase;
+	macronix_driver.read_bytes	= spi_generic_read;
+	macronix_driver.write_bytes	= spi_generic_write;
+#endif
+	register_spi_chip_driver(&macronix_driver);
+	return 0;
+}
+
+void 
+macronix_exit(void)
+{
+	sema_init(&macronix_driver.lock, 1);
+	unregister_spi_chip_driver(&macronix_driver);
+	return;
+}
+
+module_init(macronix_init);
+module_exit(macronix_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("MTD SPI driver for Macronix flash chips");
+
+#endif
diff --git a/drivers/mtd/spichips/micron.c b/drivers/mtd/spichips/micron.c
new file mode 100644
index 0000000..e9f44ab
--- /dev/null
+++ b/drivers/mtd/spichips/micron.c
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2007-2013 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifdef __UBOOT__	
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+/* Name, ID1, ID2 , Size, Clock, Erase regions, address mode, { Offset, Erase Size, Erase Block Count } */
+/* address mode:  0x00 -3 byte address
+				0x01 - 4 byte address	
+				0x02 - Low byte: 3 byte address, High byte: 4 byte address*/
+
+static struct spi_flash_info micron_data [] = 
+{
+	/* Micron 64 K Sectors */
+	{ "Micron/Numonyx N25Q00A"  , 0x20, 0x21BA, 0x00010001, 0x8000000  , 108 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 2048 },} },
+	{ "Micron/Numonyx N25Q512A"  , 0x20, 0x20BA, 0x00010001, 0x4000000 , 108 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 1024 },} },
+	{ "Micron/Numonyx N25Q256A"  , 0x20, 0x19BA, 0x00010001, 0x2000000 , 108 * 1000000, 1, 0x02, {{ 0, 64  * 1024, 512 },} },
+    { "Micron/Numonyx n25q128" , 0x20, 0x18BA, 0x00010001, 0x1000000, 50 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 256 },} },
+};
+
+
+static
+int 
+micron_probe(int bank,struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info)
+{
+	int retval;
+
+	retval = spi_generic_probe(bank,ctrl_drv,chip_info,"micron",
+						micron_data,ARRAY_SIZE(micron_data));	
+
+	if (retval == -1)
+		return retval;
+	
+	/* UnProctect all sectors */
+ 	/* SRWD=0 (Bit 7)  BP0,BP1,BP2 = 0 (Bit 2,3,4) */
+	if (spi_generic_write_status(bank,ctrl_drv,0x0) < 0)
+		printk("micron: Unable to Unprotect all sectors\n");
+
+	return retval;
+}
+
+struct spi_chip_driver micron_driver =
+{
+	.name 		= "micron",
+	.module 	= THIS_MODULE,
+	.probe	 	= micron_probe,
+	.erase_sector 	= spi_generic_erase,
+	.read_bytes	= spi_generic_read,
+	.write_bytes	= spi_generic_write,
+};
+
+
+
+int 
+micron_init(void)
+{
+	sema_init(&micron_driver.lock,1);
+#ifdef __UBOOT__	/* MIPS */
+	micron_driver.probe	 		= micron_probe;
+	micron_driver.erase_sector 	= spi_generic_erase;
+	micron_driver.read_bytes	= spi_generic_read;
+	micron_driver.write_bytes	= spi_generic_write;
+#endif
+	register_spi_chip_driver(&micron_driver);
+	return 0;
+}
+
+
+void 
+micron_exit(void)
+{
+	sema_init(&micron_driver.lock,1);
+	unregister_spi_chip_driver(&micron_driver);
+	return;
+}
+
+
+module_init(micron_init);
+module_exit(micron_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("MTD SPI driver for micron flash chips");
+
+#endif
diff --git a/drivers/mtd/spichips/spansion.c b/drivers/mtd/spichips/spansion.c
new file mode 100644
index 0000000..33a7bca
--- /dev/null
+++ b/drivers/mtd/spichips/spansion.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifdef __UBOOT__	
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+/* Name, ID1, ID2 , Size, Clock, Erase regions, address mode,{ Offset, Erase Size, Erase Block Count } */
+/* address mode:  0x00 -3 byte address
+				0x01 - 4 byte address	
+				0x02 - Low byte: 3 byte address, High byte: 4 byte address*/
+
+static struct spi_flash_info spansion_data [] = 
+{
+	/* Spansion 64 K Sectors */
+	{ "Spansion S25FL064A"  , 0x01, 0x1602, 0x00010001, 0x800000  , 104 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 128 },} },
+	{ "Spansion S25FL128P"  , 0x01, 0x1820, 0x00010001, 0x1000000 , 104 * 1000000, 1, 0x00, {{ 0, 64  * 1024, 256 },} },
+	{ "Spansion S25FL256S"  , 0x01, 0x1902, 0x00010001, 0x2000000 , 104 * 1000000, 1, 0x02, {{ 0, 64  * 1024, 512 },} },
+
+};
+
+
+static
+int 
+spansion_probe(int bank,struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info)
+{
+	int retval;
+	retval = spi_generic_probe(bank,ctrl_drv,chip_info,"spansion",
+						spansion_data,ARRAY_SIZE(spansion_data));	
+
+	if (retval == -1)
+		return retval;
+
+	/* UnProctect all sectors */
+ 	/* SRWD=0 (Bit 7)  BP0,BP1,BP2 = 0 (Bit 2,3,4) */
+	if (spi_generic_write_status(bank,ctrl_drv,0x0) < 0)
+		printk("spansion: Unable to Unprotect all sectors\n");
+
+	return retval;
+}
+
+struct spi_chip_driver spansion_driver =
+{
+	.name 		= "spansion",
+	.module 	= THIS_MODULE,
+	.probe	 	= spansion_probe,
+	.erase_sector 	= spi_generic_erase,
+	.read_bytes	= spi_generic_read,
+	.write_bytes	= spi_generic_write,
+};
+
+
+
+int 
+spansion_init(void)
+{
+	sema_init(&spansion_driver.lock, 1);
+#ifdef __UBOOT__	/* MIPS */
+	spansion_driver.probe	 		= spansion_probe;
+	spansion_driver.erase_sector 	= spi_generic_erase;
+	spansion_driver.read_bytes	= spi_generic_read;
+	spansion_driver.write_bytes	= spi_generic_write;
+#endif
+	register_spi_chip_driver(&spansion_driver);
+	return 0;
+}
+
+
+void 
+spansion_exit(void)
+{
+	sema_init(&spansion_driver.lock, 1);
+	unregister_spi_chip_driver(&spansion_driver);
+	return;
+}
+
+
+module_init(spansion_init);
+module_exit(spansion_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("MTD SPI driver for Spansion flash chips");
+
+#endif
diff --git a/drivers/mtd/spichips/spiaccess.c b/drivers/mtd/spichips/spiaccess.c
new file mode 100644
index 0000000..5412f72
--- /dev/null
+++ b/drivers/mtd/spichips/spiaccess.c
@@ -0,0 +1,433 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "spiflash.h"
+
+int spi_verbose = 1;
+
+
+/*----------------------------------------------------------------------------------*/
+/*           Low level functions which finally talk to the chip driver              */
+/*----------------------------------------------------------------------------------*/
+static void inline
+chip_unlock_sector(struct map_info *map, unsigned long sect_addr,int unlock)
+{
+	struct spi_flash_private *priv=map->fldrv_priv;
+
+	if (!priv->chip_drv->unlock_sector)
+		return;
+	(*priv->chip_drv->unlock_sector)(map,sect_addr,unlock);
+	return;
+}
+
+static int inline
+chip_is_sector_locked(struct map_info *map, unsigned long sect_addr)
+{
+	struct spi_flash_private *priv=map->fldrv_priv;
+
+	if (!priv->chip_drv->is_sector_locked)
+		return 0;
+	return (*priv->chip_drv->is_sector_locked)(map,sect_addr);
+}
+
+static int inline
+chip_read_bytes(struct map_info *map, loff_t addr, size_t bytes, unsigned char *buf)
+{
+	struct spi_flash_private *priv=map->fldrv_priv;
+
+	if (!priv->chip_drv->read_bytes)
+		return -1;
+	return (*priv->chip_drv->read_bytes)(map,addr,bytes,buf);
+}
+
+static int inline
+chip_write_bytes(struct map_info *map, loff_t addr, size_t bytes, const unsigned char *buf)
+{
+	struct spi_flash_private *priv=map->fldrv_priv;
+
+	if (!priv->chip_drv->write_bytes)
+		return -1;
+	return (*priv->chip_drv->write_bytes)(map,addr,bytes,buf);
+}
+
+static int inline
+chip_erase_sector(struct map_info *map, unsigned long sect_addr)
+{
+	struct spi_flash_private *priv=map->fldrv_priv;
+
+	if (!priv->chip_drv->erase_sector)
+		return -1;
+	return (*priv->chip_drv->erase_sector)(map,sect_addr);
+}
+
+
+void 
+spi_flash_sync(struct mtd_info *mtd)
+{
+	struct map_info *map = mtd->priv;
+	struct spi_flash_private *priv = map->fldrv_priv;
+
+	if (!priv->chip_drv->sync)
+		return;
+	(*priv->chip_drv->sync)(map);
+	return;
+}
+
+int 
+spi_flash_suspend(struct mtd_info *mtd)
+{
+	struct map_info *map = mtd->priv;
+	struct spi_flash_private *priv = map->fldrv_priv;
+
+	if (!priv->chip_drv->suspend)
+		return -EINVAL;
+	return (*priv->chip_drv->suspend)(map);
+}
+
+void
+spi_flash_resume(struct mtd_info *mtd)
+{
+	struct map_info *map = mtd->priv;
+	struct spi_flash_private *priv = map->fldrv_priv;
+
+	if (!priv->chip_drv->resume)
+		return;
+	(*priv->chip_drv->resume)(map);
+	return;
+}
+
+
+/*----------------------------------------------------------------------------------*/
+/*  Intermediate Functions which interfaces mtd functionss to chip driver fucntions */
+/*----------------------------------------------------------------------------------*/
+static int 
+spi_flash_do_unlock(struct mtd_info *mtd, loff_t ofs, uint32_t len,
+			       int is_unlock)
+{
+	struct map_info *map;
+	struct mtd_erase_region_info *merip;
+	int eraseoffset, erasesize, eraseblocks;
+	int i;
+	int retval = 0;
+	int lock_status;
+
+	map = mtd->priv;
+
+	/* Pass the whole chip through sector by sector and check for each
+	   sector if the sector and the given interval overlap */
+	for(i = 0; i < mtd->numeraseregions; i++) 
+	{
+		merip = &mtd->eraseregions[i];
+
+		eraseoffset = merip->offset;
+		erasesize = merip->erasesize;
+		eraseblocks = merip->numblocks;
+
+		if (ofs > eraseoffset + erasesize)
+			continue;
+
+		while (eraseblocks > 0) 
+		{
+			if (ofs < eraseoffset + erasesize && ofs + len > eraseoffset) 
+			{
+				chip_unlock_sector(map, eraseoffset, is_unlock);
+
+				lock_status = chip_is_sector_locked(map, eraseoffset);
+
+				if (is_unlock && lock_status) 
+				{
+					printk("Cannot unlock sector at address %x length %xx\n",
+					       eraseoffset, merip->erasesize);
+					retval = -1;
+				} 
+				else if (!is_unlock && !lock_status) 
+				{
+					printk("Cannot lock sector at address %x length %x\n",
+					       eraseoffset, merip->erasesize);
+					retval = -1;
+				}
+			}
+			eraseoffset += erasesize;
+			eraseblocks --;
+		}
+	}
+	return retval;
+}
+
+static int 
+read_one_chip(struct map_info *map, struct flchip *chip,
+			       loff_t adr, size_t len, u_char *buf)
+{
+	uint32_t	i;
+	size_t bytes;
+
+	chip->state = FL_READY;
+
+	bytes = SPI_READ_PAGE_SIZE;
+	i = 0;
+	while (len >= bytes) 
+	{
+		if (0 != chip_read_bytes(map,adr,bytes,&buf [i])) 
+		{
+			printk (KERN_ERR "spi_read failed in read_one_chip function\n");
+			return -1;
+		}
+		len -= bytes;
+		i   += bytes;
+		adr += bytes;
+	}	
+
+	if (0 != len) 
+	{
+		if (0 != chip_read_bytes(map, adr, len, &buf [i])) 
+		{
+			printk (KERN_ERR "spi_read failed in read_one_chip function\n");
+			return -1;
+		}
+	}
+
+	return 0;
+}
+
+static int
+write_one_chip(struct map_info *map, struct flchip *chip,
+	                        loff_t addr, size_t len, const u_char * buf)
+{
+	uint32_t page_size, page_offset;
+	uint32_t i;
+
+	chip->state = FL_WRITING;
+
+	/* what page do we start with? */
+	page_offset = addr % SPI_WRITE_PAGE_SIZE;
+
+	/* do all the bytes fit onto one page? */
+	if (page_offset + len <= SPI_WRITE_PAGE_SIZE) 
+	{
+		if (0 != chip_write_bytes (map, addr, len, buf)) 
+		{
+			printk (KERN_ERR "spi writing in the spi_write_bytes function failed\n");
+			return -1;
+		}
+	} 
+	else 
+	{
+		/* the size of data remaining on the first page */
+		page_size = SPI_WRITE_PAGE_SIZE - page_offset;
+		if (0 != chip_write_bytes (map, addr, page_size, buf))
+		{
+			printk (KERN_ERR "spi writing in the spi_write_bytes function failed\n");
+			return -1;
+		}
+		/* write everything in PAGESIZE chunks */
+		for (i = page_size; i < len; i += page_size) 
+		{
+			page_size = len - i;
+			if (page_size > SPI_WRITE_PAGE_SIZE)
+				page_size = SPI_WRITE_PAGE_SIZE;
+			if (0 != chip_write_bytes (map, (addr + i), page_size, (buf + i))) 
+			{
+				printk (KERN_ERR "spi writing in the spi_write_bytes function failed\n");
+				return -1;
+			}
+		}
+	}
+
+	chip->state = FL_READY;
+
+	return 0;
+
+}
+
+static  int 
+erase_one_block(struct map_info *map, struct flchip *chip,ulong addr)
+{
+	int	retval = 0;
+	
+	chip->state = FL_ERASING;
+
+	retval = chip_erase_sector (map,addr);
+
+	chip->state = FL_READY;
+
+	return (retval);
+}
+/*----------------------------------------------------------------------------------*/
+/*  		                       MTD Functions 					                */
+/*----------------------------------------------------------------------------------*/
+int 
+spi_flash_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
+{
+	return spi_flash_do_unlock(mtd, ofs, len, 1);
+}
+
+int 
+spi_flash_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
+{
+	return spi_flash_do_unlock(mtd, ofs, len, 0);
+}
+
+int
+spi_flash_read(struct mtd_info *mtd, loff_t from, size_t len,
+                                          size_t *retlen, u_char *buf)
+{
+	struct map_info *map = mtd->priv;
+	struct spi_flash_private *private = map->fldrv_priv;
+	unsigned long ofs;
+	int ret = 0;
+
+	if ((from + len) > mtd->size) 
+	{
+		printk(KERN_WARNING "%s: read request past end of device "
+		       "(0x%lx)\n", map->name, (unsigned long)from + len);
+		return -EINVAL;
+	}
+
+	ofs = from;
+
+	*retlen = 0;
+	ret = read_one_chip(map, &private->chips,ofs,len,buf);
+
+	if (0 == ret) 
+		*retlen = len;
+	else 
+		ret = -EINVAL;
+
+	return ret;
+	
+}
+
+int 
+spi_flash_write(struct mtd_info *mtd, loff_t to , size_t len,
+                                       size_t *retlen, const u_char *buf)
+{
+
+	struct map_info *map = mtd->priv;
+	struct spi_flash_private *private = map->fldrv_priv;
+
+	if (to > mtd->size) 
+	{
+		printk (KERN_ERR "write address > size of spi flash\n");
+		return -EINVAL;
+	}
+
+	if ((len + to) > mtd->size) 
+	{
+		printk (KERN_ERR "write address + size > size of spi flash\n");
+		return -EINVAL;
+	}
+
+	*retlen = 0;
+	if (!len) 
+		return 0;
+
+	if (0 == write_one_chip(map, &private->chips, to, len, buf)) 
+	{
+		*retlen = len;
+		return 0;			
+	}
+
+	return -EINVAL;
+}
+
+
+int 
+spi_flash_erase(struct mtd_info *mtd, struct erase_info *instr)
+{
+	struct map_info *map = mtd->priv;
+	struct spi_flash_private *private = map->fldrv_priv;
+	unsigned long adr, len;
+	int ret = 0;
+	int i;
+	int first;
+	struct mtd_erase_region_info *regions = mtd->eraseregions;
+
+	if (instr->addr > mtd->size) 
+		return -EINVAL;
+
+	if ((instr->len + instr->addr) > mtd->size) 
+		return -EINVAL;
+
+	/* Check that both start and end of the requested erase are
+	 * aligned with the erasesize at the appropriate addresses.
+	 */
+
+	i = 0;
+
+        /* Skip all erase regions which are ended before the start of
+           the requested erase. Actually, to save on the calculations,
+           we skip to the first erase region which starts after the
+           start of the requested erase, and then go back one.
+        */
+        while ((i < mtd->numeraseregions) &&
+	       (instr->addr >= regions[i].offset)) 
+	{
+               i++;
+	}
+        i--;
+
+	/* OK, now i is pointing at the erase region in which this
+	 * erase request starts. Check the start of the requested
+	 * erase range is aligned with the erase size which is in
+	 * effect here.
+	 */
+	if (instr->addr & (regions[i].erasesize-1)) 
+		return -EINVAL;
+
+	/* Remember the erase region we start on. */
+	first = i;
+
+	/* Next, check that the end of the requested erase is aligned
+	 * with the erase region at that address.
+	 */
+
+	while ((i < mtd->numeraseregions) &&
+	       ((instr->addr + instr->len) >= regions[i].offset)) 
+	{
+                i++;
+	}
+
+	/* As before, drop back one to point at the region in which
+	 * the address actually falls.
+	 */
+	i--;
+
+	if ((instr->addr + instr->len) & (regions[i].erasesize-1)) 
+                return -EINVAL;
+	
+
+	adr = instr->addr;
+	len = instr->len;
+	i = first;
+
+	while (len) 
+	{
+		ret = erase_one_block(map, &private->chips, adr);
+
+		if (ret) 
+			return ret;
+
+		adr += regions[i].erasesize;
+		len -= regions[i].erasesize;
+	}
+
+	instr->state = MTD_ERASE_DONE;
+	mtd_erase_callback(instr);
+
+	return 0;
+}
diff --git a/drivers/mtd/spichips/spiflash.h b/drivers/mtd/spichips/spiflash.h
new file mode 100644
index 0000000..2ec2eb4
--- /dev/null
+++ b/drivers/mtd/spichips/spiflash.h
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __LINUX_SPI_H__
+#define __LINUX_SPI_H__
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/list.h>
+#include <linux/string.h>
+#include <linux/spinlock.h>
+#include <linux/device.h>
+#include <linux/interrupt.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+#include <linux/mtd/flashchip.h>
+#include <linux/dma-mapping.h>
+#include <linux/wait.h>
+#include <linux/delay.h>
+#include <asm/delay.h>
+#include <linux/semaphore.h>
+#define CFG_FLASH_SPI_DRIVER 1   /* Need for compile the modules */
+/*---------------------------------------------------------------------------
+ The folllowing should match exactly with its uboot counterpart spiflash.h
+----------------------------------------------------------------------------*/
+
+#define DEVICE_TYPE_X8	(8 / 8)
+#define DEVICE_TYPE_X16	(16 / 8)
+#define DEVICE_TYPE_X32	(32 / 8)
+
+#define SPI_READ_PAGE_SIZE (4*1024)			/* 4K page size */
+#define SPI_WRITE_PAGE_SIZE  256
+
+#define MAX_ERASE_REGIONS    4	
+
+struct spi_flash_info 
+{
+	const char *name;
+	const __u8  mfr_id;
+	const __u16 dev_id;
+	const __u32 operationmode;	
+	const uint64_t size;
+	const unsigned int max_clock;
+	const int numeraseregions;
+	const __u8 address32;
+	const struct mtd_erase_region_info regions[MAX_ERASE_REGIONS];
+};
+
+typedef enum spidir 
+{
+	SPI_NONE = 0,
+	SPI_READ = 1,
+	SPI_WRITE = 2
+} SPI_DIR;
+
+struct spi_ctrl_driver 
+{
+	struct module *module;
+	struct semaphore lock;
+	char *name;
+	struct list_head list;
+
+	/* Supports operation mode */
+	int operation_mode_mask;
+
+	/* Supports fast read at higher frequency */
+	int  fast_read;		
+
+	/* Supports fast write at higher frequency */
+	int  fast_write;
+
+	/* Max datasize to be used to read type functions in spi_transfer*/
+	int  max_read;		
+
+	/* spi_transfer can be used for all type of spi access */
+	int  (*spi_transfer)(int bank,unsigned char *cmd,int cmdlen, SPI_DIR dir, 
+				unsigned char *data, unsigned long datalen);
+
+	/* spi_burst_read is not NULL, if the ctrl supports read large data continuosly */
+	int  (*spi_burst_read)(int bank,unsigned char *cmd,int cmdlen, SPI_DIR dir, 
+				unsigned char *data, unsigned long  datalen);
+
+	int (*spi_configure_clock)(int bank, unsigned int clock);
+	
+#ifdef __UBOOT__   
+	int  (*spi_init)(void);
+#endif
+};
+
+struct spi_chip_driver 
+{
+	struct module *module;
+	struct semaphore lock;
+	char *name;
+	struct list_head list;
+	int (*probe)(int bank,struct spi_ctrl_driver *ctlr_drv, struct spi_flash_info *chip_info);
+	void (*unlock_sector)   (struct map_info *map, unsigned long sect_addr,int unlock);
+	int  (*is_sector_locked)(struct map_info *map, unsigned long sect_addr);
+	int  (*erase_sector)	(struct map_info *map, unsigned long sect_addr);
+	int  (*read_bytes)      (struct map_info *map, loff_t addr, size_t bytes, unsigned char *buf);
+	int  (*write_bytes)     (struct map_info *map, loff_t addr, size_t bytes, const unsigned char *buf);
+	void (*sync)		(struct map_info *map);
+	int  (*suspend)		(struct map_info *map);
+	void (*resume)		(struct map_info *map);
+};
+
+struct spi_flash_private 
+{
+	int device_type;
+	int interleave;
+	int numchips;
+	unsigned long chipshift;
+	__u8 address32;
+	struct flchip chips;
+	struct spi_chip_driver *chip_drv;
+	struct spi_ctrl_driver *ctrl_drv;
+};
+
+/* SPI Core Functions to register,access chip and controller drivers */
+struct spi_chip_driver *get_spi_chip_driver_by_index (int index);
+struct spi_chip_driver *get_spi_chip_driver_by_name (const char *name);
+struct spi_ctrl_driver *get_spi_ctrl_driver_by_index (int index);
+struct spi_ctrl_driver *get_spi_ctrl_driver_by_name (const char *name);
+void register_spi_chip_driver(struct spi_chip_driver *drv);
+void unregister_spi_chip_driver(struct spi_chip_driver *drv);
+void register_spi_ctrl_driver(struct spi_ctrl_driver *drv);
+void unregister_spi_ctrl_driver(struct spi_ctrl_driver *drv);
+
+/* Functions registered to MTD  for accessing the chips */
+int  spi_flash_read(struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+int  spi_flash_write(struct mtd_info *, loff_t, size_t, size_t *,const u_char *);
+int  spi_flash_erase(struct mtd_info *, struct erase_info *);
+void spi_flash_sync(struct mtd_info *);
+int  spi_flash_suspend(struct mtd_info *);
+void spi_flash_resume(struct mtd_info *);
+int  spi_flash_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
+int  spi_flash_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
+
+/* Generic spi funtions which can be used by any spi device (if uses generic algo) */
+int spi_generic_write_enable(int bank,struct spi_ctrl_driver *ctrl_drv);
+int spi_generic_read_enable(int bank,struct spi_ctrl_driver *ctrl_drv);
+int spi_generic_read_status(int bank,struct spi_ctrl_driver *ctrl_drv,unsigned char *status);
+int spi_generic_write_status(int bank,struct spi_ctrl_driver *ctrl_drv, unsigned char status);
+int spi_generic_erase(struct map_info *map, unsigned long sect_addr);
+int spi_generic_read(struct map_info *map, loff_t addr, size_t bytes, unsigned char *buff);
+int spi_generic_write(struct map_info *map, loff_t addr, size_t bytes, const unsigned char *buff);
+int spi_generic_probe(int bank, struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info,
+			char *spi_name,struct spi_flash_info *spi_list, int spi_list_len);
+
+#ifdef CONFIG_SPX_FEATURE_GLOBAL_BKUP_FLASH_BANKS
+#define MAX_SPI_BANKS	(CONFIG_SPX_FEATURE_GLOBAL_FLASH_BANKS + CONFIG_SPX_FEATURE_GLOBAL_BKUP_FLASH_BANKS)
+#else
+#define MAX_SPI_BANKS	CONFIG_SPX_FEATURE_GLOBAL_FLASH_BANKS
+#endif
+
+#endif
diff --git a/drivers/mtd/spichips/spimtd.c b/drivers/mtd/spichips/spimtd.c
new file mode 100644
index 0000000..3c3a3c0
--- /dev/null
+++ b/drivers/mtd/spichips/spimtd.c
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "spiflash.h"
+
+static struct mtd_info * spi_flash_probe(struct map_info *map);
+static void spi_flash_destroy(struct mtd_info *mtd);
+
+static struct mtd_chip_driver spi_flash_chipdrv = 
+{
+	.probe = spi_flash_probe,
+	.destroy = spi_flash_destroy,
+	.name = "spi_probe",
+	.module = THIS_MODULE
+};
+
+unsigned long ractrends_spiflash_flash_id[MAX_SPI_BANKS];
+unsigned long ractrends_spiflash_flash_size[MAX_SPI_BANKS];
+
+/*------------------------------------------------------------------------------*/
+/*                               Probe Function       			                */
+/*------------------------------------------------------------------------------*/
+static
+int
+probe_spi_chips(struct map_info *map,struct spi_flash_private *private,
+							struct spi_flash_info *spi_info)
+{
+	int bank = map->map_priv_1;
+	int req = 0;
+	int ctrl,chip;
+	int gotindex;
+	struct spi_chip_driver *chip_drv;
+	struct spi_ctrl_driver *ctrl_drv;
+	
+	gotindex=0;
+
+	/* For Every Controller driver */
+	ctrl = 0;
+	ctrl_drv = get_spi_ctrl_driver_by_index(ctrl);
+	while (ctrl_drv != NULL)
+	{
+		/* For Every Chip driver */
+		chip = 0;
+		chip_drv = get_spi_chip_driver_by_index(chip);
+		while (chip_drv != NULL)
+		{	
+			/* Probe for the chip on the controller */
+			if (chip_drv->probe(bank,ctrl_drv,spi_info) == 0)
+			{
+				/* If success, check if it is the requested index */
+				if (req == gotindex)
+				{
+					private->chip_drv = chip_drv;
+					private->ctrl_drv = ctrl_drv;
+					return 0;
+				}
+				gotindex++;
+			}
+			/* Try Next chip */
+			chip++;
+			chip_drv = get_spi_chip_driver_by_index(chip);
+		}
+		/* Try next controller */
+		ctrl++;
+		ctrl_drv = get_spi_ctrl_driver_by_index(ctrl);
+	}
+	return -1;
+}
+	
+static int configure_spi_clock(struct spi_ctrl_driver *ctrl_drv, int bank, unsigned int clock)
+{
+	if (ctrl_drv->spi_configure_clock == NULL)
+		return 0;
+	
+	return ctrl_drv->spi_configure_clock(bank, clock);
+}
+
+/*--------------------------------------------------------------------------------------*/
+/*                               Interfaces to MTD Module                               */
+/*--------------------------------------------------------------------------------------*/
+static struct mtd_info *
+spi_flash_probe(struct map_info *map)
+{
+	struct mtd_info *mtd;
+	struct spi_flash_private *private;
+
+	struct spi_flash_info spi_info;
+	struct flchip chips;
+	int j,i;
+
+
+	private = kmalloc(sizeof(*private) + sizeof(struct flchip) , GFP_KERNEL);
+	if (!private) 
+	{
+		printk(KERN_WARNING
+		       "%s: kmalloc failed for private structure\n", map->name);
+		return NULL;
+	}
+	memset(private,0,sizeof(*private) + (sizeof(struct flchip)));
+
+	mtd = (struct mtd_info*)kmalloc(sizeof(*mtd), GFP_KERNEL);
+	if (!mtd) 
+	{
+		printk(KERN_WARNING
+		       "%s: kmalloc failed for info structure\n", map->name);
+		return NULL;
+	}
+	memset(mtd, 0, sizeof(*mtd));
+
+	mtd->priv = map;
+
+	memset(&spi_info, 0, sizeof(spi_info));
+	if (probe_spi_chips(map,private,&spi_info) == -1)
+	{
+		printk(KERN_WARNING
+		       "%s: No spi compatible flash device found\n",
+		       map->name);
+		map->fldrv_priv = NULL;
+		kfree(mtd);
+		kfree(private);
+		return NULL;
+	}
+
+	/* Fill flash ID and size in public array */
+	ractrends_spiflash_flash_id[map->map_priv_1] = ((spi_info.mfr_id << 16) | spi_info.dev_id);
+	ractrends_spiflash_flash_size[map->map_priv_1] = spi_info.size;
+
+	configure_spi_clock(private->ctrl_drv, map->map_priv_1, spi_info.max_clock);
+
+	chips.start = 0;
+	chips.state = FL_READY;
+
+
+	/* Fill in the mtd  structures */
+	mtd->size = spi_info.size;
+	mtd->numeraseregions = spi_info.numeraseregions;
+
+	/* Allocate memory for erase regions */
+	mtd->eraseregions = kmalloc(sizeof(struct mtd_erase_region_info) *
+				    mtd->numeraseregions, GFP_KERNEL);
+	if (!mtd->eraseregions) 
+	{
+		printk(KERN_WARNING "%s: Failed to allocate "
+		       "memory for MTD erase region info\n", map->name);
+		kfree(mtd);
+		kfree(private);
+		map->fldrv_priv = NULL;
+		return NULL;
+	}
+
+	/* Fill in the mtd erase structures */
+	for (j = 0; j < spi_info.numeraseregions; j++) 
+	{
+		mtd->eraseregions[j].offset = spi_info.regions[j].offset;
+		mtd->eraseregions[j].erasesize = spi_info.regions[j].erasesize;
+		mtd->eraseregions[j].numblocks = spi_info.regions[j].numblocks;
+		if (mtd->erasesize <  mtd->eraseregions[j].erasesize) 
+			mtd->erasesize = mtd->eraseregions[j].erasesize;
+	}
+
+
+	/* Fill in the remaining mtd structure */
+	mtd->type = MTD_NORFLASH;
+	mtd->flags = MTD_CAP_NORFLASH;
+	mtd->name = map->name;
+	mtd->_erase = spi_flash_erase;
+	mtd->_read = spi_flash_read;
+	mtd->_write = spi_flash_write;
+	mtd->_sync = spi_flash_sync;
+	mtd->_suspend = spi_flash_suspend;
+	mtd->_resume = spi_flash_resume;
+	mtd->_lock = spi_flash_lock;
+	mtd->_unlock = spi_flash_unlock;
+	mtd->writesize = 1;
+
+	/* Fill in the private structure */
+	private->numchips = 1;
+	private->device_type = DEVICE_TYPE_X8;
+	private->interleave = 1;
+	private->address32 = spi_info.address32;
+	memcpy(&private->chips, &chips,sizeof(struct flchip) * private->numchips);
+	for (i = 0; i < private->numchips; i++) 
+	{
+		init_waitqueue_head(&private->chips.wq);
+		mutex_init(&private->chips.mutex);
+	}
+
+	/* Fill in the map structure */
+	map->fldrv_priv = private;
+	map->bankwidth = 1; 
+	map->fldrv = &spi_flash_chipdrv;
+	__module_get(THIS_MODULE);
+
+	return mtd;
+}
+
+
+static void 
+spi_flash_destroy(struct mtd_info *mtd)
+{
+	struct map_info *map = mtd->priv;
+	struct spi_flash_private *private = map->fldrv_priv;
+	kfree(private);
+}
+
+
+int __init 
+spi_flash_init(void)
+{
+	register_mtd_chip_driver(&spi_flash_chipdrv);
+	return 0;
+}
+
+void __exit 
+spi_flash_exit(void)
+{
+	unregister_mtd_chip_driver(&spi_flash_chipdrv);
+}
+
+module_init(spi_flash_init);
+module_exit(spi_flash_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("Core SPI with MTD Interface");
+
diff --git a/drivers/mtd/spichips/spireg.c b/drivers/mtd/spichips/spireg.c
new file mode 100644
index 0000000..09aaa51
--- /dev/null
+++ b/drivers/mtd/spichips/spireg.c
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifdef __UBOOT__	
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+DEFINE_SPINLOCK(spi_chip_drvs_lock);
+LIST_HEAD(spi_chip_drvs_list);
+DEFINE_SPINLOCK(spi_ctrl_drvs_lock);
+LIST_HEAD(spi_ctrl_drvs_list);
+
+void 
+register_spi_chip_driver(struct spi_chip_driver *drv)
+{
+	spin_lock(&spi_chip_drvs_lock);
+	list_add(&drv->list, &spi_chip_drvs_list);
+	spin_unlock(&spi_chip_drvs_lock);
+}
+
+void 
+unregister_spi_chip_driver(struct spi_chip_driver *drv)
+{
+	spin_lock(&spi_chip_drvs_lock);
+	list_del(&drv->list);
+	spin_unlock(&spi_chip_drvs_lock);
+}
+
+void 
+register_spi_ctrl_driver(struct spi_ctrl_driver *drv)
+{
+	spin_lock(&spi_ctrl_drvs_lock);
+	list_add(&drv->list, &spi_ctrl_drvs_list);
+	spin_unlock(&spi_ctrl_drvs_lock);
+}
+
+void 
+unregister_spi_ctrl_driver(struct spi_ctrl_driver *drv)
+{
+	spin_lock(&spi_ctrl_drvs_lock);
+	list_del(&drv->list);
+	spin_unlock(&spi_ctrl_drvs_lock);
+}
+
+struct spi_chip_driver *
+get_spi_chip_driver_by_name (const char *name)
+{
+	struct list_head *pos;
+	struct spi_chip_driver *ret = NULL, *this;
+
+	spin_lock(&spi_chip_drvs_lock);
+
+	list_for_each(pos, &spi_chip_drvs_list) {
+		this = list_entry(pos, typeof(*this), list);
+
+		if (!strcmp(this->name, name)) {
+			ret = this;
+			break;
+		}
+	}
+	if (ret && !try_module_get(ret->module))
+		ret = NULL;
+
+	spin_unlock(&spi_chip_drvs_lock);
+
+	return ret;
+}
+
+struct spi_chip_driver *
+get_spi_chip_driver_by_index (int index)
+{
+	struct list_head *pos;
+	struct spi_chip_driver *ret = NULL, *this;
+	int got;
+
+	spin_lock(&spi_chip_drvs_lock);
+	
+	got=0;
+	list_for_each(pos, &spi_chip_drvs_list) {
+		this = list_entry(pos, typeof(*this), list);
+
+		if (index == got) {
+			ret = this;
+			break;
+		}
+		got++;
+	}
+	if (ret && !try_module_get(ret->module))
+		ret = NULL;
+
+	spin_unlock(&spi_chip_drvs_lock);
+
+	return ret;
+}
+
+
+struct spi_ctrl_driver *
+get_spi_ctrl_driver_by_name (const char *name)
+{
+	struct list_head *pos;
+	struct spi_ctrl_driver *ret = NULL, *this;
+
+	spin_lock(&spi_ctrl_drvs_lock);
+
+	list_for_each(pos, &spi_ctrl_drvs_list) {
+		this = list_entry(pos, typeof(*this), list);
+
+		if (!strcmp(this->name, name)) {
+			ret = this;
+			break;
+		}
+	}
+	if (ret && !try_module_get(ret->module))
+		ret = NULL;
+
+	spin_unlock(&spi_ctrl_drvs_lock);
+
+	return ret;
+}
+
+struct spi_ctrl_driver *
+get_spi_ctrl_driver_by_index (int index)
+{
+	struct list_head *pos;
+	struct spi_ctrl_driver *ret = NULL, *this;
+	int got;
+
+	spin_lock(&spi_ctrl_drvs_lock);
+
+	got=0;
+	list_for_each(pos, &spi_ctrl_drvs_list) {
+		this = list_entry(pos, typeof(*this), list);
+
+		if (index == got) {
+			ret = this;
+			break;
+		}
+		got++;
+	}
+	if (ret && !try_module_get(ret->module))
+		ret = NULL;
+
+	spin_unlock(&spi_ctrl_drvs_lock);
+
+	return ret;
+}
+
+
+
+EXPORT_SYMBOL(get_spi_chip_driver_by_name);
+EXPORT_SYMBOL(get_spi_chip_driver_by_index);
+EXPORT_SYMBOL(get_spi_ctrl_driver_by_name);
+EXPORT_SYMBOL(get_spi_ctrl_driver_by_index);
+EXPORT_SYMBOL(register_spi_ctrl_driver);
+EXPORT_SYMBOL(unregister_spi_ctrl_driver);
+EXPORT_SYMBOL(register_spi_chip_driver);
+EXPORT_SYMBOL(unregister_spi_chip_driver);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("Core routines for (un)registering  spi chip and controller drivers");
+
+#endif
diff --git a/drivers/mtd/spichips/winbond.c b/drivers/mtd/spichips/winbond.c
new file mode 100644
index 0000000..03b203c
--- /dev/null
+++ b/drivers/mtd/spichips/winbond.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2007 American Megatrends Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifdef __UBOOT__	
+#include <common.h>
+#endif
+#include "spiflash.h"
+#ifdef	CFG_FLASH_SPI_DRIVER
+
+/* Name, ID1, ID2 , Size, Clock, Erase regions, address mode,{ Offset, Erase Size, Erase Block Count } */
+/* address mode: 0x00 -3 byte address
+			      0x01 - 4 byte address	
+			      0x02 - Low byte: 3 byte address, High byte: 4 byte address*/
+static struct spi_flash_info winbond_data [] = 
+{
+	/* Winbond 64 K Sectors */
+	{ "Winbond W25X64" , 0xEF, 0x1730, 0x00010007, 0x800000 , 75  * 1000000,  1, 0x00, {{ 0, 64  * 1024, 128 },} },
+	{ "Winbond W25Q32" , 0xEF, 0x1640, 0x0001000F, 0x400000 , 75  * 1000000 , 1, 0x00, {{ 0, 64  * 1024, 128 },} },
+	{ "Winbond W25Q64" , 0xEF, 0x1740, 0x0001000F, 0x800000 , 80  * 1000000,  1, 0x00, {{ 0, 64  * 1024, 128 },} },
+	{ "Winbond W25Q128", 0xEF, 0x1840, 0x0001000F, 0x1000000, 104 * 1000000,  1, 0x00, {{ 0, 64  * 1024, 256 },} },
+	{ "Winbond W25Q256", 0xEF, 0x1940, 0x0001000F, 0x2000000, 104 * 1000000,  1, 0x02, {{ 0, 64  * 1024, 512 },} },
+	{ "Winbond W25M512", 0xEF, 0x1971, 0x0001000f, 0x4000000, 104 * 1000000,  2, 0x06, {{ 0, 64  * 1024, 512 },{ 0x2000000, 64  * 1024, 512 },} },
+};
+
+static
+int 
+winbond_probe(int bank,struct spi_ctrl_driver *ctrl_drv, struct spi_flash_info *chip_info)
+{
+	int retval;
+	retval = spi_generic_probe(bank,ctrl_drv,chip_info,"winbond",
+						winbond_data,ARRAY_SIZE(winbond_data));	
+
+	if (retval == -1)
+		return retval;
+
+	/* UnProctect all sectors */
+ 	/* SRWD=0 (Bit 7)  BP0,BP1,BP2 = 0 (Bit 2,3,4) */
+	if (spi_generic_write_status(bank,ctrl_drv,0x0) < 0)
+		printk("winbond: Unable to Unprotect all sectors\n");
+
+	return retval;
+}
+
+struct spi_chip_driver winbond_driver =
+{
+	.name 		= "winbond",
+	.module 	= THIS_MODULE,
+	.probe	 	= winbond_probe,
+	.erase_sector 	= spi_generic_erase,
+	.read_bytes	= spi_generic_read,
+	.write_bytes	= spi_generic_write,
+};
+
+int 
+winbond_init(void)
+{
+	sema_init(&winbond_driver.lock, 1);
+#ifdef __UBOOT__	/* MIPS */
+	winbond_driver.probe	 		= winbond_probe;
+	winbond_driver.erase_sector 	= spi_generic_erase;
+	winbond_driver.read_bytes	= spi_generic_read;
+	winbond_driver.write_bytes	= spi_generic_write;
+#endif
+	register_spi_chip_driver(&winbond_driver);
+	return 0;
+}
+
+void 
+winbond_exit(void)
+{
+	sema_init(&winbond_driver.lock, 1);
+	unregister_spi_chip_driver(&winbond_driver);
+	return;
+}
+
+module_init(winbond_init);
+module_exit(winbond_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("American Megatrends Inc");
+MODULE_DESCRIPTION("MTD SPI driver for Winbond flash chips");
+
+#endif
-- 
1.9.1

#464 Re: 全志 SOC » 请教F1C100S的 USB Host的kernel配置 » 2019-05-13 15:34:33

也有可能本来就是这样,只是告诉用户 cdc 驱动准备好了,没有别的意思

#468 Re: 全志 SOC » 在F1C100s Nano上使用wifi模块 » 2019-05-12 18:40:13

刘少来了 说:
kekemuyu 说:

想要同时使用tf卡和wifi怎么办(tf卡做系统盘)?

nano好像只有一个SDIO,ZERO有两个

有两个sdio,但是另外一个是1bit的,而且不能启动,应该只能做TF卡用吧?

#469 Re: 全志 SOC » 求助,全志V3怎么配置HDMI? » 2019-05-12 18:38:34

没看懂,全志v3s恐怕没有 HDMI外设吧?

#470 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 闲鱼淘宝性价比电子产品推荐 (一) » 2019-05-11 23:34:08

33 包邮, 还送外壳, 看起来挺不错, 可是还没想到双目摄像头可以用来做什么应用呢

#472 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » Qserialport类的使用 » 2019-05-11 23:27:30

可能驱动为了效率, 不会收到一个字节就推一个字节给应用程序, 而是累积一定的数据或者一定的时间才推送.

#475 Re: 全志 SOC » 有没有音频放大器推荐? » 2019-05-09 09:31:21

Quotation 说:

软件可调是需要调什么?

i2c,spi这种吧,我见过能调的都是i2s声卡芯片

#476 Re: Cortex M0/M3/M4/M7 » 有用过spi的100M网卡的朋友吗,想用低端stm32驱动,大家怎么看? » 2019-05-09 00:27:49

凿子树 说:

谁有10M的网上模块或芯片?哦,只有10M的,不是100M/10M的。

RTL8019AS或ENC28J60模块,淘宝应该有卖。

#477 Re: 全志 SOC » f1c100s调起4.3寸800x480液晶屏 » 2019-05-08 11:13:05

zhenfanhei 说:

现在已经是16bit了, RGB565了,发现uboot里面也是用的ARGB8888的,浪费啊,==都试下改成16bit

请教是怎么搞定的?

#480 Re: 全志 SOC » 网友 @chong 提供的 f1c100s linux 下直接写 spi nand u-boot的golang程序代码 » 2019-05-06 10:26:00

kekemuyu 说:

f1c100s可以运行go程序吗?网友 @chong的连接有吗?

看下对dram有没有需求,否则是可以跑的,这个片子是32M dram的。

#482 Re: 全志 SOC » 围观蓝莓派(Blueberry-PI)之后, 一定要试一试 主线 Linux DVP CSI 摄像头 » 2019-05-04 20:41:12

v4l2-ctl --set-fmt-video=width=400,height=300,pixelformat=JPEG

v4l2-ctl --get-fmt-video

设置参数, 读参数都正常, 但是抓数据只能用固定的分辨率, 不知道为什么

fswebcam -S 1 -d /dev/video0 -p UYVY -r 1600x1200 test.jpg

#483 Re: 全志 SOC » 全志芯片主线Linux 启动 eMMC 8-bit 模式测试 » 2019-05-02 14:47:27

感谢分享, 看来我应该使用 1bit 模式, 抠出 3个 IO口出来.

#484 Re: 全志 SOC » 感谢华嵌HQEmbed赠送的 漂亮高颜值S3 开发板 (底板 + 核心板) » 2019-04-30 16:43:50

zhenfanhei 说:

邮票孔拆焊风嘴不用定制,直接有现成的,刚好gk7102   S3两种核心板可用,到了试一下
https://whycan.cn/files/members/428/none.png

还有这种玩意, 真是涨见识了。。。

#486 Re: 全志 SOC » 感谢华嵌HQEmbed赠送的 漂亮高颜值S3 开发板 (底板 + 核心板) » 2019-04-29 22:07:15

A33 以前用在平板, 不过现在平板用得少了吧, 据说换了一个马甲 R16 继续卖.

#487 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » N32903 EDMA » 2019-04-27 17:16:32

easy111 说:

裸跑,用DMA做内存拷贝,比memcpy还慢了点。

这就尴尬了,应该比 memcpy 快,是用官方的demo吗?

#488 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » N32903 EDMA » 2019-04-27 16:28:27

效率还行吧,你用裸奔还是linux?

不过 arm9已经是一个过时的核心了,速度快不到哪里去

#489 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 第一次体验 JLC 嘉立创 SMT » 2019-04-25 16:35:59

sy373466062 说:
达克罗德 说:

一直都是找人手焊的,有机会我也用用JLC的SMT

找人手焊大概是如何收费的?  例如SSOP这种, USB Type A, 网口之类的。

按点收费,如果板上焊点多一般会制作治具,用波峰焊。

#490 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 哪里能找到AGM(AG16KSDF256)的FPGA开发资料? » 2019-04-25 09:44:35

这种策略一般有几种可能:
1. 芯片有bug怕大面积铺开之后覆水难收
2. 人员有限怕支持不过来
3. 根据二八定律根本不想卖给散户
4. 脑补中.....

#492 Re: 全志 SOC » 请问有人可以教一下怎么写lradc驱动吗? » 2019-04-24 20:29:55

渔头 说:
cityf 说:
渔头 说:

zero这个板真是太坑了,我的AD按键都调不出来,只有一个键有作用,
哪个兄弟碰到过ad按键的不行的问题的,指导一下

裸奔 还是 Linux ?
我的主线 Linux 没有问题


主线linux和camdroid都试过,
全部按键都松开,上电,我量那个VOL+按键上端的电压,只有0.27V,按道理应该3V低点才对,
断电后量这个点的电阻又都正常,对地,对3V0都是110K欧左右,怀疑是这个IO口坏了

那是可能坏了, 重新买一块吧, 时间比钱贵.

#493 Re: ESP32/ESP8266 » 关于ESP32的蓝牙速度太慢,Android端接收数据卡顿、乱序、丢包的问题 » 2019-04-24 09:59:01

难道蓝牙和 udp一样丢包和不保证顺序?
那只能靠上层软件协议来实现数据完整性了

#495 Re: 全志 SOC » 感谢华嵌HQEmbed赠送的 漂亮高颜值S3 开发板 (底板 + 核心板) » 2019-04-21 19:49:32

zhenfanhei 说:

@smartcar, 电容触摸500起订是23元, 液晶报价不一,我朋友没做了,之前是报给我是500片起订只要38元,不赚我的钱, 其它家的报价都不便宜,40多吧,要去谈的,现在都是看单次下多少,

也就是加起来61上下了, 挺不错的.

#496 Re: 全志 SOC » 感谢华嵌HQEmbed赠送的 漂亮高颜值S3 开发板 (底板 + 核心板) » 2019-04-21 18:45:17

zhenfanhei 说:

呵呵,要便宜早就遍地用了,这种屏都得找工厂订

找工厂订就是 500片 40元, 854*480 电容触摸 ?

#497 Re: 全志 SOC » QT在V3S上面运行的时候 中文乱码 » 2019-04-19 16:59:20

1.宋体、黑体、仿宋、隶属、楷体、幼圆 这些属于通用字体,没有著作权,是可以用来商用的。
2.淘宝购买字体需要版权方认可
3.五款免费字体
1、思源字体 adobe和Google合作开发的开元字体可以免费商用
2、站酷字体
3、庞门正道标题体
4、濑户字体
5、手书体中文简体



现在字体流氓也很多,不是随便就能用

#498 Re: 全志 SOC » 荔枝派Zero V3s开发板入坑记录 (TF/SD卡启动)(主线Linux,主线u-boot) » 2019-04-18 18:27:19

渔头 说:

没有,方向没错,只是换了个咪头,用导线引出来,没直接焊到板上

原来如此,学习了,怪不得我的录不到声音。

#500 Re: 全志 SOC » 荔枝派Zero V3s开发板入坑记录 (TF/SD卡启动)(主线Linux,主线u-boot) » 2019-04-18 17:42:48

渔头 说:
晕哥 说:

那现在录到声音了吗?

是把 MIC 焊下换个方向?

页脚

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

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