驱动 | 工具 | 备注 |
---|---|---|
开机时间 | prelink | 生成excel查看每个脚本的时间 |
开机时间 | systemd-analyze blame | 查看systemd启动每个服务消耗的时间 |
内存 | /proc/meminfo | 查看内存信息 |
内存 | devmem | 可以用来访问和修改物理内存 |
内存 | devkmem | 可以用来访问虚拟内存,不可以修改 |
串口 | minicom | 。 |
i2c | I2c-tools | i2cdetect:检测挂在系统上的设备总线。 |
i2c | I2c-tools | i2cdump:查看寄存器的值 |
i2c | I2c-tools | i2cget:读取寄存器值 |
i2c | I2c-tools | i2cset:设置寄存器值 |
can | can-utils | cansend:发送数据 |
can | can-utils | candump:接受数据 |
spi | spi-tools | spi-config:设置spi模式速度等属性 |
spi | spidev_test | spidev_test:spi发送和接受数据 |
usb | usbutils | lsusb:查看usb设备信息 |
usb | usbutils | usbhid-dump:监听usb设备 |
usb | usbmon | /sys/kernel/debug/usb/usbmon |
GPIO子系统 | /sys/class/gpio | |
网口驱动 | ethtool | |
网口驱动 | Mii | mtr |
nand nor flash | mtd-utils | |
声卡 | alsa-utils | arecord:录音 |
声卡 | alsa-utils | aplay:播放音乐 |
声卡 | alsa-utils | amixer:调节音量等控制 |
声卡 | alsa-utils | alsamixer:图形化调节音量等控制,更好用 |
声卡 | pavucontrol | pavucontrol :图形化调节音量 |
声卡 | audacity | 查看声音波形 |
摄像头 | xawtv | xawtv |
spi | spidev_test | |
wifi | wireless_tools | iwconfig、iwpriv、 iwevent |
wifi | wpa_supplicant | wpa_supplicant、wpa_cli、wpa_passphrase |
蓝牙 | BLE调试助手 | bluetoothctl |
触摸屏 | evtest | evtest |
鼠标 | evtest | evtest |
键盘 | evtest | evtest |
dtc -I fs -O dts -o device_tree.dts /proc/device-tree
/sys/devices/platform/eth0/mdio/stmmac/phy_register
查看机器占用的网络端口号:netstat -tlunp
麒麟系统修改不启动UKUI界面:
sudo systemctl set-default multi-user.target
麒麟系统修改恢复启动UKUI界面:
sudo systemctl set-default graphical.target
nmcli
命令来操作 Wi-Fi:nmcli device wifi list
这条命令将列出附近可用的 Wi-Fi 网络及其相关信息,例如 SSID、信号强度等。
nmcli device wifi connect <SSID> password <密码>
将 <SSID>
替换为你要连接的 Wi-Fi 网络的名称,<密码>
替换为网络的密码。如果该网络不需要密码,则不需要使用 password
参数。
nmcli device disconnect <WIFI_INTERFACE>
将 <WIFI_INTERFACE>
替换为当前 Wi-Fi 网卡的接口名,可以通过运行 nmcli device status
命令查看接口名。
nmcli connection show
这条命令将列出当前系统中所有的网络连接,包括有线和 Wi-Fi 连接。
nmcli radio wifi on # 开启 Wi-Fi 网卡
nmcli radio wifi off # 关闭 Wi-Fi 网卡
bluetoothctl
命令来操作蓝牙设备:sudo systemctl start bluetooth
sudo systemctl stop bluetooth
sudo systemctl restart bluetooth
sudo systemctl status bluetooth
bluetoothctl power on
bluetoothctl power off
bluetoothctl scan on
bluetoothctl scan off
bluetoothctl connect <设备MAC地址>
将 <设备MAC地址>
替换为你要连接的蓝牙设备的 MAC 地址。
bluetoothctl disconnect <设备MAC地址>
将 <设备MAC地址>
替换为你要断开连接的蓝牙设备的 MAC 地址。
bluetoothctl paired-devices
bluetoothctl devices
apt install acpidump
acpidump -o acpidump.bin
acpixtract -a acpidump.bin
iasl -d *.dat
使用vim打开dsdt.dsl文件就行
系统假死,鼠标键盘串口都没有信息的时候使用:
sysrq
1.printk()
最原始的打印 api,与之相关的是启动参数 loglevel,它决定了可以被打印出来的信息的最低优先级。
2.pr_()
pr_emerg(), pr_alert(), pr_crit(), pr_err(), pr_warning(), pr_notice(), pr_info(), pr_cont(), pr_debug()等函数,
用法和printk()相同。
3.dev_()
dev_emerg(), dev_alert(), dev_crit(), dev_err(), dev_warn(), dev_notice(), dev_info(), dev_dbg()
它们的最大特点是需要传入一个 struct device 的参数,并且会打印出这个 device 的名字,一边是在驱动相关的代码里使用。
用法:dev_info(&pdev->dev, “is ok\n”);
开关:CONFIG_DEBUG_FS 和 CONFIG_DYNAMIC_DEBUG
echo -n 'file drivers/power/supply/cw2017_battery.c +p' > /sys/kernel/debug/dynamic_debug/control
4.addr2line
可以将函数地址解析为函数名
5.WARN_ON(1)
这个函数可以打印出当前的函数调用栈。
6.devmem
这个开源程序可以在应用层直接读写cpu的内存和寄存器,非常方便我们debug
7.kgdb
这个可以像gdb一样进行内核代码的debug
8.ftrace
帮助开发人员了解 Linux 内核的运行时行为,以便进行故障调试或性能分析。
9.kprobe
它可以在任意的位置放置探测点,提供了探测点的调用前、调用后和内存访问出错3种回调方式来调试。
10.perf
Linux性能剖析工具,但是我也没用过,但是听说很强大。
开启DEBUG_SECTION_MISMATCH 这个选项,内核编译的时候可以取消内联优化,让debug更加轻松。
echo 1 > /sys/class/pwm/pwmchip0/export
echo 1000000 > /sys/class/pwm/pwmchip0/pwm1/period
echo 200000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle
echo 1 > /sys/class/pwm/pwmchip0/pwm1/enable
#1.设置波特率
ip link set can0 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on
ip link set can1 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on
#2.开启can设备
ip link set up can0
ip link set up can1
#3.新开控制台接受数据
candump can1
#4.新开控制台发送数据
cansend can0 123#abcdabcd
1.加载看门狗驱动
2.输入命令
echo 1 > /dev/watchdog
3.等待1分钟,如果会自动关机说明看门狗ok
4.使能systemd自动喂狗功能,修改1./etc/systemd/system.conf文件:
RuntimeWatchdogSec= 60
5.输入命令:
echo 1 > /dev/watchdog
6.如果显示设备忙说明开启了systemd自动喂狗功能
或者使用喂狗程序:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{
int fd = open("/dev/watchdog", O_WRONLY);
int ret = 0;
if (fd == -1) {
perror("watchdog");
exit(EXIT_FAILURE);
}
while (1) {
ret = write(fd, "\0", 1);
if (ret != 1) {
ret = -1;
break;
}
sleep(10);
}
close(fd);
return ret;
}
kylin@kylin-kvmvirtualmachine:~/fuqiang/kfocal/debian/build/build-generic$ gdb ./drivers/parport/parport_pc.ko
...
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./drivers/parport/parport_pc.ko...
(gdb) list *(parport_pc_probe_port+0x5d0)
0x2180 is in parport_pc_probe_port (/home/kylin/fuqiang/kfocal/include/linux/parport_pc.h:105).
100 #if defined(CONFIG_ARM64)
101 if (used_lpc)
102 return readb(lpc_base+addr);
103 else
104 #endif
105 return inb(addr);
106 }
107
108 static __inline__ void parport_pc_readsb(unsigned long addr, void *buf,
109 unsigned int count)
(gdb) q
kylin@kylin
或者
jian@jian:~$ gdb vmlinux
...
Reading symbols from vmlinux...
(gdb) list *(xhci_cleanup_halted_endpoint+0xa8/0x178)
0xffffffc0108391b0 is in xhci_cleanup_halted_endpoint (/home/kylin/fuqiang/kfocal/drivers/usb/host/xhci-ring.c:1846).
1841 static void xhci_cleanup_halted_endpoint(struct xhci_hcd *xhci,
1842 unsigned int slot_id, unsigned int ep_index,
1843 unsigned int stream_id, struct xhci_td *td,
1844 enum xhci_ep_reset_type reset_type)
1845 {
1846 struct xhci_virt_ep *ep = &xhci->devs[slot_id]->eps[ep_index];
1847 struct xhci_command *command;
1848
1849 /*
1850 * Avoid resetting endpoint if link is inactive. Can cause host hang.
objdump -d -j .text vmlinux > ./objdump
objdump -S test.ko > test.s
查看笨叔v8.6的D13.2.36
我们经常看到0x96000210等等的96、95、94开头的都是数据终止。
其中96开头表示内核态发生数据终止,95和94表示用户态程序发生数据终止。点击ISSxxx这个链接看就对了。
查看笨叔v8.6的D1.7 Process state, PSTATE
当PAN=1时,在特权模式下访问用户模式下的地址会触发一个 permission fault。
当UAO=1时,在EL1中执行非特权模式下的ldr/str指令,这时候的内存访问权限会根据正在执行的EL的权限来分,而不是EL0的访问权限。
isolcpus=2,3 nohz_full=2,3
debug initcall_debug=1 loglevel=8 sysrq_always_enabled console=ttyAMA1,115200
然后执行update-grub命令。
kernel.printk = 8 7 7 7
kernel.sysrq = 1
sysctl -p # 查看是否生效
reboot # 重启
ifconfig Lan1 192.168.10.152
route add -host 192.168.10.153 dev Lan1
systemctl stop NetworkManager.service
cat /sys/kernel/debug/usb/devices
CONFIG_MMC_TEST is not set
CONFIG_MMC_DEBUG is not set
amixer -c 1 scontrols
设置方法:
systemctl set-default multi-user.target
恢复方法:
systemctl set-default graphical.target
版权说明:如非注明,本站文章均为 扬州驻场服务-网络设备调试-监控维修-南京泽同信息科技有限公司 原创,转载请注明出处和附带本文链接。
请在这里放置你的在线分享代码