15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

作者标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

Author Archive by stormwind

《emmc》写入EMMC报IO错误

1、查看emmc是否存在

输入lsblk命令,是否可以看到有效的EMMC。如果可以查看到,说明已经识别有效EMMC,但是写入报IO操作,存在读写不稳定问题,可以采取降频来解决。

2、操作

apt-get update
apt-get install -y device-tree-compiler
cd /boot/dtb/amlogic/
dtc -I dtb -O dts -o meson-g12a-s905l3a-e900v22c.dts meson-g12a-s905l3a-e900v22c.dtb 


mmc@ffe0700,将max-frequency里面内容改成0x5f5e100。 

 dtc -I dts -O dtb -o meson-g12a-s905l3a-e900v22c.dtb meson-g12a-s905l3a-e900v22c.dts 

【晶晨】romboot打印初步解析 amlogic开机错误分析

romboot打印初步解析
本解析说明适用于: gxb/gxl/txl/axg/txhd/gxlx/gxlx2/txlx/g12A/G12B/SM1/TM2/A1/C1/C2/SC2/T5/T5D/T7/S4

romboot中默认将其打印从AO uart这一路输出

以gxb nand 平台为例,其romboot的打印如下:

GXBB:BL1:08dafd:0a8993;FEAT:E0FC3184;POC:3;RCY:0;EMMC:800;NAND:85;SD:0;READ:0;CHK:0;

其可以拆分为如下部分:
1. GXBB:主芯片内部代号

2. BL1:08dafd:0a8993;FEAT:E0FC3184; bootrom相关启动信息,安全相关的同事会用到。

3. POC:3; Power on Config信息。表明设备启动顺序,可以参考下面的表格:

POC 1st Boot device 2nd Boot device 3rd Boot device 4th Boot device
0   USB SPI NAND/eMMC   SD Card
1   SPI NAND/eMMC   SD Card USB
2   USB NAND/eMMC   SD Card  -
3   NAND/eMMC   SD Card  USB     -

4. RCY:0; HDMI recovery接口读到的值,可以实现更改第一启动介质的目的,通常用于拯救烧错主存储介质的板子,在开发阶段尤为有用;

        0为无hdmi recovery小板;

        1为usb boot的hdmi recovery小板;

        2为sdcard boot的hdmi recovery小板;

5. EMMC:800;NAND:85;SD:0;READ:0;CHK:0

这个是默认的主存储介质的启动顺序,依序为EMMC->NAND->SD->USB,这里因为有烧好的启动卡插入,所以直接在sdcard这里跳了出来;

EMMC:800, 为emmc初始化过程,800表示报错,数值具体对应到emmc控制器的SD_EMMC_STATUS寄存器,此处800表示为resoponse timeout,这个报错信息无法看出是init过程中哪一条命令报错,最为有效的debug方式为接PA进行分析;

 
如果平台有焊接emmc,在初始化过程报了非0值,可以参照如下表格来确认是那条线的焊接不良;
Field
Name
Description
7:0
Rxd_err
RX data CRC error per wire,
for multiple block read, the CRC errors are Ored together.
8
Txd_err
TX data CRC error,
For multiple block write, any one of blocks CRC error.
9
Desc_err
SD/eMMC controller doesn’t own descriptor.
The owner bit is “0”, set cfg_ignore_owner to ignore this error.
10
Resp_err
Response CRC error
11
Resp_timeout
No response received before time limit.
The timeout limit is set by cfg_resp_timeout.
12
Desc_timeout
Descriptor execution time over time limit.
The timeout limit is set by descriptor itself.
Consider the multiple block read/write, set the proper timeout limits.
 
在焊接了emmc的情况下,EMMC初始化打印不为0,通常是hw相关的问题,需要顺序检查以下几个项目:
1. vcc/vccq的供电及上电顺序,二者上电间隔太长可能会引起emmc的初始化失败,详情可以咨询hw的fengjie(jie.feng@amlogic.com)
2. 如果是EMMC初始化报Resp_timeout/Resp_err,需请hw同事检查emmc的cmd线的连通性
3. 如果是EMMC初始化报Rxd_err/txd_err,需请hw同事检查对应的报错data线的连通性
**

Add @ 20180209

在G12A上,SD card的romboot初始化会首先检查GPIOC6的电平状态,如果为card未插入,则romboot会打印SD:20000 

**

NAND:85,为nand初始化过程报错,数值为错误码,常用错误码有

#define ERROR_NAND_TIMEOUT           0x81

#define ERROR_NAND_ECC                  0x82
#define ERROR_NAND_MAGIC_WORD   0x83
#define ERROR_NAND_INIT_READ        0x84
#define ERROR_NAND_BLANK_PAGE     0x85
 
SD:0;READ:0;CHK:0,为SD卡初始化OK,读取OK,并且校验OK;对于其他存储介质,在初始化OK后,同样会进行READ和CHK动作,返回值为0,则为OK,非0值,则有其各自对应的错误码,这里不做详细描述

【Linux】MTD 动态挂载SPI-NOR flash

1、配置psi-nor为驱动模块

 Device Drivers  --->   
   <*> Memory Technology Device (MTD) support  ---> 
     <M>   SPI NOR device support  ---> 

2、进入内核加载

modpro and insmod xxx.ko

spi-nor.ko

【openwrt】为新设备添加OpenWrt支持

注:此文转载openwrt wiki

为了全面了解如何添加新设备支持,我们建议您查看一台新设备相关的最新的commit,摸清楚哪些文件发生了修改和如何修改它们。这些文件非常方便理解,我们只需要去打开查看就能理解。

一、通过实例进行学习

一个好方法是通过示例学习,我们通过搜索mt300a这个版型文件来,找出需要修改的文件,所以你可以这样做:

grep -lri mt300a target/

显示结果是添加新板所需的最少文件列表:

target/linux/ramips/base-files/etc/board.d/01_leds
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/lib/upgrade/platform.sh
target/linux/ramips/base-files/lib/ramips.sh
target/linux/ramips/dts/GL-MT300A.dts
target/linux/ramips/image/mt7620.mk

二、重要文件

最重要的文件一般存放于以下目录:

/target/linux/<arch_name>/base-files/etc/…

该目录的文件和文件夹最终将会存放于设备固件的/etc/目录。

它一般包含下列的文件和文件夹:

  • …board.d/ 定义设备专用的默认硬件的脚本,如LED和网络接口。
  • …hotplug.d/ 定义设备专用的,在插入热插拔设备时自动运行的脚本
  • …init.d/ 定义设备专用的在启动时自动运行的脚本
  • …uci-defaults/ 定义设备专用的UCI默认设置
  • …diag.sh 定义设备显示的错误代码

/target/linux/<arch_name>/base-files/lib/…

该文件夹下的文件夹和文件对应固件中的/lib目录下文件夹和文件。

它的子文件夹和文件有:

  • …<arch_name>.sh 将阅读友好的设备名转化为脚本安全的设备名的脚本
  • …preinit/ 通用<arch_name>预初始化脚本
  • …upgrade/ 通用<arch_name>升级脚本

/target/linux/<arch_name>/base-files/sbin

该文件夹对应固件中的/sbin文件夹, 一般为通用的<arch_name> sbin脚本和工具.

/target/linux/<arch_name>/dts/

设备树源文件(Device tree source files, 简写为dts).

/target/linux/<arch_name>/image/

用于构建写入用镜像的设置文件。

/target/linux/<arch_name>/<board_name>/

设备专用的设置文件

/target/linux/<arch_name>/modules.mk

menuconfig中使用的架构专用(Arch-specific)配置文件

使新设备出现在make menuconfig中

在编辑了上述的文件后, 你需要对Makefile使用touch命令

touch target/linux/*/Makefile

三、补丁

子目录 patches-xxx 是对一个 目标版本xxx 的内核补丁.
它包含的文件名(’3个数字-全小写字母的简介.patch’)称含义如下:

0xx – 上游需要回退的内容补丁
1xx – 等待上游合并的代码补丁
2xx – 内核构建、配置和头文件的补丁
3xx – 用于特定体系结构的补丁
4xx – MTD相关的补丁(系统和设备方面)
5xx – 文件系统相关的补丁
6xx – 网络通用补丁
7xx – 网络物理层驱动补丁
8xx – 其他设备补丁
9xx – 未分类的其他补丁

所有的补丁发布都必须具有相比现阶段潜在的优势,如:

– 补丁必须具有合适明确的主题
– 必须有一个明确清晰的commit信息来解析补丁作出了什么样的改变
– 补丁必须包含一个签署人

四、镜像测试

测试镜像固件通过ramdisk镜像而不通过烧写到Flash。

make menuconfig配置中选择Target Images,然后再选择ramdisk选项。

这样将会编译生成一个kernel+inittramfs(内核加上内存根文件系统)的镜像文件,它的名字中将会包含initramfs。通过BootLoader的tftp功能可以将这个镜像文件导入到设备,这样可以在不需要flash文件系统的支持下进行启动。

1、小窍门

使用目标设备中的shell

为了获取到某个你感兴趣的OpenWrt设备的端口的相关数据,需要进行shell访问。但是大多数设备都没有提供使用telnet或者ssh连接shell的方法。

通过PING或者NTP功能进入shell

某些路由器提供ping测试或NTP服务器配置,并且可能无法正确清理用户输入。尝试输入shell脚本,看看您是否幸运。您可能需要一些JavaScript知识才能禁用客户端输入验证。

使用telnetd
$( /bin/busybox telnetd -l/bin/sh -p23 & )

如果需要远程登录,请使用HTTP获取密码哈希或使用“sed”删除/更改默认密码

$( cp /etc/shadow /www )
$( cp /etc/passwd /www )

然后尝试将他们下载到您的电脑并且破解哈希密码。

降级固件

某些路由器可能会在启动之初尝试从特定的专用IP下载固件文件(例如TP-Link Archer C2 AC750),从而允许用户降级到较旧的固件。

HTTP服务器漏洞

一些路由器可能正在运行过时/不安全的HTTP服务器,并且可能容易受到缓冲区溢出或其他攻击的影响。

网件

使用 netgear-telnetenable 许多网件设备都可以通过telnet进入,也可以查看 GitHub: insanid/NetgearTelnetEnable。如果无法使用这种方法,则可以尝试从启用了telnetd的供应商发布的源中刷新映像构建。

通过 nmrpflash许多网件设备可以被烧录,但是无法确定能够使用该工具的设备有哪些。

收集相关数据

WikiDevi上面许多信息可以被查询到,例如:FCC ID:十分的有用处当你搜寻文件的时候,datasheets和网络照片:能够无需打开机壳就能区分使用过的芯片。

通常可以使用以下的命令:

  dmesg                          # log buffer might be to small, see note 1.
  cat /proc/cmdline
  cat /proc/cpuinfo
  cat /proc/meminfo
  cat /proc/devices
  ls /sys/devices/platform
  cat /proc/mtd
  cat /sys/class/mtd/mtd*/offset # Linux 4.1 and newer, see note 2.
  ifconfig -a
  ls /sys/class/net
  brctl show
  cat /sys/kernel/debug/gpio     # GPIO information

注意1:通过dmesg检索时,如果日志的缓存区太小,就会丢失掉最早的信息。如果从供应商发布的资源中构建库存及镜像文件,则可以在内核配置中设置更大的缓冲区大小。

注意2:http://lxr.free-electrons.com/source/Documentation/ABI/testing/sysfs-class-mtd

获取设置LED信息的另一个有用的工具是gpiodump,它是MT7620 GPIOMODE寄存器转储器(RAMIPS)。

从设备获取数据

由于空间有限,常见的文件传输实用程序(例如rsync/curl/ssh/scp/ftp/http/tftp)可能不可用,精简版version/applet可能在busybox中可用。

假设路由器ip为192.168.0.123,要传输的文件位于/tmp/important-data.txt

HTTP通过”httpd”和”busybox mount”

如果从/www提供Web界面

Sender
mount -o bind /tmp /www

Receiver

wget http://192.168.0.123/important-data.txt

FTP通过“busybox ftpput”

Receiver

设置一个FTP服务器,添加一个具有写权限的匿名账号。

python -m pyftpdlib -w -p 21

Sender

busybox ftpput 192.168.0.123 important-data.txt /tmp/important-data.txt 

netcat通过“buxybox nc”

Receiver
busybox nc -l -p 12345 > important-data.txt 

Sender

cat /tmp/important-data.txt | busybox nc 192.168.0.123:12345

TFTP通过“busybox tftp”

Receiver

建立一个tftp服务器

Sender
busybox tftp -p -l /tmp/important-data.txt -r important-data.txt 192.168.0.123

通过终端(terminal)复制

如果上述所有工具/小工具都不可用,则可以从telnet终端进行复制,但不适用于二进制文件

【LX2160】增加SGMII新网口支持

一、Uboot支持网卡

1、修改设备树

vim components/firmware/uboot/arch/arm/dts/fsl-lx2160a-rdb.dts

&dpmac11 {
        status = "okay";
        phy-handle = <&sgmii_phy1>;
        phy-connection-type = "sgmii";
};

sgmii_phy1: ethernet-phy@3 {
                // RTL8211F PHY
                compatible = "ethernet-phy-id001c.c916", "ethernet-phy-id004d.d072";
                reg = <0x3>;
        };

2、修改驱动

vim components/firmware/uboot/board/freescale/lx2160a/eth_lx2160ardb.c

/*Begin:add by zhaobaoxing for sgmii*/
        srds_s2 = in_le32(&gur->rcwsr[28]) &
                  FSL_CHASSIS3_RCWSR28_SRDS2_PRTCL_MASK;
        srds_s2 >>= FSL_CHASSIS3_RCWSR28_SRDS2_PRTCL_SHIFT;
        /*End:add by zhaobaoxing for sgmii*/

/*Begin:add by zhaobaoxing for sgmii*/
        if (get_board_rev() == 'C') {
                setup_eth_rev_c(srds_s2);
                goto next;
        }
        /*End:add by zhaobaoxing for sgmii*/

/*Begin:add by zhaobaoxing for sgmii*/
        switch (srds_s2){
        case 10:
                wriop_set_phy_address(WRIOP1_DPMAC11, 0,
                                      SGMII_PHY_ADDR1);
                printf("warning: zhaobaoxing for serdes2\r\n");
                break;
        default:
                printf("SerDes2 protocol 0x%x is not supported on LX2160ARDB\n",
                               srds_s2);
                //goto next;
                break;
        }
        /*End:add by zhaobaoxing for sgmii*/

3、修改功能宏定义

vim components/firmware/uboot/configs/lx2160ardb_tfa_defconfig

#CONFIG_DM_ETH=y

二、Linux支持网卡

1、修改设备树

&dpmac11 {
          phy-handle = <&sgmii_phy1>;
          phy-connection-type = "sgmii";
};

sgmii_phy1: ethernet-phy@3 {
     // RTL8211F PHY
     compatible = "ethernet-phy-id001c.c916", "ethernet-phy-id004d.d072";
     reg = <0x3>;
};

三、板卡配置

1、修改rcw文件

vim components/firmware/rcw/lx2160ardb_rev2/XGGFF_PP_HHHH_RR_19_5_2/rcw_2200_750_3200_19_5_2.rcw

SRDS_PRTCL_S1=3 #10G 8  #25G 17 CPRI-10G=3
SRDS_PRTCL_S2=10 #10 #CPRI 5 #-5GC #3#-BBU #5
SRDS_PRTCL_S3=3 #2

2、修改DPC文件

vim components/firmware/mc_utils/config/lx2160a/LX2160A-RDB/dpc-usxgmii.dts

 ports {
                        mac@3 {
                                /*Begin:changed by zhaobaoxing for 10G sfp+*/
                                /*link_type = "MAC_LINK_TYPE_PHY";
                                enet_if = "USXGMII";
                                */
                                /*End:changed by zhaobaoxing for 10G sfp+*/
                                link_type = "MAC_LINK_TYPE_FIXED";
                                enet_if = "XFI";
                        };

                        mac@4 {
                                /*Begin:changed by zhaobaoxing for 10G sfp+*/
                                /*link_type = "MAC_LINK_TYPE_PHY";
                                enet_if = "USXGMII";
                                */
                                /*End:changed by zhaobaoxing for 10G sfp+*/
                                link_type = "MAC_LINK_TYPE_FIXED";
                                enet_if = "XFI";
                        };

                        mac@11 {
                                link_type = "MAC_LINK_TYPE_PHY";
                        };

                        mac@17 {
                                link_type = "MAC_LINK_TYPE_PHY";
                        };
                        mac@18 {
                                link_type = "MAC_LINK_TYPE_PHY";
                        };
                };

3、修改dpl文件

vim components/firmware/mc_utils/config/lx2160a/LX2160A-RDB/dpl-eth.19.dts

connections {

                connection@1{
                        endpoint1 = "dpni@0";
                        endpoint2 = "dpmac@3";
                };

                connection@2{
                        endpoint1 = "dpni@1";
                        endpoint2 = "dpmac@4";
                };

                connection@3{
                        endpoint1 = "dpni@2";
                        endpoint2 = "dpmac@5";
                };

                connection@4{
                        endpoint1 = "dpni@3";
                        endpoint2 = "dpmac@6";
                };

                connection@5{
                        endpoint1 = "dpni@4";
                        endpoint2 = "dpmac@7";
                };

                connection@6{
                        endpoint1 = "dpni@5";
                        endpoint2 = "dpmac@8";
                };

                connection@7{
                        endpoint1 = "dpni@6";
                        endpoint2 = "dpmac@9";
                };

                connection@8{
                        endpoint1 = "dpni@7";
                        endpoint2 = "dpmac@10";
                };

                connection@9{
                        endpoint1 = "dpni@8";
                        endpoint2 = "dpmac@11";
                };

                connection@10{
                        endpoint1 = "dpni@9";
                        endpoint2 = "dpmac@12";
                };

                connection@11{
                        endpoint1 = "dpni@10";
                        endpoint2 = "dpmac@17";
                };

                connection@12{
                        endpoint1 = "dpni@11";
                        endpoint2 = "dpmac@18";
                };
        };

【RK3568】gmac增加SGMII支持

一、SGMII+PHY

1、修改设备树

  • combophy

其中属性 rockchip,sgmii-mac-sel 表示使用的是哪个 gmac:

&combphy1_usq {
     + rockchip,sgmii-mac-sel = <0>; /* Use gmac0 for sgmii */
     status = "okay";
};
  • xpcs
&xpcs {
     status = "okay";
};
  • gmac0
&gmac0 {
     phy-mode = "sgmii";
     rockchip,pipegrf = <&pipegrf>;
     rockchip,xpcs = <&xpcs>;
     snps,reset-gpio = <&gpio2 RK_PC2 GPIO_ACTIVE_LOW>;
     snps,reset-active-low;
     snps,reset-delays-us = <0 20000 100000>;
     assigned-clocks = <&cru SCLK_GMAC0_RX_TX>;
     assigned-clock-parents = <&gmac0_xpcsclk>;
     pinctrl-names = "default";
     pinctrl-0 = <&gmac0_miim>;
     power-domains = <&power RK3568_PD_PIPE>;
     phys = <&combphy1_usq PHY_TYPE_SGMII>;
     phy-handle = <&sgmii_phy>;
     status = "okay";
};
&mdio0 {
     sgmii_phy: phy@1 {
     compatible = "ethernet-phy-ieee802.3-c22";
     reg = <0x1>;
     };
};
  • gmac1
&gmac1 {
     phy-mode = "sgmii";
     rockchip,pipegrf = <&pipegrf>;
     rockchip,xpcs = <&xpcs>;
     snps,reset-gpio = <&gpio2 RK_PC2 GPIO_ACTIVE_LOW>;
     snps,reset-active-low;
     snps,reset-delays-us = <0 20000 100000>;
     assigned-clocks = <&cru SCLK_GMAC1_RX_TX>;
     assigned-clock-parents = <&gmac1_xpcsclk>;
     pinctrl-names = "default";
     pinctrl-0 = <&gmac1_miim>;
     power-domains = <&power RK3568_PD_PIPE>;
     phys = <&combphy1_usq PHY_TYPE_SGMII>;
     phy-handle = <&sgmii_phy>;
     status = "okay";
};
&mdio1 {
    sgmii_phy: phy@1 {
        compatible = "ethernet-phy-ieee802.3-c22";
        reg = <0x1>;
    };
};

2、openwrt系统

驱动补丁:

3、其它系统

无操作

二、SGMII+非PHY

1、修改设备树

&gmac1 {
        phy-mode = "sgmii";

        rockchip,pipegrf = <&pipegrf>;
        rockchip,xpcs = <&xpcs>;

        assigned-clocks = <&cru SCLK_GMAC1_RX_TX>;
        assigned-clock-parents = <&gmac1_xpcsclk>;

        power-domains = <&power RK3568_PD_PIPE>;
        phys = <&combphy2 PHY_TYPE_SGMII>;

        status = "okay";

        fixed-link {
                speed = <1000>;
                full-duplex;
        };
};

2、驱动补丁

三、回环测试

1000baseX 走强制模式,PCS会自己link up,而SGMII 需要协商link, 这种情况一般是switch端没有固定好1000baseX模式的,之前rtl8310 switch端也是更新了很多次固件
我建议可以主控端先做一下回环,飞线要尽量短,
//driver 包产生
CONFIG_NET_PKTGEN=y
cd /proc/net/pktgen/
echo “add_device eth0” > /proc/net/pktgen/kpktgend_0
echo “pkt_size 1440” > /proc/net/pktgen/eth0
echo “count 99999999” > /proc/net/pktgen/eth0
echo “dst_mac FF:FF:FF:FF:FF:FF” > /proc/net/pktgen/eth0
echo “start” > /proc/net/pktgen/pgctrl
通过这种方式产生包,ifconfig 查看统计,确认能收到包。

【Ubuntu】systemback自定义系统镜像和系统备份

一、Systemback简介

Systemback是一个简单的系统备份和恢复应用程序,根据GPLv3许可条款发布。
Systemback的功能包括:
创建系统备份和用户配置文件。
将系统还原到以前的状态,就像Virtualbox的快照功能一样。
从现有安装创建可启动ISO文件。
将系统从一个分区复制到另一个分区。
升级软件。

二、安装 systemback

1、只在ubuntu16.04下在安装systemback

sudo add-apt-repository ppa:nemh/systemback
sudo apt update
sudo apt install systemback

2、在 18.04/19.10/20.04安装systemback

sudo add-apt-repository "deb http://ppa.launchpad.net/nemh/systemback/ubuntu xenial main"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 382003C2C8B7B4AB813E915B14E4942973C62A1B

sudo apt update
sudo apt install systemback

3、可以从应用程序菜单启动Systemback,需要输入密码才能使用此软件,输入密码后,单击确定按钮

三、使用 systemback

1、创建自定义镜像

2、制作镜像

  • 工作目录需要有读写权限(可自定义)
  • 系统名称,可自定义,也可默认
  • 包含用户数据文件(已有文件也会一共包含在镜像中,不过此时镜像可能较大,视实际情况处理)
  • 创建新的,开始制作

3、制作中

制作时间主要参考以下几个因素:

  • 系统硬件配置(越高越快)
  • 包含的数据大小(越小越快)

4、老版本软件中,可能不会同时生成iso,所以可能需要把sblive转换为iso。对于小于4G的sblive可以直接转换,如下:

5、对于大于4G的可以采用udf文件系统。下面就是具体的解决方法了

解压 .sblive 文件:

mkdir sblive
tar -xf /home/systemback_live_2016-04-27.sblive -C sblive

重命名 syslinux 至 isolinux:

mv sblive/syslinux/syslinux.cfg sblive/syslinux/isolinux.cfg
mv sblive/syslinux sblive/isolinux

安装 cdtools

sudo gedit https://nchc.dl.sourceforge.net/project/cdrtools/alpha/cdrtools-3.02a07.tar.gz
tar -xzvf cdrtools-3.02a07.tar.gz
cd cdrtools-3.02
make
sudo make install

生成 ISO 文件:

/opt/schily/bin/mkisofs -iso-level 3 -r -V sblive -cache-inodes -J -l -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -o sblive.iso sblive

【lx2160】外围驱动修改

一、DDR调试


1、备份ddr_init.c platform.mk文件
2、修改ddir_init.c udimm参数,由codewarrior生成
3、在platform.mk增加CONFIG_DDR_NODIMM := 1

二、外设调试


1、IIC3调试
修改文件:rcw_2200_750_3200_19_5_2.rcw
修改内容:IIC3_PMUX=2改为0
2、增加OLED驱动
修改文件:fsl-lx2160a-rdb.dts
修改内容:增加
&i2c2 {
clock-frequency = <400000>;
pinctrl-names = “default”;
status = “okay”;
ssd1306: oled@3c {
compatible = “solomon,ssd1306fb-i2c”;
reg = <0x3c>;
//pwms = <&pwm 4 3000>;
//reset-gpios = <&gpio2 7>;
solomon,width = <128>;
solomon,height = <64>;
solomon,page-offset = <0>;
//solomon,com-lrremap;
solomon,com-invdir;
//solomon,com-offset = <0>;
//solomon,lookup-table = /bits/ 8 <0x3f 0x3f 0x3f 0x3f>;
};
};

3、增加5386驱动
注意事项:5386寄存器存在页的概念,需要先选择页,在读写寄存器值,
手册写着寄存器16位,其中前8位是页号,后8位是寄存器地址,数据手册存在误导。
修改文件:fsl-lx2160a-rdb.dts
修改内容:增加
si5386a: sync-clk@68 {
compatible = “newu,si5386a”;
reg = <0x68>;

    };

三、PCI调试


1、pic802
原理图电容型号搞错

四、以太网
1、10G光口调试
restool dpmac info dpmac.6
修改文件:dpc-usxgmii.dts
修改内容:改变
mac@3 {
/Begin:changed by zhaobaoxing for 10G sfp+/
/*link_type = “MAC_LINK_TYPE_PHY”;
enet_if = “USXGMII”;
*/
/End:changed by zhaobaoxing for 10G sfp+/
link_type = “MAC_LINK_TYPE_FIXED”;
enet_if = “XFI”;
};

2、千兆网卡调试
修改文件:fsl-lx2160a-rdb.dts
修改内容:增加
rgmii_phy1: ethernet-phy@1 {
/* AR8035 PHY */
compatible = “ethernet-phy-id001c.c916”, “ethernet-phy-id004d.d072”;
reg = <0x1>;
eee-broken-1000t;
};

五、RTC调试


修改文件:fsl-lx2160a-rdb.dts
修改内容:增加
rtc: rtc@51 {
compatible = “nxp,pcf8563”;
reg = <0x51>;
#clock-cells = <0>;
};

【接口】PCIe M.2 SSD Socket 3接口信号详述

一、接口定义

1、PCIE <–> M2

2、SATA <–> M 2

二、管脚详细说明

M.2接口有SATA和PCIE两种总线,协议分别是AHC 。NVME,非易失性内存主机控制器接口规范(Non-Volatile Memory express),是一个逻辑设备接口规范。

M.2
SATA3.0总线PCIE3.0总线
          AHCI协议        NVME协议
600MB/秒3,200MB/秒

NVME协议跑在PCIE总线上,由于速率的不同,耦合电容的选取值有所不同,PCIE1.0和PCIE2.0的AC耦合电容选取值的范围在75nf-265nf(可以选用0.1uF的电容); PCIE3.0的AC耦合电容选取值的范围在176nf-265nf(可以选用0.22uF的电容);

PCIE时钟需要100nF电容耦合

走SATA的话,耦合电容需要是12nF以下

三、电路参考设计

CPU端设计,需要在TX端加电容,如下图:

M.2接口端设计如下:

        如果PCIE够用,M.2接口最大可以接入四对PCIE。两对也可以使用,只是 速率低一些。

下图便是LED的设计,外部M.2设备会在通讯是操作PIN10,所以板卡设计上可以设计一个LED,也可以做一个座子,可以接入LED线束。

M.2的座子,69PIN是区分设备是PCIE还是SATA设备。

        NC,H 为PCIE

        GND,L为SATA

如果考虑周到一些,可以在电源上再多加一些东西,如下:

使用FB隔离电源,加TVS管,保护后级电源。

【Openwrt】脚本自动部署守护进程

#!/bin/bash
openwrt(){
	echo "***************************************************"
	echo "*			Welcom to OpenWrt Platform				*"
	echo "***************************************************"

    # check_deps
    local source_dir="$PWD"
    local service_file="/etc/init.d/rulex.service"
    local executable="/usr/local/rulex"
    local working_directory="/usr/local/"
    local config_file="/usr/local/rulex.ini"
    local db_file="/usr/local/rulex.db"
cat > "$service_file" << EOL
#!/bin/sh /etc/rc.common

START=180

USE_PROCD=1

start_service() {
	procd_open_instance
	procd_set_param command "$executable run -config=$config_file -db=$db_file" 
	procd_set_param respawn 0
	procd_close_instance
}

stop_service(){
	service_stop "$executable"
}
EOL
	
	mkdir -p $working_directory
    chmod +x $source_dir/rulex
    cp -rfp "$source_dir/rulex" "$executable"
    cp -rfp "$source_dir/rulex.ini" "$config_file"
    
	chmod 777 $service_file
	$service_file enable 
	$service_file start 
	
    if [ $? -eq 0 ]; then
        echo "[√] Rulex service has been created and extracted."
    else
        echo "[x] Failed to create the Rulex service or extract files."
    fi
    exit 0
}