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.

月度归档 6月 29, 2022

【Centos】Centos8默认不支持SCTP

一、问题

#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/sctp.h>
#include <stdio.h>

int main()
{
        int i = socket(AF_INET,SOCK_STREAM,IPPROTO_SCTP);
        printf("huilh:%d\r\n",i);
        return 0;
}

执行后i=-1,通过系统指令checksctp检测,发现system not surpote。

二、解决方式

打开网址:https://centos.pkgs.org/,下载sctp rpm安装包,安装完。

yum -y install kernel-modules-extra

打开/etc/modprobe.d/sctp-blacklist.conf文件,注释掉blacklist sctp。把sctp从黑名单删除。

重启电脑。

【CentOs】安装htop

首先启用 EPEL Repository:

yum -y install epel-release

启用 EPEL Repository 後, 可以用 yum 直接安裝 Htop:

yum -y install htop

【Nxp】flexbuild_lsdk2108固件编译方法

一、通用指令

一、SD卡分区格式化
flex-installer -i pf -p 5P=200M:1536M:6G:-1 -d /dev/sdx

二、需要的下载包
firmware_ls1046afrwy_uboot_sdboot.img already exists ...
bootpartition_LS_arm64_lts_4.19.tgz already exists ...
rootfs_lsdk1909_LS_arm64_main.tgz already exists ...

三、下载包清楚指令
 flex-builder clean                          # clean all obsolete firmware/linux/apps image except distro rootfs
 flex-builder clean-rfs                      # clean distro rootfs, '-r ubuntu:main -a arm64' by default
 flex-builder clean-firmware                 # clean obsolete firmware image
 flex-builder clean-apps                     # clean obsolete apps component binary image
 flex-builder clean-linux 

二、ls1046 系统定制

1、下载包生成指令

$ flex-builder -i mkfw -m ls1046afrwy -b sd

$ flex-builder -i mkrfs -r ubuntu:main -m ls1046afrwy
$ flex-builder -c apps -r ubuntu:main -m ls1046afrwy

$ flex-builder -i mkboot -m ls1046afrwy -b sd

$ flex-builder -i merge-component -r ubuntu:main -m ls1046afrwy
$ flex-builder -i packrfs -r ubuntu:main -m ls1046afrwy

$ cd build/images
$ flex-installer -r rootfs_<sdk_version>_ubuntu_desktop_arm64.tgz -b boot_LS_arm64_lts_5.10.tgz -d /dev/sdx


$ flex-installer -i pf -d /dev/sdx   (partition and format the target storage device)
$ flex-installer -b boot_LS_arm64_lts_5.10.tgz -r rootfs_lsdk2108_ubuntu_main_arm64.tgz -f firmware_ls1046ardb_sdboot.img -d /dev/sdx

2、定制内核

 flex-builder -c linux:custom -a arm64  -m ls1046afrwy -b sd
 flex-builder -c linux -a arm64 -m ls1046afrwy -b sd

 flex-builder -i mkbootpartition -a arm64 -m ls1046afrwy -b sd

3、网络配置

auto fm1-mac1
iface fm1-mac1 inet dhcp

auto fm1-mac5
iface fm1-mac5 inet dhcp

auto fm1-mac6
iface fm1-mac6 inet dhcp

auto fm1-mac10
iface fm1-mac10 inet dhcp

4、SCTP协议栈支持

需要在内核选择确定。

三、LX2160 系统定制

1、编译内核

 flex-builder -c linux:custom -a arm64  -m lx2160ardb -b sd
 flex-builder -c linux -a arm64 -m lx2160ardb -b sd

 flex-builder -i mkbootpartition -a arm64 -m lx2160ardb -b sd

2、编译文件系统

 flex-builder -i mkrfs -r ubuntu:main -m lx2160ardb
 flex-builder -i packrfs -r ubuntu:main -m lx2160ardb

3、构建BOOTLOADER

 flex-builder -c atf -m lx2160ardb -b sd
 flex-builder -i mkfw -m lx2160ardb -b sd

 flex-builder -i mkfw -m lx2160ardb_rev2 -b sd

4、下载更新

 cd build/images
 flex-installer -r rootfs_<sdk_version>_ubuntu_desktop_arm64.tgz -b boot_LS_arm64_lts_5.10.tgz -d /dev/sdx

5、网络配置

dhclient 是网卡获取IP,可以上网。
安装network-manager

四、LX2160 REV2系统定制

1、编译内核

flex-builder -c linux:custom -a arm64 -m lx2160ardb_rev2 -b sd
flex-builder -c linux -a arm64 -m lx2160ardb_rev2 -b sd
flex-builder -i mkbootpartition -a arm64 -m lx2160ardb_rev2 -b sd

2、编译文件系统

flex-builder -i mkrfs -r ubuntu:main -m lx2160ardb_rev2
flex-builder -i packrfs -r ubuntu:main -m lx2160ardb_rev2

3、构建BOOTLOADER

flex-builder -c atf -m lx2160ardb_rev2 -b sd
flex-builder -i mkfw -m lx2160ardb_rev2 -b sd

flex-builder -c atf -m lx2160ardb_rev2 -b emmc
flex-builder -i mkfw -m lx2160ardb_rev2 -b emmc

4、下载更新

cd build/images
flex-installer -r rootfs__ubuntu_desktop_arm64.tgz -b boot_LS_arm64_lts_5.10.tgz -d /dev/sdx

5、网络配置

dhclient 是网卡获取IP,可以上网。
安装network-manager

6、实时补丁

 flex-builder -c linux:custom -a arm64  -m lx2160ardb_rev2 -b sd
 flex-builder -c linux:linux:LSDK-21.08-RT -a arm64 -m  lx2160ardb_rev2 -b sd
 flex-builder -i mkbootpartition -a arm64 -m lx2160ardb_rev2 -b sd

五、ARM DPDK Kmods编译

#KSRC ?= ./../../../flexbuild_lsdk2108/components/linux/linux/
KSRC ?= ./../../../flexbuild_lsdk2108/build/linux/linux/arm64/LS/output/LSDK-21.08/
ENV:=ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

all:
	        make $(ENV) -C $(KSRC)/ M=$(PWD)

clean:
	        make $(ENV) -C $(KSRC)/ M=$(PWD) clean

六、ARM DPDK 编译

flex-builder -c openssl -a arm64 # to resolve the dependency on OpenSSL package
flex-builder -c linux -a arm64 # to resolve the dependency of KNI module
flex-builder -c dpdk -a arm64 # build dpdk application
flex-builder -c pktgen_dpdk -a arm64 # to generate dpdk pktgen application
flex-builder -c ovs_dpdk # to generate ovs-dpdk binaries
flex-builder -i merge-component -a arm64 # merge app components into target rootfs

七、启动IEEE1588

1、IEEE1588开关配置

由于硬件设置问题,需要增加启动变量bootcmd。

修改RCW,增加如下代码:
EC2_PMUX=2

获取EC2状态(最高位有效):
i2cget -y 0 0x66 0x54

设置EC2状态(最高位有效):
i2cset -y 0 0x66 0x54 0xA0

Boot获取EC2状态(最高位有效):
i2c md.0 66 54

Boot设置EC2状态(最高位有效):
i2c mw.0 66 54 a0

2、寄存器配置1pps

tmr-ctl		        devmem2 0x8b95080 w 0xA0004	
tmr-add		        devmem2 0x8b950a0 w 0xcccccccd
tmr-prsc		devmem2 0x8b950a8 w 50000
tmr-fiper1		devmem2 0x8b950d0 w 0x3B9AC9F6
tmr-fiper2		devmem2 0x8b950d4 w 0x989676
tmr-fiper3		devmem2 0x8b950d8 w 0x7A116

八、FLASH更新固件

把固件从SD卡导入内存:
load mmc $load_addr firmware_lx2160ardb_rev2_xspiboot.img
load mmc 0:4 $load_addr firmware_lx2160ardb_xspiboot.img

格式化flash:
sf probe 0:0

写入FLASH:
sf erase 0 +$filesize && sf write $load_addr 0 $filesize

复位重启:
reset
qixis_reset
qixis_reset altbank

九、ARM OpenSSL

1、编译:

$ cd flexbuild
$ source setup.env
Build cryptodev-linux:
$ flex-builder -c cryptodev_linux -a arm64 # automatically setup cross-toolchain and fetch 
cryptodev-linux repository to build
Build OpenSSL:
$ flex-builder -c openssl -a arm64
Merge OpenSSL and cryptodev-linux components into target rootfs:
$ flex-builder -i merge-component -a arm64
Generate bootpartition tarball:
$ flex-builder -i mkbootpartition -a arm64
   flex-builder -i mkbootpartition -a arm64 -m lx2160ardb_rev2 -b sd

2、配置:

cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
修改为:
#include /etc/ld.so.conf.d/*.conf
# libc default configuration
/usr/local/lib
# Multiarch support
/usr/local/lib/aarch64-linux-gnu
/lib/aarch64-linux-gnu
/usr/lib/aarch64-linux-gnu
/usr/lib/aarch64-linux-gnu/libfakeroot

ldconfig

3、加载模块


modprobe caamalg_desc
modprobe caamhash_desc
modprobe dpaa2_caam
modprobe cryptodev
modprobe caamalg_qi
sudo modprobe caam
user@localhost:~$ sudo modprobe cryptodev
[sudo] password for user:

user@localhost:~$ ls /dev/crypto
/dev/crypto

user@localhost:~$ openssl engine
(devcrypto) /dev/crypto engine
(dynamic) Dynamic engine loading support

4、Verify the CAAM offloading

Hardware operations can be monitored with the interrupt counters for CAAM JR and QI (DPAA1 and DPAA2) interfaces.

user@localhost:~$ cat /proc/interrupts | grep jr
78: 20 0 0 0 GICv2 103 Level 1710000.jr
79: 0 0 0 0 GICv2 104 Level 1720000.jr
80: 0 0 0 0 GICv2 105 Level fsl-jr0

user@localhost:~$ openssl enc -aes-256-cfb -k secret -P -md sha1
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
salt=233157F098D1B0E8
key=D2B0C0C088AA7DAA6CF37CC856E283E3B0C3DD2BE155688DE18593EB3F997776
iv =A4E2C86E0DBA1211B5A4B02EBEFF6DC4

user@localhost:~$ cat /proc/interrupts | grep jr
78: 54 0 0 0 GICv2 103 Level 1710000.jr
79: 69 0 0 0 GICv2 104 Level 1720000.jr
80: 0 0 0 0 GICv2 105 Level fsl-jr0

【python】crcmod.predefined实现CRC校验

一、CRC简介

在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏(出现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。检测的方式有多种,常见的有奇偶校验、因特网校验和循环冗余校验等。循环冗余校验是一种用于校验通信链路上数字传输准确性的计算方法(通过某种数学运算来建立数据位和校验位的约定关系的 [1] )。发送方计算机使用某公式计算出被传送数据所含信息的一个值,并将此值 附在被传送数据后,接收方计算机则对同一数据进行 相同的计算,应该得到相同的结果。如果这两个 CRC结果不一致,则说明发送中出现了差错,接收方计算机可要求发送方计算机重新发送该数据。在计算机网络通信中运用CRC校验时相对于其他校验方法就有一定的优势。CRC可以高比例的纠正信息传输过程中的错误,可以在极短的时间内完成数据校验码的计算,并迅速完成纠错过程,通过数据包自动重发的方式使得计算机的通信速度大幅提高,对通信效率和安全提供了保障。由于 CRC 算法检验的检错能力极强,且检测成本较低,因此在对于编码器和电路的检测中使用较为广泛。从检错的正确率与速度、成本等方面,都比奇偶校验等校验方式具有优势。因而,CRC 成为计算机信息通信领域最为普遍的校验方式。

二、python实现方法

python通过调用crcmod.predefined模块完成各种CRC校验机制。

三、参考例程

def crcFunc(self,mode,InputData):
        print(InputData)
        crcF= crcmod.predefined.Crc(mode)
        crcF.update(bytes(InputData))
        print(hex(crcF.crcValue))
        return hex(crcF.crcValue)