休眠唤醒
echo “+5” >/sys/class/rtc/rtc0/wakealarm
echo mem > /sys/power/state
echo 8 > /proc/sys/kernel/printk
echo N > /sys/module/printk/parameters/console_suspend
am start -n com.clock.pt1.keeptesting/.MainActivity
ifconfig eth1 169.254.107.78
ifconfig eth1 up
ifconfig eth1 down
ping 169.254.107.78
fdt set /soc/lcd1 status okay
fdt list /soc@3000000/s_twi0@7081400/pmu@34/regulators@0/cldo4
fdt set /soc@3000000/s_twi0@7081400/pmu@34/regulators@0/cldo4 regulator-always-on;
sunxi_dump指令
cd /sys/class/sunxi_dump
echo 0x66666 > dump;cat dump
cd /sys/devices/soc.0/can.2/
reboot efex
SPDX-License-Identifier: GPL-2.0-only
KERNELDIR = /home/Android/android13_platform/android/longan/out/kernel/build
CURRENT_PATH := ${shell pwd}
MAKE = make ARCH=arm64 CROSS_COMPILE=/home/Android/android13_platform/android/longan/out/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-
GCC = /home/Android/android13_platform/android/longan/out/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc
SUNXI-GMAC = sunxi-gmac
build:kernel_module
kernel_module:
rm -rf KaTeX parse error: Expected 'EOF', got '#' at position 38: … sunxi-gmac.o #̲{GCC} sunxi-gmac.c -o ${SUNXI-GMAC}
${MAKE} -C
K
E
R
N
E
L
D
I
R
M
=
{KERNELDIR} M=
KERNELDIRM={CURRENT_PATH} modules
clean:
rm -rf ${SUNXI-GMAC}
${MAKE} -C
K
E
R
N
E
L
D
I
R
M
=
{KERNELDIR} M=
KERNELDIRM={CURRENT_PATH} clean
查看下载的环境,repo init的
cat manifest.xml
md reg val
mw reg val
查看中断
cat proc/interrupts | grep kbd
gmac指令
ifconfig eth0
ifconfig eth0 down
ifconfig eth0 hw ether 00:11:22:aa:bb:dc
mii write 0x01 0x00 0x0140
setenv ipaddr 169.254.107.72
setenv serverip 169.254.107.75
ping 169.254.107.75
mii read 0x01 0x00
mii info 0x01
TCP吞吐测试:
Server端:
iperf -s -i 1
Client端:
./iperf -c 169.254.107.75 -b 700M -i 1 -t 10 -p 2203
-P 4
UDP吞吐测试:
Server端:
iperf -s -u -i 1
Client端:
iperf -c 169.254.107.75 -u -b 1000M -i 1 -t 10
-P 4
uboot改mac地址
pri
setenv mac 00:11:22:aa:bc:dc
saveenv
boot
pri
setenv loglevel 8
saveenv
pri
boot
udhcpc -b -i eth0
ftrace工具使用
一切操作在此目录进行
/sys/kernel/debug/tracing
如果没有tracing目录,在debug使用以下命令挂载
mount -v | grep debugfs
mount -t debugfs debugfs /sys/kernel/debug
cd /sys/kernel/debug/tracing
- 关闭静态的插桩点的trace打印信息:
echo 0 > events/enable - 清掉上一次的trace残留:
echo > trace
设置你想使用的tracer,这里设置为function类型的tracer
echo function > current_tracer
把进场pid号写入
echo 3407 > set_ftrace_pid
echo > set_graph_function
echo > set_ftrace_filter
echo sunxi_can_interrupt > set_ftrace_filter
echo sunxi_can_start_xmit >> set_ftrace_filter
echo trace_printk > set_ftrace_filter
echo can_asm_rx >> set_ftrace_filter
echo can_asm_write_cmdreg >> set_ftrace_filter
cat set_ftrace_filter
cat trace
使能/失能trace
echo 1 > tracing_on
echo 0 > tracing_on
kasan
lock_debug
memory_debug
DETECT_HUNG_TASK
DEBUG_RT_MUTEXES 1
DEBUG_MUTEXES 1
DEBUG_WW_MUTEX_SLOWPATH
DEBUG_SPINLOCK 1
DEBUG_LOCK_ALLOC 1
PROVE_LOCKING
LOCKDEP 1 2
LOCK_STAT
DEBUG_LOCKDEP
DEBUG_ATOMIC_SLEEP
DEBUG_PAGEALLOC
DEBUG_PAGEALLOC_ENABLE_DEFAULT
PAGE_OWNER
PAGE_POISONING
DEBUG_WX
SLUB_DEBUG_ON
SLUB_STATS
DEBUG_KMEMLEAK
SCHED_STACK_END_CHECK
DEBUG_VM 2
BOOTTIME_TRACING
FUNCTION_TRACER 1 2
FUNCTION_PROFILER
FTRACE_SYSCALLS
头指针分离
把文件夹删掉,重新repo sync。然后加上下载环境时候的repo start tina --all
bsp swc-know 测试文件加上这个结论
swc-know更新到最新的
git stash
git pull --rebase
51RnucNE/SXyWJ5DAN0LfX1MwjeIQwOq6waGg8cZkg
cat /proc/net/can/stats
1、流程是怎么,什么总线清空都不管就切换,(是否空闲)
2、且之前没有数据
3、应用层协议,切之前要通知
4、测试用例 主机发消息从机,切波特率。发数据的话要停止。告诉他要切多少波特率。
5、每个测试用例写个faq
uboot 设置网口的代码。怎么初始化,ping
绑定cpu核
比如绑定核3
echo “8” > /proc/irq/514/smp_affinity
cpu0是00000001 0x1
cpu1是00000010 0x2
cpu2是00000100 0x4
cpu3是00001000 0x8
cpu4是00010000 0x10
cpu5是00100000 0x20
cpu6是01000000 0x40
cpu7是10000000 0x80
用的是虚拟中断号,可以在/proc/interrupt查看
echo “8” > /proc/irq/58/smp_affinity
看cpu核的数量
cat /proc/cpuinfo
使用 dmesg 可以找出内核最新消息中的错误和警告
dmesg | more
dmesg | grep gmac
dmesg | grep mdio
dmesg | grep can
dmesg | grep “phy_reg is”
cd vendor/lib/modules/
insmod sunxi-gmac.ko
insmod sunxi-mdio.ko
pack失败,需要改变分区大小,方法如下:
1、进入 device/config/chips/{CHIP}/configs/{BOARD}/目录
2、根据选的LICHEE_LINUX_DEV,比如longan\bsp\buildroot等,选择需要进入的目录
3、找到sys_partition.fex文件
4、找到 “rootfs” 那行,改变size属性。
相关知识连接
http://wiki.allwinnertech.com/index.php/Tina%E5%88%86%E5%8C%BA%E8%AF%B4%E6%98%8E#.E5.B8.B8.E8.A7.81.E9.94.99.E8.AF.AF
转换文件格式
iconv -f utf-8 -t ascii//TRANSLIT filename.txt > newfilename.txt
iconv -f ascii -t utf-8 filename.txt > newfilename.txt
查看cpu_idle有没有开
zcat /proc/config.gz | grep CPU_IDLE
git status
git add .
git commit -m “add log”
git format-patch -1
mv 0001-add-log.patch …/
git reset --hard b23691ec465680a5b67de2e280ff441d39469d12
git apply …/0001-add-log.patch
git fetch tina
git rebase tina/sunxi-dev
git restore --staged .
git restore .
git rebase --continue
模块上板没有加载
1、首先看看menuconfig有没有打开
2、看看设备树节点有没有打开,有没有引脚复用
3、不确定有没有编译进去,可以在驱动中加一些会出错的东西,如果报错说明有在编译
4、在probe函数中加入打印,看看它跑到哪一步了
5、实在不行可以看看硬件是否有问题(如a523的gmac默认是不行的)
6、让他们多拿几块板,我手里一定要有一块
7、Android有问题就要试试linux
8、第一时间拿到和客户一致的环境
9、给测试部的命令,专门用文档记载,出了问题让他们自查
printk(“\033[44m [%s][%d] cfg_size=%x,va_cfg_base=%llx\033[0m \n\r”, func, LINE,cfg_size,(unsigned long long )va_cfg_base);
https://blog.csdn.net/weixin_69553582/article/details/125700943
Android相关知识
SDK 路径:a523_t_android
一般进去先 source build/envsetup.sh
然后执行 ./longan/build.sh config
依次选择 android -> a523 -> evb -> default
然后 lunch 选择 a523_evb_arm_go-userdebug
可以按上面的命令试试,都配置好后,如果要进行编译,则执行
./longan/build.sh && make -j16 && pack
./longan/build.sh && make -j16 && pack -v
编译模块的时候,menuconfig要选择M
在目录R:\a523_t_android\device\softwinner\saturn\a523-evb添加一个文件夹gmac
里面有两个文件 config.mk init.gmac.rc
内容分别是
config.mk:
LOCAL_MODULE_PATH := $(shell dirname $(lastword $(MAKEFILE_LIST)))
PRODUCT_COPY_FILES +=
(
L
O
C
A
L
M
O
D
U
L
E
P
A
T
H
)
/
i
n
i
t
.
g
m
a
c
.
r
c
:
(LOCAL_MODULE_PATH)/init.gmac.rc:
(LOCALMODULEPATH)/init.gmac.rc:(TARGET_COPY_OUT_VENDOR)/etc/init/init.gmac.rc \
init.gmac.rc:
on boot
# insmode gpio-leds module
insmod /vendor/lib/modules/sunxi-gmac.ko
insmod /vendor/lib/modules/sunxi-mdio.ko
还要关闭gki
在目录R:\a523_t_android\device\softwinner\saturn\a523-evb的BoardConfig.mk文件最上方添加
CONFIG_AW_ENABLE_GKI := false
android固件烧录以后
小机端要输入su
cp命令
复制一整个文件夹为另外一个文件夹使用命令
cp -af linux-5.4 linux-5.4-bk
git tag命令查看已存在的tag
回退到某一个tag
git reset --hard auto-t113-i-linux-v1.0
烧录固件的方法
1、按住uboot再按reset,先松手uboot
2、按住reset再按fel,先松手fel
3、reboot + 按键2
4、reboot efex
cpu调频
echo 118000 > /sys/class/thermal/thermal_zone0/emul_temp
比112000要大,温度才会变化
cat /sys/class/thermal/thermal_zone0/temp
while [ 1 -eq 1 ]; do
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_*_freq
echo ========
sleep 2
done
查看当前频率
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
echo “performance” > scaling_governor
查看文件有没有用硬浮点
strings -a linpack32 | grep fpu
查看sdk用的是用的是哪个defconfig
1、修改一下menuconfig的配置,git status看看改的是哪个文件
2、删掉内核目录下的.config.config.mark.config.old,重新编译,编译过程中会打印出defconfig
在A服务器上复制B服务器的文件到A服务器
scp -r linux02@172.20.1.85:/home/linux02/lianglonghui/sdk/ino_pintai/a40i/linux-3.10/auto_change_to_assembly_file.txt ./
linux-3.10 buildroot编译工具
1、一般是进入buildroot-2016目录
make menuconfig
把需要的工具的宏打开,can的是iproute2\libsocketcan\can-utils
然后make
把out目录的东西删掉,重新编译打包即可
2、如果buildroot目录make失败
在目录out/sun8iw11p1/linux/common/buildroot$
make iproute2
make libsocketcan
make can-utils
然后重新编译打包
3、linux-5.4 buildroot编译工具
linux-3.10 配置menuconfig
make sun8iw11p1smp_defconfig
make ARCH=arm menuconfig
然后,要用compare工具,把.config修改了的东西复制到sun8iw11p1smp_defconfig,
不然每次重新./build.sh config的时候都会重新生成一份.config,这样之前的修改就保存不下来 defconfig是原版,其他的是copy版
汇川新系统掉帧问题
1、检查defconfig,客户用的是sun8iw11p1smp_ubi_h6u_defconfig,据说之前的plc系统并没有问题,对比两个的config配置
CONFIG_SLUB_DEBUG | s
CONFIG_SLABINFO 1 | s CONFIG_HW_PERF_EVENTS
CONFIG_CPU_IDLE_SUNXI |
CONFIG_FPE_NWFPE 1 | s
CONFIG_PRIVATE |
CONFIG_POWER_DOWN_SAVE_MESSAGE |
CONFIG_ION 1 | s
FPGA验证准备工作
1、搞清楚验证的对象、流程、
2、准备好驱动
dma模式怎么实现
对比gmac的内容来学习
fpga验证流程
1、准备好驱动代码
2、准备设备树
3、查看spec,确定ccmu\pinctrl配置
4、
汇川问题解决步骤
1、先看能不能复现环境
2、如果不能的话,让客户perf捉正常情况和不正常情况的图,对比一下有什么差距
3、定位可能出现问题的地方,在里面加打印
4、每一个调试版本都需要记录下来,例如2.4-debug-v1,让客户跑的时候把驱动版本打印出来,看看是不是一样的(免得被坑)
5、创建一个git,保存各个版本的代码
32深度,加打印,做实验,深度最深用了多少
vim tags生成
在需要的目录下输入这个指令,比如在kernel目录
~/.vim/buildenv.sh
查看中断有没有触发
cat /proc/Interrupt
串口线 焊接
1、橙——黑
2、黑——白
3、红——绿
头指针分离
git branch -av
git branch -vv
git stash //把修改保存起来
git stash show
git stash list
git stash apply 0 //恢复
git stash list
git checkout .
git checkout tina
cp /tmp/amp_rv0.bin /lib/firmware/amp_rv0.bin
echo start > sys/class/remoteproc/remoteproc1/state //开启rv核
echo stop > sys/class/remoteproc/remoteproc1/state //关闭rv核
echo -e “/tmp\c” > /sys/module/firmware_class/parameters/path
echo stop > /sys/class/remoteproc/remoteproc1/state
echo amp_rv0.bin > /sys/class/remoteproc/remoteproc1/firmware
echo start > /sys/class/remoteproc/remoteproc1/state
hal_awlink_xmit awlink1 -I i -D i -L i -e -o 10000
hal_awlink_xmit awlink1 -I i -D i -L i -n 10000 -t 100 -e -R
hal_awlink_open awlink1 bitrate 1000000 loopback_off
awlink_rx_test awlink1 up
awlink_rx_test awlink1 down
hal_awlink_close awlink1
hal_can_open can0 loopback_on
ip -detail -statistics link show can0
ip link set can0 down
ip link set can0 type can restart-ms 10
ip link set can0 type can bitrate 1000000 loopback on
ip link set can0 qlen 300
ip -detail -statistics -s link show can0
ip link set can0 up
candump -x -d can0 &
cangen can0 -L i -D i -I i -e -n 100
把rv固件adb push到根目录
adb push A:\workspace\t113-tina\rtos\lichee\rtos\build\t113_i_c906_evb1_auto\img\rt_system.elf /amp_rv0.bin
dsp固件start的时候会有异常log,警告, pinnic之类的"sunxi-rproc 3000008.dsp_rproc: Direct firmware load for rproc-dsp_rproc-fw failed with error -2"
因为没有把固件名字弄进去。
madonglin@GZExdroid05:~/workspace/t113-tina/rtos/lichee/rtos/build/t113_i_c906_evb1_auto/drivers/rtos-hal/hal/source/can$
/home/madonglin/workspace/t113-tina/rtos/lichee/rtos/tools/riscv64-elf-x86_64-20201104/bin/riscv64-unknown-elf-ar -r libcan.a sunxi_can_slib.o sunxi_can.o
./…/…/…/…/…/lichee/rtos/tools/riscv64-elf-x86_64-20201104/riscv64-unknown-elf/bin/objdump -h text libcan.a --wide //查看段再文件的偏移
./…/…/…/…/…/lichee/rtos/tools/riscv64-elf-x86_64-20201104/riscv64-unknown-elf/bin/objdump -s -D libcan.a //找到函数的偏移
以太网问题排查
1、phy id有无问题
(1)读出来的id是0,注意驱动加载顺序,phyrst引脚上下拉,复位情况 分析各个引脚是否配置准确
(2)读出来的id是1FFF,注意phyrst引脚上拉下,复位情况
(3)有可能是驱动加载顺序错了,正常的顺序应该是先gmac驱动再mdio驱动。
echo 0x00 0x02 > mii_read;cat mii_read
修改驱动加载顺序
1、修改驱动在drivers/Makefile里面的顺序
2、修改驱动的initcall优先级,查看优先级或者修改有没有生效可以在目录
out/kernel/staging/的System.map查相应的驱动名字。
(!注意!这是linux固件编译进内核的情况,如果不是编译进内核,编译成ko的话,有可能这个顺序还是会打乱)
phy id概率性为0的问题,就是因为在vendor_ramdisk.modules里面写insmod sunxi-gmac.ko insmod sunxi-mdio.ko。但是实际上上板还是mdio先加载导致的。
可以在init.ethernet.rc里添加如下代码。
insmode gmac module
on late-init
insmod /vendor/lib/modules/sunxi-gmac.ko
on boot
insmod /vendor/lib/modules/sunxi-mdio.ko
加载顺序,最早加载的是on early-init,其次是on late-init,然后是on boot。这样限定以后gmac就会比mdio先加载啦
qt bug导致光标消失
echo -e “\033[?25h”
怎么切换分支
git checkout remotes/tidy/sunxi-dev
此时头指针会分离
git checkout -b sunxi-dev-oright
创建一个新分支名字,就可以了
如果没有显示位于分支xxx,您的分支与上游分支xxx一直,可以用下面这个命令,前面的是远程仓库的分支,后面是自己创建的分支
git branch --set-upstream-to=tidy/<分支> aiot-android13-stable
git branch --set-upstream-to=tidy/product-aiot-android13-stable aiot-android13-stable
meils编译指令
cd /home/madonglin/workspace/f133-meils/lichee/melis-v3.0/source
(source melis-env.sh
lunch ->f133-evb
make menuconfig)
make -j16 && pack
回溯调用栈
把死机打印的信息写在ba.txt里面
callstack ba.txt
怎么知道编译的编译链是哪个?
cat .buildconfig
LICHEE_COMPILER_TAR那一项就是
t527编译汇编
ccflags-y += -O0 -v -Wno-error -march=armv8-a //不编译优化
gcc编译不优化
#pragma GCC push_options
#pragma GCC optimize (“00”)
…
#pragma GCC pop_options
clang编译不优化
#pragma clang optimize off
…
#pragma clang optimize on
Makefile指定不优化
ccflags-y += -O0 -v -Wno-error -march=armv8-a
android编译链
make CC=clang HOSTCC=clang LD=ld.lld NM=llvm-nm OBJCOPY=llvm-objcopy LLVM=1 HOSTLD=ld.lld
ARCH=arm64 -j16 O=/home/madonglin/workspace/android_t527/longan/out/t527/kernel/build
KERNEL_SRC=/home/madonglin/workspace/android_t527/longan/kernel/linux-5.15
INSTALL_MOD_PATH=/home/madonglin/workspace/android_t527/longan/out/t527/kernel/staging
linux编译链
make CROSS_COMPILE=/home/madonglin/workspace/t527_linux_aiot/out/toolchain/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
ARCH=arm64 -j16 O=/home/madonglin/workspace/t527_linux_aiot/out/t527/kernel/build
KERNEL_SRC=/home/madonglin/workspace/t527_linux_aiot/kernel/linux-5.15
INSTALL_MOD_PATH=/home/madonglin/workspace/t527_linux_aiot/out/t527/kernel/staging