以下内容源于朱有鹏嵌入式课程的学习与整理, 如有侵权请告知删除。
内容总结
(1)添加“ telnet远程登录 ”这种调试方式。
(2)介绍“ 海思proc文件系统 ”这种调试接口。
一、telnet远程登录
1、telnet远程登录的意义
Linux系统的用户界面就是命令行,本质上由busybox提供。busybox提供的命令行只有一个,一旦前台被占用就无法做其他操作。
解决方法有两个,一个是建立多个命令行,一个是开放其他用户界面(比如通过telnet远程登录可以开放其他用户界面)。
2、telnet远程登录的原理
(1)在板载系统中运行命令“telnetd &”,让板载系统作为telnet的server端。
(2)通过telnet的client端(在SCRT中设置)连接telnet的server端,从而构建一个用户界面。
(3)这是非常传统与典型的远程登录方式。
3、在HI3518E开发板上进行telnet远程登录
(1)首先执行“telnetd &”,其中“&”和“d”分别表示在后台运行、守护进程(或者说它是服务器)。
/mnt # which telnet
/usr/bin/telnet
/mnt # ls /usr/bin/telnet -l
lrwxrwxrwx 1 root root 17 Nov 16 2022 /usr/bin/telnet -> ../../bin/busybox
/mnt # telnetd &
/mnt # ps
#省略部分输出561 root 0:00 udevd --daemon568 root 0:00 udevd --daemon750 root 0:00 -sh956 root 0:00 telnetd #该进程在这里1047 root 0:00 [flush-mtd-unmap]1064 root 0:00 ps
(2)然后在SCRT上新建一个连接,配置如下。
(3)在登陆处输入账号“root”,在password处直接回车(因为没有设置密码)。
(none) login: root
Password:
Welcome to HiLinux.
mmz_start: 0x82000000, mmz_size: 32M
insmod: can't insert 'mmz.ko': File exists
******* Error: There's something wrong, please check! *****
mount: mounting 192.168.1.141:/home/xjh/iot/hisi_development/hisi_rootfs on /mnt failed: Device or resource busy
/mnt #
每次开启telnet服务时,就会执行一次/etc/profile文件。这文件里有挂载操作,因此提示挂载错误,因为在执行“telnetd &”命令的那个窗口挂载了,不能重复挂载。这文件里也有安装某个驱动程序的操作,因为已经执行过一次,所以这里提示不能插入mmz.ko。
我们将/etc/profile文件中只需要进行一次的操作,剪切至/etc/init.d/rcS文件中,因为rcS文件只会在开机启动时被执行一次,开启telnet服务时也不会再执行rcS文件。修改后的rcS文件如下所示。
/bin/mount -aecho "_ _ _ _ _ _ _ _ _ _ _ _\ _ _ _ _ _ ___/ /__/ \ |_// __ / - _ ___/ / / / / /_ _ _ _/ / / \_/ \_ ______
___________\___\__________________
"
for initscript in /etc/init.d/S[0-9][0-9]*
doif [ -x $initscript ] ;thenecho "[RCS]: $initscript"$initscriptfi
done
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.1.11mount -t vfat /dev/mmcblk0p1 /usr/mmccd /usr/mmc/ko
./load3518e -i -sensor ar0130 -osmem 32 -total 64
mount -t nfs -o nolock 192.168.1.141:/home/xjh/iot/hisi_development/hisi_rootfs /mnttelnetd &# 将“cd /mnt”这句代码在这里不生效,因为rcs文件之后某些操作还会改变目录
# 将“cd /mnt”这句代码放在/etc/profle文件中就生效
/etc/profile文件和rcS文件的执行顺序是怎样的?“cd /mnt”指令在rcS文件中不生效(当etc/profile文件中没有这个指令,在rcS文件中有这个指令时,系统完全启动后却停留在/root目录),而在etc/profile文件中生效(当rcS文件中没有这个指令,而在etc/profile文件中有这个指令时,系统完全启动后停留在/mnt目录),这说明是先执行完rcS文件再执行/etc/profile文件。
进行上述修改之后,再进行步骤(2)(3)操作时,显示如下。我特意开启了几个界面,以说明telnet远程登录可以开启多个用户界面。
二、海思proc文件系统
1、proc文件系统的原理
/mnt # cd /proc/ #proc文件系统内容
/proc # ls
1 257 418 7 cmdline fb kpagecount net sysvipc
139 262 458 964 consoles filesystems kpageflags pagetypeinfo timer_list
141 3 472 965 cpu fs loadavg partchange tty
142 315 492 969 cpuinfo hieth locks partitions umap
144 331 496 971 crypto interrupts mci scsi uptime
153 399 5 972 devices iomem media-mem self version
156 4 507 973 diskstats ioports meminfo slabinfo vmallocinfo
164 402 515 978 dma-mappings irq misc softirqs vmstat
166 407 570 buddyinfo driver kallsyms modules stat yaffs
2 410 572 bus dump_sb_files key-users mounts swaps zoneinfo
255 415 6 cgroups execdomains kmsg mtd sys/proc # ls /sys/* #sys文件系统内容
/sys/block:
mmcblk0 mtdblock1 ram0 ram10 ram12 ram14 ram2 ram4 ram6 ram8 romblock0 romblock2
mtdblock0 mtdblock2 ram1 ram11 ram13 ram15 ram3 ram5 ram7 ram9 romblock1/sys/bus:
amba cpu himedia mdio_bus platform sdio spi
clocksource hid i2c mmc scsi serio usb/sys/class:
bdi fc_host firmware input mmc_host scsi_device spidev vc
block fc_remote_ports graphics mdio_bus mtd scsi_disk tty vtconsole
bsg fc_transport i2c-adapter mem net scsi_host ubi
cuse fc_vports i2c-dev misc regulator spi_master usb_device/sys/dev:
block char/sys/devices:
acodec ai h264e hifb ive platform rgn uart:0 vb vi vpss
adec ao hi_mipi himedia jpege pwm sys uart:1 venc virtual
aenc chnl hi_tde isp_dev logmpp rc system uart:2 vgs vo/sys/firmware:/sys/fs:
cgroup ext4 fuse/sys/kernel:
fscaps ipv4 mm notes slab uevent_helper uevent_seqnum/sys/module:
acodec hi3518e_aenc hi3518e_jpege hi3518e_vpss mmcblk scsi_transport_fc usb_storage
auth_rpcgss hi3518e_ai hi3518e_rc hi_media mmz sensor_i2c usbcore
block hi3518e_aio hi3518e_region hi_mipi mousedev spidev usbhid
block2mtd hi3518e_ao hi3518e_sys hid nfs spurious vt
brd hi3518e_base hi3518e_tde hifb piris sunrpc xz_dec
dns_resolver hi3518e_chnl hi3518e_venc kernel printk tcp_cubic yaffs
ehci_hcd hi3518e_h264e hi3518e_vgs keyboard psmouse ubi
fuse hi3518e_isp hi3518e_viu lockd pwm ubifs
hi3518e_adec hi3518e_ive hi3518e_vou mmc_core scsi_mod uinput/sys/power:
compress_method hb_bdev_file pm_async reserved_size snapshot_buf_size state
disk image_size pm_test resume snapshot_buf_start wakeup_count
/proc #
(1)无组织而混乱的proc文件系统已经被有组织而规整的sys文件系统取代。
(2)proc文件系统的原理,是把内核关键的变量以文件的形式呈现到用户层,用户层通过查看这些文件从而得到内核的一些信息。这些信息是动态信息,是内核运行过程中呈现的信息。
(3)这些文件是虚拟的,它们其实是内核运行过程中某些变量的值。
(4)可以使用cat命令查看这些信息。
/proc # cd umap/
/proc/umap # ls
acodec aenc ao h264e higo ive logmpp rc sys vb vgs vo
adec ai chnl hifb0 isp jpege md rgn tde venc vi vpss
/proc/umap # cat vi[VIU] Version: [Hi3518EV200_MPP_V1.0.3.0 B040 Release], Build Time: [May 20 2016, 12:01:03]VI-VPSS is online.-----MODULE PARAM--------------------------------------------------------------
detect_err_frame drop_err_frame stop_int_level10 0 0-----VI DEV ATTR---------------------------------------------------------------Dev IntfM WkM ComMsk0 ComMsk1 ScanM AD0 AD1 AD2 AD3 Seq DPath DType DRev CapX CapY CapW CapH-----VI HIGH DEV ATTR---------------------------------------------------------------Dev InputM WkM ComMsk0 ComMsk1 ScanM AD0 AD1 AD2 AD3 Seq CombM CompM ClkM Fix FldP DPath DType DRev CapX CapY CapW CapH-----VI PHYCHN ATTR------------------------------------------------------------PhyChn CapX CapY CapW CapH DstW DstH CapSel Mirror Flip IntEn PixFom SrcRat DstRat Comp-----VI PHYCHN STATUS 1----------------------------------------------------------PhyChn Dev IntCnt VbFail LosInt TopLos BotLos BufCnt IntT SendT Field Stride-----VI PHYCHN STATUS 2---------------------------------------------------------PhyChn MaxIntT IntGapT MaxGapT LIntCnt ThrCnt AutoDis CasAutD TmgErr ccErrN IntRat
/proc/umap #
2、海思proc文件系统调试
官方文档见链接:资源_1111。