一、编译报错
根据上面报错提示增加编译参数:
gcc -Wl,--no-relax
首先启用 EPEL Repository:
yum -y install epel-release
启用 EPEL Repository 後, 可以用 yum 直接安裝 Htop:
yum -y install htop
一、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
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协议栈支持
需要在内核选择确定。
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
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
#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
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
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
把固件从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
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
一、重新安装内核
sudo apt-get install linux-headers-$(uname -r)
一、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)
一、解决方式
cd build_dir/host/pkg-config-0.29.2/glib
./configure --enable-iconv=no --with-libiconv=gnu
一、问题分析
根据编译错误查看gnu发现是因为M4版本与编译环境Ubuntu21不匹配导致。
二、解决方式
三、使用方式
patch -p1 < patches/04-fix-sigstksz.patch
写程序是个力气活,累了听听音乐可好!
此实例涉及到Tkinter的Toplevel组件应用,通过toplevel可以实现多窗口,从字面意思理解为顶层窗口。
from tkinter import *
root = Tk()
def create():
#创建一个顶级弹窗
top = Toplevel()
top.title('我的弹窗')
# top.attributes('-alpha',0.5)这个可以设置弹出窗口的透明度
msg = Message(top,text = '类似于弹出窗口,具有独立的窗口属性。',width = 150)
msg.pack()
Button(root,text = '创建一个顶级窗口',command = create).pack(padx = 20,pady = 50)
mainloop()
大家都很清楚对于多窗口应用的场景中,对主窗口与子窗口之间的关系应用不同,大多数都是希望在处理子窗口的时候,不希望使用者同时可操作主窗口的逻辑,所以模态的概念由此产生,那对于上面的实例如何实现呢,看下面改进方案:
from tkinter import *
root = Tk()
def create():
#创建一个顶级弹窗
top = Toplevel()
top.title('我的弹窗')
top.grab_set()#使当前页面活跃,模态实现
top.focus_set()#使鼠标键盘聚焦在当前页面
# top.attributes('-alpha',0.5)这个可以设置弹出窗口的透明度
msg = Message(top,text = '类似于弹出窗口,具有独立的窗口属性。',width = 150)
msg.pack()
Button(root,text = '创建一个顶级窗口',command = create).pack(padx = 20,pady = 50)
mainloop()