作业描述:https://github.com/rcore-os/rust-for-linux/blob/main/exercise3.md
参考链接: https://github.com/yuoo655/e1000-driver.git
在linux 的rust驱动中需要调用内核API,需要借助bindgen是一个将C 语言的头文件转化为rust源码的工具,才能调用。https://rust-lang.github.io/rust-bindgen/ 下面是一个C的头文件
linux/include/r4l_sample.h
int echo_for_rust(const unsigned char * str)
{
printk("[r4l test]:%s\n", str);
return 0;
}
EXPORT_SYMBOL_GPL(echo_for_rust);
linux/rust/helpers.c
int rust_helper_echo(const unsigned char * str)
{
return echo_for_rust(str);
}
EXPORT_SYMBOL_GPL(rust_helper_echo);
这样就可以在rust里面通过bingling::echo调用C代码了
all: run
menuconfig:
#make -C linux ARCH=arm64 LLVM=1 O=build menuconfig
make -C linux-fujita ARCH=arm64 LLVM=1 O=build menuconfig
build:
#make -C linux/build ARCH=arm64 LLVM=1 -j4
make -C linux-fujita/build ARCH=arm64 LLVM=1 -j4
run:
#qemu-system-aarch64 -M virt -cpu cortex-a72 -smp 8 -m 128M -kernel linux/build/arch/arm64/boot/Image -initrd busybox-1.33.2/initramfs.cpio.gz -nographic -append "init=/linuxrc console=ttyAMA0"
qemu-system-aarch64 -M virt \
-cpu cortex-a72 \
-smp 8 \
-m 128M \
-device virtio-net-device,netdev=net \
-netdev user,id=net,hostfwd=tcp::2222-:22 \
-kernel linux-fujita/build/arch/arm64/boot/Image \
-initrd busybox-1.33.2/initramfs.cpio.gz \
-nographic \
-device e1000,netdev=net0,bus=pcie.0 \
-netdev user,id=net0 \
-append "init=/linuxrc console=ttyAMA0"
run_initrd:
qemu-system-aarch64 -machine 'virt' \
-cpu 'cortex-a57' \
-m 1G -device virtio-blk-device,drive=hd \
-drive file=dqib_arm64-virt/image.qcow2,if=none,id=hd \
-device virtio-net-device,netdev=net \
-netdev user,id=net,hostfwd=tcp::2222-:22 \
-kernel linux/build/arch/arm64/boot/Image \
-initrd dqib_arm64-virt/initrd \
-nographic \
-append "root=LABEL=rootfs console=ttyAMA0"
busybox:
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make -C busybox-1.33.2
e1000:
make -C e1000-driver/src/linux
setup: e1000
rm busybox-1.33.2/_install/e1000_for_linux.ko
cp e1000-driver/src/e1000_for_linux.ko busybox-1.33.2/_install/
cd busybox-1.33.2/; ./setup.sh; cd -
刚开始老师讲解e1000驱动过程,云里雾里,驱动作业无从下手的感觉,前期内核编译和文件系统制作原本很简单,但是各种安装包不兼容问题,并且rust-for-linux的驱动和内核接口变化太快,导致驱动调试,e1000-driver最好还是要基于fujita-linux编译会更好一点,这块我遇到的问题是 先用官网的https://github.com/Rust-for-Linux/linux的编译并制作好了文件系统,helloworld驱动也验证通过,调试 https://github.com/yuoo655/e1000-driver.git驱动的时候发现其与https://github.com/Rust-for-Linux/linux的rust-dev分支匹配起来有很多编译问题, 随转向 编译https://github.com/fujita/linux.git,但bindgen要求的版本比较低,结果硬着用新bindgen 1.62.0 替换1.56.0 编译过去,修改了内核部分代码,花费了三四天才真正开始调驱动,看起其他同学都已经调试完成了,心里还是有点焦急的。但没办法,硬着头皮调试,不能放弃。
由于之前没有接触过网卡驱动,对网卡配置有点手足无措,最后经过调查E1000有fujita的日本人已经调试好的代码参考 https://github.com/fujita/rust-e1000,有前辈的代码,可以摸着它的代码调试了
驱动OSI 7层协议,应用层,表示层,会话层,传输层,网络层,链路层和物理层 物理层和链路层对应网络的驱动,应用层,表示层,会话层对应ftp,http,ssh等,而传输层就是UDP,TCP,以及最热门的QUIC协议,而链路层典型的是MAC层,物理层是Phy层,IDH等。
代码经过一系列的折腾和编译,也参考了https://github.com/lispking/rust-e1000-driver 这位同学的代码,启动之后结果发现没有probe打印,
经过仔细对吧,我们的开机启动qemu没有加入e1000网卡参数 处理中断的时候没有考虑None的情况,导致panic
-device e1000,netdev=net0,bus=pcie.0 \
-netdev user,id=net0 \
HTTP发送网络报过程
套接字缓冲区查询命令ss -ntt
看来start_xmit从网络层项链路层发送skb_buffer数据到tx_ring
skb_buffer 数据结构
Ring buffer结构如下:
e1000 收发参考原理:https://blog.csdn.net/u010180372/article/details/119525638
[内核源码] Linux 网络数据接收流程(TCP)- NAPI : https://zhuanlan.zhihu.com/p/452612386
- 问题: eth1 up的时候内核崩溃
/ # ifconfig eth1 up
[ 31.261677] rust_e1000dev: Ethernet E1000 open
[ 31.262660] rust_e1000dev: New E1000 device @ 0xffff800008480000
[ 31.268236] rust_e1000dev: Allocated vaddr: 0xffff559803193000, paddr: 0x43193000
[ 31.271569] rust_e1000dev: Allocated vaddr: 0xffff5598033d0000, paddr: 0x433d0000
[ 31.282618] rust_e1000dev: Allocated vaddr: 0xffff559805c80000, paddr: 0x45c80000
[ 31.289265] rust_e1000dev: Allocated vaddr: 0xffff559805d00000, paddr: 0x45d00000
[ 31.292126] rust_e1000dev: e1000 CTL: 0x140240, Status: 0x80080783
[ 31.293155] rust_e1000dev: e1000_init has been completed
[ 31.294449] rust_e1000dev: e1000 device is initialized
[ 31.302014] rust_e1000dev: handle_irq
[ 31.303574] rust_e1000dev: irq::Handler E1000_ICR = 0x4
[ 31.307389] rust_e1000dev: NapiPoller poll
[ 31.307501] rust_e1000dev: get stats64
[ 31.309985] rust_e1000dev: e1000_recv
[ 31.309985]
[ 31.310547] rust_kernel: panicked at 'called `Option::unwrap()` on a `None` value', /srv/dev-disk-by-uuid-acaca851-c5c0-4f99-8522-91fec8bd0740/users/yangkai/work/rcore_2023a/rust-for_linux/e1000-driver/src/linux/../e1000_for_linux.rs:86:54
[ 31.321218] ------------[ cut here ]------------
[ 31.322559] rust_e1000dev: get stats64
[ 31.324359] kernel BUG at rust/helpers.c:48!
[ 31.326392] Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
[ 31.329246] Modules linked in: e1000_for_linux(O)
[ 31.335888] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G O 6.1.0-rc1-g5fc95830739f-dirty #2
[ 31.340642] Hardware name: linux,dummy-virt (DT)
[ 31.343687] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 31.346427] pc : rust_helper_BUG+0x4/0x8
[ 31.350033] lr : rust_begin_unwind+0x5c/0x60
[ 31.352394] sp : ffff800008003ca0
[ 31.354242] x29: ffff800008003cf0 x28: ffff5598033d0000 x27: ffff800008003de0
[ 31.358153] x26: ffff800008003ef0 x25: ffff800008003f00 x24: ffffb7c2d17ca5fd
[ 31.361537] x23: ffffb7c31aea4634 x22: 0000000000000001 x21: 0000000000000100
[ 31.364296] x20: 0000000000000000 x19: ffff800008003e00 x18: ffffffffffffffff
[ 31.366870] x17: 0000000000000041 x16: ffffb7c31adfd5b8 x15: 0000000000000004
[ 31.369318] x14: 0000000000000fff x13: ffffb7c31b95b090 x12: 0000000000000003
[ 31.372159] x11: 00000000ffffefff x10: c0000000ffffefff x9 : 306c1c7bb7800c00
/ # [ 31.374389] x8 : 306c1c7bb7800c00 x7 : 205d373435303133 x6 : 332e31332020205b
[ 31.378287] x5 : ffffb7c31bcf7eaf x4 : 0000000000000001 x3 : 0000000000000000
[ 31.380756] x2 : 0000000000000000 x1 : ffff800008003a60 x0 : 00000000000000e3
[ 31.383739] Call trace:
[ 31.384726] rust_helper_BUG+0x4/0x8
[ 31.386219] _RNvNtCs3yuwAp0waWO_4core9panicking9panic_fmt+0x34/0x38
[ 31.389057] _RNvNtCs3yuwAp0waWO_4core9panicking5panic+0x38/0x3c
[ 31.390407] _RNvXs2_CsejK4Ne9WL8c_15e1000_for_linuxNtB5_6PollerNtNtCsfATHBUcknU9_6kernel3net10NapiPoller4poll+0x560/0x564 [e1000_for_linux]
[ 31.396475] _RNvMs7_NtCsfATHBUcknU9_6kernel3netINtB5_11NapiAdapterNtCsejK4Ne9WL8c_15e1000_for_linux6PollerE13poll_callbackBR_+0x44/0x58 [e1000_for_linux]
[ 31.400059] __napi_poll+0x48/0x1cc
[ 31.401478] net_rx_action+0x134/0x2d4
[ 31.402281] __do_softirq+0xdc/0x25c
[ 31.403612] ____do_softirq+0x10/0x1c
[ 31.404441] call_on_irq_stack+0x2c/0x54
[ 31.405413] do_softirq_own_stack+0x1c/0x28
[ 31.406320] __irq_exit_rcu+0x98/0xec
[ 31.407628] irq_exit_rcu+0x10/0x1c
[ 31.408937] el1_interrupt+0x8c/0xbc
[ 31.409942] el1h_64_irq_handler+0x18/0x24
[ 31.411241] el1h_64_irq+0x64/0x68
[ 31.412316] arch_cpu_idle+0x18/0x28
[ 31.413007] cpuidle_idle_call+0x6c/0x1e4
[ 31.413789] do_idle+0xcc/0xf4
[ 31.414408] cpu_startup_entry+0x24/0x28
[ 31.416156] kernel_init+0x0/0x1a0
[ 31.417162] start_kernel+0x0/0x41c
[ 31.418206] start_kernel+0x328/0x41c
[ 31.419322] __primary_switched+0xbc/0xc4
[ 31.421651] Code: a8c17bfd d50323bf d65f03c0 d503233f (d4210000)
[ 31.425128] ---[ end trace 0000000000000000 ]---
[ 31.427231] Kernel panic - not syncing: Oops - BUG: Fatal exception in interrupt
[ 31.428962] SMP: stopping secondary CPUs
[ 31.432119] Kernel Offset: 0x37c311e00000 from 0xffff800008000000
[ 31.433208] PHYS_OFFSET: 0xffffaa6840000000
[ 31.433966] CPU features: 0x20000,2013c080,0000421b
[ 31.435508] Memory Limit: none
[ 31.437214] ---[ end Kernel panic - not syncing: Oops - BUG: Fatal exception in interrupt ]---
边看老师的视频,参考fujita和查找网络资料,终于ping通了
root@openmediavault:~/yangkai/work/rcore_2023a/rust-for_linux# make setup
make -C e1000-driver/src/linux
make[1]: 进入目录“/srv/dev-disk-by-uuid-acaca851-c5c0-4f99-8522-91fec8bd0740/users/yangkai/work/rcore_2023a/rust-for_linux/e1000-driver/src/linux”
make ARCH=arm64 LLVM=1 -C ../../../linux-fujita/build M=/srv/dev-disk-by-uuid-acaca851-c5c0-4f99-8522-91fec8bd0740/users/yangkai/work/rcore_2023a/rust-for_linux/e1000-driver/src/linux/../ modules #rust-analyzer
make[2]: 进入目录“/srv/dev-disk-by-uuid-acaca851-c5c0-4f99-8522-91fec8bd0740/users/yangkai/work/rcore_2023a/rust-for_linux/linux-fujita/build”
make run
RUSTC [M] /srv/dev-disk-by-uuid-acaca851-c5c0-4f99-8522-91fec8bd0740/users/yangkai/work/rcore_2023a/rust-for_linux/e1000-driver/src/linux/../e1000_for_linux.o
MODPOST /srv/dev-disk-by-uuid-acaca851-c5c0-4f99-8522-91fec8bd0740/users/yangkai/work/rcore_2023a/rust-for_linux/e1000-driver/src/linux/../Module.symvers
LD [M] /srv/dev-disk-by-uuid-acaca851-c5c0-4f99-8522-91fec8bd0740/users/yangkai/work/rcore_2023a/rust-for_linux/e1000-driver/src/linux/../e1000_for_linux.ko
make[2]: 离开目录“/srv/dev-disk-by-uuid-acaca851-c5c0-4f99-8522-91fec8bd0740/users/yangkai/work/rcore_2023a/rust-for_linux/linux-fujita/build”
make[1]: 离开目录“/srv/dev-disk-by-uuid-acaca851-c5c0-4f99-8522-91fec8bd0740/users/yangkai/work/rcore_2023a/rust-for_linux/e1000-driver/src/linux”
rm busybox-1.33.2/_install/e1000_for_linux.ko
cp e1000-driver/src/e1000_for_linux.ko busybox-1.33.2/_install/
cd busybox-1.33.2/; ./setup.sh; cd -
mkdir: 无法创建目录 “proc”: 文件已存在
mkdir: 无法创建目录 “sys”: 文件已存在
mkdir: 无法创建目录 “dev”: 文件已存在
mkdir: 无法创建目录 “tmp”: 文件已存在
.
./bin
./bin/busybox
./bin/arch
./bin/ash
./bin/base32
./bin/base64
./bin/cat
./bin/chattr
./bin/chgrp
./bin/chmod
./bin/chown
./bin/conspy
./bin/cp
./bin/cpio
./bin/cttyhack
./bin/date
./bin/dd
./bin/df
./bin/dmesg
./bin/dnsdomainname
./bin/dumpkmap
./bin/echo
./bin/ed
./bin/egrep
./bin/false
./bin/fatattr
./bin/fdflush
./bin/fgrep
./bin/fsync
./bin/getopt
./bin/grep
./bin/gunzip
./bin/gzip
./bin/hostname
./bin/hush
./bin/ionice
./bin/iostat
./bin/ipcalc
./bin/kbd_mode
./bin/kill
./bin/link
./bin/linux32
./bin/linux64
./bin/ln
./bin/login
./bin/ls
./bin/lsattr
./bin/lzop
./bin/makemime
./bin/mkdir
./bin/mknod
./bin/mktemp
./bin/more
./bin/mount
./bin/mountpoint
./bin/mpstat
./bin/mt
./bin/mv
./bin/netstat
./bin/nice
./bin/nuke
./bin/pidof
./bin/ping
./bin/ping6
./bin/pipe_progress
./bin/printenv
./bin/ps
./bin/pwd
./bin/reformime
./bin/resume
./bin/rev
./bin/rm
./bin/rmdir
./bin/rpm
./bin/run-parts
./bin/scriptreplay
./bin/sed
./bin/setarch
./bin/setpriv
./bin/setserial
./bin/sh
./bin/sleep
./bin/stat
./bin/stty
./bin/su
./bin/sync
./bin/tar
./bin/touch
./bin/true
./bin/umount
./bin/uname
./bin/usleep
./bin/vi
./bin/watch
./bin/zcat
./bin/rust_helloworld.ko
./linuxrc
./sbin
./sbin/acpid
./sbin/adjtimex
./sbin/arp
./sbin/blkid
./sbin/blockdev
./sbin/bootchartd
./sbin/depmod
./sbin/devmem
./sbin/fbsplash
./sbin/fdisk
./sbin/findfs
./sbin/freeramdisk
./sbin/fsck
./sbin/fsck.minix
./sbin/fstrim
./sbin/getty
./sbin/halt
./sbin/hdparm
./sbin/hwclock
./sbin/ifconfig
./sbin/ifdown
./sbin/ifenslave
./sbin/ifup
./sbin/init
./sbin/insmod
./sbin/ip
./sbin/ipaddr
./sbin/iplink
./sbin/ipneigh
./sbin/iproute
./sbin/iprule
./sbin/iptunnel
./sbin/klogd
./sbin/loadkmap
./sbin/logread
./sbin/losetup
./sbin/lsmod
./sbin/makedevs
./sbin/mdev
./sbin/mkdosfs
./sbin/mke2fs
./sbin/mkfs.ext2
./sbin/mkfs.minix
./sbin/mkfs.vfat
./sbin/mkswap
./sbin/modinfo
./sbin/modprobe
./sbin/nameif
./sbin/pivot_root
./sbin/poweroff
./sbin/raidautorun
./sbin/reboot
./sbin/rmmod
./sbin/route
./sbin/run-init
./sbin/runlevel
./sbin/setconsole
./sbin/slattach
./sbin/start-stop-daemon
./sbin/sulogin
./sbin/swapoff
./sbin/swapon
./sbin/switch_root
./sbin/sysctl
./sbin/syslogd
./sbin/tc
./sbin/tunctl
./sbin/uevent
./sbin/vconfig
./sbin/watchdog
./sbin/zcip
./usr
./usr/bin
./usr/bin/[
./usr/bin/[[
./usr/bin/awk
./usr/bin/basename
./usr/bin/bc
./usr/bin/beep
./usr/bin/blkdiscard
./usr/bin/bunzip2
./usr/bin/bzcat
./usr/bin/bzip2
./usr/bin/cal
./usr/bin/chpst
./usr/bin/chrt
./usr/bin/chvt
./usr/bin/cksum
./usr/bin/clear
./usr/bin/cmp
./usr/bin/comm
./usr/bin/crontab
./usr/bin/cryptpw
./usr/bin/cut
./usr/bin/dc
./usr/bin/deallocvt
./usr/bin/diff
./usr/bin/dirname
./usr/bin/dos2unix
./usr/bin/dpkg
./usr/bin/dpkg-deb
./usr/bin/du
./usr/bin/dumpleases
./usr/bin/eject
./usr/bin/env
./usr/bin/envdir
./usr/bin/envuidgid
./usr/bin/expand
./usr/bin/expr
./usr/bin/factor
./usr/bin/fallocate
./usr/bin/fgconsole
./usr/bin/find
./usr/bin/flock
./usr/bin/fold
./usr/bin/free
./usr/bin/ftpget
./usr/bin/ftpput
./usr/bin/fuser
./usr/bin/groups
./usr/bin/hd
./usr/bin/head
./usr/bin/hexdump
./usr/bin/hexedit
./usr/bin/hostid
./usr/bin/id
./usr/bin/install
./usr/bin/ipcrm
./usr/bin/ipcs
./usr/bin/killall
./usr/bin/last
./usr/bin/less
./usr/bin/logger
./usr/bin/logname
./usr/bin/lpq
./usr/bin/lpr
./usr/bin/lsof
./usr/bin/lspci
./usr/bin/lsscsi
./usr/bin/lsusb
./usr/bin/lzcat
./usr/bin/lzma
./usr/bin/man
./usr/bin/md5sum
./usr/bin/mesg
./usr/bin/microcom
./usr/bin/mkfifo
./usr/bin/mkpasswd
./usr/bin/nc
./usr/bin/nl
./usr/bin/nmeter
./usr/bin/nohup
./usr/bin/nproc
./usr/bin/nsenter
./usr/bin/nslookup
./usr/bin/od
./usr/bin/openvt
./usr/bin/passwd
./usr/bin/paste
./usr/bin/patch
./usr/bin/pgrep
./usr/bin/pkill
./usr/bin/pmap
./usr/bin/printf
./usr/bin/pscan
./usr/bin/pstree
./usr/bin/pwdx
./usr/bin/readlink
./usr/bin/realpath
./usr/bin/renice
./usr/bin/reset
./usr/bin/resize
./usr/bin/rpm2cpio
./usr/bin/runsv
./usr/bin/runsvdir
./usr/bin/rx
./usr/bin/script
./usr/bin/seq
./usr/bin/setfattr
./usr/bin/setkeycodes
./usr/bin/setsid
./usr/bin/setuidgid
./usr/bin/sha1sum
./usr/bin/sha256sum
./usr/bin/sha3sum
./usr/bin/sha512sum
./usr/bin/showkey
./usr/bin/shred
./usr/bin/shuf
./usr/bin/smemcap
./usr/bin/softlimit
./usr/bin/sort
./usr/bin/split
./usr/bin/ssl_client
./usr/bin/strings
./usr/bin/sum
./usr/bin/sv
./usr/bin/svc
./usr/bin/svok
./usr/bin/tac
./usr/bin/tail
./usr/bin/taskset
./usr/bin/tcpsvd
./usr/bin/tee
./usr/bin/telnet
./usr/bin/test
./usr/bin/tftp
./usr/bin/time
./usr/bin/timeout
./usr/bin/top
./usr/bin/tr
./usr/bin/traceroute
./usr/bin/traceroute6
./usr/bin/truncate
./usr/bin/ts
./usr/bin/tty
./usr/bin/ttysize
./usr/bin/udpsvd
./usr/bin/unexpand
./usr/bin/uniq
./usr/bin/unix2dos
./usr/bin/unlink
./usr/bin/unlzma
./usr/bin/unshare
./usr/bin/unxz
./usr/bin/unzip
./usr/bin/uptime
./usr/bin/users
./usr/bin/uudecode
./usr/bin/uuencode
./usr/bin/vlock
./usr/bin/volname
./usr/bin/w
./usr/bin/wall
./usr/bin/wc
./usr/bin/wget
./usr/bin/which
./usr/bin/who
./usr/bin/whoami
./usr/bin/whois
./usr/bin/xargs
./usr/bin/xxd
./usr/bin/xz
./usr/bin/xzcat
./usr/bin/yes
./usr/sbin
./usr/sbin/add-shell
./usr/sbin/addgroup
./usr/sbin/adduser
./usr/sbin/arping
./usr/sbin/brctl
./usr/sbin/chat
./usr/sbin/chpasswd
./usr/sbin/chroot
./usr/sbin/crond
./usr/sbin/delgroup
./usr/sbin/deluser
./usr/sbin/dnsd
./usr/sbin/ether-wake
./usr/sbin/fakeidentd
./usr/sbin/fbset
./usr/sbin/fdformat
./usr/sbin/fsfreeze
./usr/sbin/ftpd
./usr/sbin/httpd
./usr/sbin/i2cdetect
./usr/sbin/i2cdump
./usr/sbin/i2cget
./usr/sbin/i2cset
./usr/sbin/i2ctransfer
./usr/sbin/ifplugd
./usr/sbin/inetd
./usr/sbin/killall5
./usr/sbin/loadfont
./usr/sbin/lpd
./usr/sbin/mim
./usr/sbin/nanddump
./usr/sbin/nandwrite
./usr/sbin/nbd-client
./usr/sbin/nologin
./usr/sbin/ntpd
./usr/sbin/partprobe
./usr/sbin/popmaildir
./usr/sbin/powertop
./usr/sbin/rdate
./usr/sbin/rdev
./usr/sbin/readahead
./usr/sbin/readprofile
./usr/sbin/remove-shell
./usr/sbin/rtcwake
./usr/sbin/sendmail
./usr/sbin/setfont
./usr/sbin/setlogcons
./usr/sbin/svlogd
./usr/sbin/tftpd
./usr/sbin/ubiattach
./usr/sbin/ubidetach
./usr/sbin/ubimkvol
./usr/sbin/ubirename
./usr/sbin/ubirmvol
./usr/sbin/ubirsvol
./usr/sbin/ubiupdatevol
./proc
./sys
./dev
./tmp
./init
./e1000_for_linux.ko
4876 块
/root/yangkai/work/rcore_2023a/rust-for_linux/busybox-1.33.2
/root/yangkai/work/rcore_2023a/rust-for_linux
root@openmediavault:~/yangkai/work/rcore_2023a/rust-for_linux# make run
#qemu-system-aarch64 -M virt -cpu cortex-a72 -smp 8 -m 128M -kernel linux/build/arch/arm64/boot/Image -initrd busybox-1.33.2/initramfs.cpio.gz -nographic -append "init=/linuxrc console=ttyAMA0"
qemu-system-aarch64 -M virt \
-cpu cortex-a72 \
-smp 8 \
-m 128M \
-device virtio-net-device,netdev=net \
-netdev user,id=net,hostfwd=tcp::2222-:22 \
-kernel linux-fujita/build/arch/arm64/boot/Image \
-initrd busybox-1.33.2/initramfs.cpio.gz \
-nographic \
-device e1000,netdev=net0,bus=pcie.0 \
-netdev user,id=net0 \
-append "init=/linuxrc console=ttyAMA0"
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
[ 0.000000] Linux version 6.1.0-rc1-g5fc95830739f-dirty (root@openmediavault) (Debian clang version 11.0.1-2, LLD 11.0.1) #4 SMP PREEMPT Sat Nov 18 17:07:27 CST 2023
[ 0.000000] random: crng init done
[ 0.000000] Machine model: linux,dummy-virt
[ 0.000000] efi: UEFI not found.
[ 0.000000] NUMA: No NUMA configuration found
[ 0.000000] NUMA: Faking a node at [mem 0x0000000040000000-0x0000000047ffffff]
[ 0.000000] NUMA: NODE_DATA [mem 0x47faea00-0x47fb0fff]
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000040000000-0x0000000047ffffff]
[ 0.000000] DMA32 empty
[ 0.000000] Normal empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000040000000-0x0000000047ffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x0000000047ffffff]
[ 0.000000] cma: Reserved 32 MiB at 0x0000000045c00000
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv1.1 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: Trusted OS migration not required
[ 0.000000] psci: SMC Calling Convention v1.0
[ 0.000000] percpu: Embedded 20 pages/cpu s44840 r8192 d28888 u81920
[ 0.000000] Detected PIPT I-cache on CPU0
[ 0.000000] CPU features: detected: Spectre-v2
[ 0.000000] CPU features: detected: Spectre-v3a
[ 0.000000] CPU features: detected: Spectre-v4
[ 0.000000] CPU features: detected: Spectre-BHB
[ 0.000000] CPU features: kernel page table isolation forced ON by KASLR
[ 0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[ 0.000000] CPU features: detected: ARM erratum 1742098
[ 0.000000] CPU features: detected: ARM errata 1165522, 1319367, or 1530923
[ 0.000000] alternatives: applying boot alternatives
[ 0.000000] Fallback order for Node 0: 0
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 32256
[ 0.000000] Policy zone: DMA
[ 0.000000] Kernel command line: init=/linuxrc console=ttyAMA0
[ 0.000000] Dentry cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[ 0.000000] Memory: 60668K/131072K available (16512K kernel code, 3726K rwdata, 9232K rodata, 1920K init, 610K bss, 37636K reserved, 32768K cma-reserved)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
[ 0.000000] rcu: Preemptible hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=8.
[ 0.000000] Trampoline variant of Tasks RCU enabled.
[ 0.000000] Tracing variant of Tasks RCU enabled.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=8
[ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[ 0.000000] Root IRQ handler: gic_handle_irq
[ 0.000000] GICv2m: range[mem 0x08020000-0x08020fff], SPI[80:143]
[ 0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[ 0.000000] arch_timer: cp15 timer(s) running at 62.50MHz (virt).
[ 0.000000] clocksource: arch_sys_counter: mask: 0x1ffffffffffffff max_cycles: 0x1cd42e208c, max_idle_ns: 881590405314 ns
[ 0.000256] sched_clock: 57 bits at 63MHz, resolution 16ns, wraps every 4398046511096ns
[ 0.049108] Console: colour dummy device 80x25
[ 0.061200] Calibrating delay loop (skipped), value calculated using timer frequency.. 125.00 BogoMIPS (lpj=250000)
[ 0.061940] pid_max: default: 32768 minimum: 301
[ 0.066289] LSM: Security Framework initializing
[ 0.081869] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[ 0.082129] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[ 0.247123] cacheinfo: Unable to detect cache hierarchy for CPU 0
[ 0.278157] cblist_init_generic: Setting adjustable number of callback queues.
[ 0.278734] cblist_init_generic: Setting shift to 3 and lim to 1.
[ 0.280340] cblist_init_generic: Setting shift to 3 and lim to 1.
[ 0.288561] rcu: Hierarchical SRCU implementation.
[ 0.288768] rcu: Max phase no-delay instances is 1000.
[ 0.320921] EFI services will not be available.
[ 0.329118] smp: Bringing up secondary CPUs ...
[ 0.353431] Detected PIPT I-cache on CPU1
[ 0.358678] cacheinfo: Unable to detect cache hierarchy for CPU 1
[ 0.361510] CPU1: Booted secondary processor 0x0000000001 [0x410fd083]
[ 0.389976] Detected PIPT I-cache on CPU2
[ 0.391514] cacheinfo: Unable to detect cache hierarchy for CPU 2
[ 0.393306] CPU2: Booted secondary processor 0x0000000002 [0x410fd083]
[ 0.407774] Detected PIPT I-cache on CPU3
[ 0.409082] cacheinfo: Unable to detect cache hierarchy for CPU 3
[ 0.410612] CPU3: Booted secondary processor 0x0000000003 [0x410fd083]
[ 0.420264] Detected PIPT I-cache on CPU4
[ 0.421619] cacheinfo: Unable to detect cache hierarchy for CPU 4
[ 0.423138] CPU4: Booted secondary processor 0x0000000004 [0x410fd083]
[ 0.432418] Detected PIPT I-cache on CPU5
[ 0.433736] cacheinfo: Unable to detect cache hierarchy for CPU 5
[ 0.435197] CPU5: Booted secondary processor 0x0000000005 [0x410fd083]
[ 0.444941] Detected PIPT I-cache on CPU6
[ 0.446466] cacheinfo: Unable to detect cache hierarchy for CPU 6
[ 0.448048] CPU6: Booted secondary processor 0x0000000006 [0x410fd083]
[ 0.458291] Detected PIPT I-cache on CPU7
[ 0.459889] cacheinfo: Unable to detect cache hierarchy for CPU 7
[ 0.461603] CPU7: Booted secondary processor 0x0000000007 [0x410fd083]
[ 0.464408] smp: Brought up 1 node, 8 CPUs
[ 0.465358] SMP: Total of 8 processors activated.
[ 0.465937] CPU features: detected: 32-bit EL0 Support
[ 0.466108] CPU features: detected: 32-bit EL1 Support
[ 0.466659] CPU features: detected: CRC32 instructions
[ 0.521227] CPU: All CPU(s) started at EL1
[ 0.522007] alternatives: applying system-wide alternatives
[ 0.665011] devtmpfs: initialized
[ 0.757308] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.759494] futex hash table entries: 2048 (order: 5, 131072 bytes, linear)
[ 0.780097] pinctrl core: initialized pinctrl subsystem
[ 0.845433] DMI not present or invalid.
[ 0.894497] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[ 0.964930] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
[ 0.969401] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[ 0.971682] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[ 0.973403] audit: initializing netlink subsys (disabled)
[ 0.990866] audit: type=2000 audit(0.772:1): state=initialized audit_enabled=0 res=1
[ 1.017865] thermal_sys: Registered thermal governor 'step_wise'
[ 1.018151] thermal_sys: Registered thermal governor 'power_allocator'
[ 1.020840] cpuidle: using governor menu
[ 1.027958] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[ 1.036769] ASID allocator initialised with 32768 entries
[ 1.072882] Serial: AMBA PL011 UART driver
[ 1.296562] 9000000.pl011: ttyAMA0 at MMIO 0x9000000 (irq = 13, base_baud = 0) is a PL011 rev1
[ 1.503418] printk: console [ttyAMA0] enabled
[ 1.572052] KASLR enabled
[ 1.734648] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[ 1.736199] HugeTLB: 16380 KiB vmemmap can be freed for a 1.00 GiB page
[ 1.737757] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[ 1.739926] HugeTLB: 508 KiB vmemmap can be freed for a 32.0 MiB page
[ 1.740902] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[ 1.742456] HugeTLB: 28 KiB vmemmap can be freed for a 2.00 MiB page
[ 1.744922] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[ 1.746089] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[ 1.808152] ACPI: Interpreter disabled.
[ 1.848039] iommu: Default domain type: Translated
[ 1.849913] iommu: DMA domain TLB invalidation policy: strict mode
[ 1.859372] SCSI subsystem initialized
[ 1.875374] usbcore: registered new interface driver usbfs
[ 1.878273] usbcore: registered new interface driver hub
[ 1.882311] usbcore: registered new device driver usb
[ 1.897213] pps_core: LinuxPPS API ver. 1 registered
[ 1.898369] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 1.901883] PTP clock support registered
[ 1.905231] EDAC MC: Ver: 3.0.0
[ 1.940091] FPGA manager framework
[ 1.945096] Advanced Linux Sound Architecture Driver Initialized.
[ 2.002642] vgaarb: loaded
[ 2.091444] clocksource: Switched to clocksource arch_sys_counter
[ 2.117444] VFS: Disk quotas dquot_6.6.0
[ 2.119794] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 2.130285] pnp: PnP ACPI: disabled
[ 2.310575] NET: Registered PF_INET protocol family
[ 2.318174] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[ 2.358581] tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 4096 bytes, linear)
[ 2.360924] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[ 2.362520] TCP established hash table entries: 1024 (order: 1, 8192 bytes, linear)
[ 2.365462] TCP bind hash table entries: 1024 (order: 3, 32768 bytes, linear)
[ 2.367582] TCP: Hash tables configured (established 1024 bind 1024)
[ 2.443555] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 2.446309] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 2.455380] NET: Registered PF_UNIX/PF_LOCAL protocol family
[ 2.479354] RPC: Registered named UNIX socket transport module.
[ 2.480917] RPC: Registered udp transport module.
[ 2.481804] RPC: Registered tcp transport module.
[ 2.482539] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 2.483899] PCI: CLS 0 bytes, default 64
[ 2.522041] Unpacking initramfs...
[ 2.539734] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[ 2.554091] kvm [1]: HYP mode not available
[ 2.594326] Initialise system trusted keyrings
[ 2.605053] workingset: timestamp_bits=42 max_order=15 bucket_order=0
[ 2.751485] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 2.778069] NFS: Registering the id_resolver key type
[ 2.781289] Key type id_resolver registered
[ 2.782194] Key type id_legacy registered
[ 2.786292] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 2.788757] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[ 2.794800] 9p: Installing v9fs 9p2000 file system support
[ 2.962624] Key type asymmetric registered
[ 2.963954] Asymmetric key parser 'x509' registered
[ 2.967160] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
[ 2.969632] io scheduler mq-deadline registered
[ 2.970791] io scheduler kyber registered
[ 3.023779] Freeing initrd memory: 1212K
[ 3.193338] pl061_gpio 9030000.pl061: PL061 GPIO chip registered
[ 3.232680] pci-host-generic 4010000000.pcie: host bridge /pcie@10000000 ranges:
[ 3.237400] pci-host-generic 4010000000.pcie: IO 0x003eff0000..0x003effffff -> 0x0000000000
[ 3.241782] pci-host-generic 4010000000.pcie: MEM 0x0010000000..0x003efeffff -> 0x0010000000
[ 3.243432] pci-host-generic 4010000000.pcie: MEM 0x8000000000..0xffffffffff -> 0x8000000000
[ 3.248984] pci-host-generic 4010000000.pcie: Memory resource size exceeds max for 32 bits
[ 3.253888] pci-host-generic 4010000000.pcie: ECAM at [mem 0x4010000000-0x401fffffff] for [bus 00-ff]
[ 3.265394] pci-host-generic 4010000000.pcie: PCI host bridge to bus 0000:00
[ 3.267974] pci_bus 0000:00: root bus resource [bus 00-ff]
[ 3.269976] pci_bus 0000:00: root bus resource [io 0x0000-0xffff]
[ 3.271170] pci_bus 0000:00: root bus resource [mem 0x10000000-0x3efeffff]
[ 3.272908] pci_bus 0000:00: root bus resource [mem 0x8000000000-0xffffffffff]
[ 3.283711] pci 0000:00:00.0: [1b36:0008] type 00 class 0x060000
[ 3.310041] pci 0000:00:01.0: [8086:100e] type 00 class 0x020000
[ 3.312601] pci 0000:00:01.0: reg 0x10: [mem 0x00000000-0x0001ffff]
[ 3.314140] pci 0000:00:01.0: reg 0x14: [io 0x0000-0x003f]
[ 3.315230] pci 0000:00:01.0: reg 0x30: [mem 0x00000000-0x0003ffff pref]
[ 3.331329] pci 0000:00:01.0: BAR 6: assigned [mem 0x10000000-0x1003ffff pref]
[ 3.334502] pci 0000:00:01.0: BAR 0: assigned [mem 0x10040000-0x1005ffff]
[ 3.335946] pci 0000:00:01.0: BAR 1: assigned [io 0x1000-0x103f]
[ 3.376146] EINJ: ACPI disabled.
[ 6.811704] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[ 6.862840] SuperH (H)SCI(F) driver initialized
[ 6.871494] msm_serial: driver initialized
[ 6.901232] cacheinfo: Unable to detect cache hierarchy for CPU 0
[ 7.086548] loop: module loaded
[ 7.107737] megasas: 07.719.03.00-rc1
[ 7.146483] physmap-flash 0.flash: physmap platform flash device: [mem 0x00000000-0x03ffffff]
[ 7.156826] 0.flash: Found 2 x16 devices at 0x0 in 32-bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
[ 7.161047] Intel/Sharp Extended Query Table at 0x0031
[ 7.166601] Using buffer write method
[ 7.170663] physmap-flash 0.flash: physmap platform flash device: [mem 0x04000000-0x07ffffff]
[ 7.175718] 0.flash: Found 2 x16 devices at 0x0 in 32-bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
[ 7.178200] Intel/Sharp Extended Query Table at 0x0031
[ 7.183545] Using buffer write method
[ 7.186232] Concatenating MTD devices:
[ 7.187173] (0): "0.flash"
[ 7.187838] (1): "0.flash"
[ 7.188627] into device "0.flash"
[ 7.652724] tun: Universal TUN/TAP device driver, 1.6
[ 7.720986] thunder_xcv, ver 1.0
[ 7.723589] thunder_bgx, ver 1.0
[ 7.725816] nicpf, ver 1.0
[ 7.757131] hns3: Hisilicon Ethernet Network Driver for Hip08 Family - version
[ 7.758568] hns3: Copyright (c) 2017 Huawei Corporation.
[ 7.762237] hclge is initializing
[ 7.763635] igb: Intel(R) Gigabit Ethernet Network Driver
[ 7.765260] igb: Copyright (c) 2007-2014 Intel Corporation.
[ 7.767005] igbvf: Intel(R) Gigabit Virtual Function Network Driver
[ 7.768812] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.
[ 7.776907] sky2: driver version 1.30
[ 7.797884] VFIO - User Level meta-driver version: 0.3
[ 7.859380] usbcore: registered new interface driver usb-storage
[ 7.935973] rtc-pl031 9010000.pl031: registered as rtc0
[ 7.941032] rtc-pl031 9010000.pl031: setting system clock to 2023-11-18T09:16:03 UTC (1700298963)
[ 7.955616] i2c_dev: i2c /dev entries driver
[ 8.059070] sdhci: Secure Digital Host Controller Interface driver
[ 8.059855] sdhci: Copyright(c) Pierre Ossman
[ 8.071777] Synopsys Designware Multimedia Card Interface Driver
[ 8.087867] sdhci-pltfm: SDHCI platform and OF driver helper
[ 8.124867] ledtrig-cpu: registered to indicate activity on CPUs
[ 8.161537] usbcore: registered new interface driver usbhid
[ 8.162572] usbhid: USB HID core driver
[ 8.277153] NET: Registered PF_PACKET protocol family
[ 8.287369] 9pnet: Installing 9P2000 support
[ 8.290182] Key type dns_resolver registered
[ 8.299244] registered taskstats version 1
[ 8.301883] Loading compiled-in X.509 certificates
[ 8.579201] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[ 8.633746] ALSA device list:
[ 8.635656] No soundcards found.
[ 8.657956] uart-pl011 9000000.pl011: no DMA platform data
[ 9.316736] Freeing unused kernel memory: 1920K
[ 9.359573] Run /init as init process
[ 9.859655] e1000_for_linux: loading out-of-tree module taints kernel.
[ 9.912870] rust_e1000dev: Rust e1000 device driver (init)
[ 9.922525] rust_e1000dev: PCI Driver probing Some(1)
[ 9.929381] rust_e1000dev 0000:00:01.0: enabling device (0000 -> 0003)
[ 9.936856] rust_e1000dev: PCI MappedResource addr: 0xffff800008480000, len: 131072, irq: 19
[ 9.951156] rust_e1000dev: get stats64
[ 10.065963] rust_e1000dev: get stats64
eth1 Link encap:Ethernet HWaddr 52:54:00:12:34:55
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
[ 10.236884] rust_e1000dev: Ethernet E1000 open
[ 10.237899] rust_e1000dev: New E1000 device @ 0xffff800008480000
[ 10.241513] rust_e1000dev: Allocated vaddr: 0xffff18b08332f000, paddr: 0x4332f000
[ 10.244159] rust_e1000dev: Allocated vaddr: 0xffff18b083424000, paddr: 0x43424000
[ 10.258288] rust_e1000dev: Allocated vaddr: 0xffff18b085c80000, paddr: 0x45c80000
[ 10.267599] rust_e1000dev: Allocated vaddr: 0xffff18b085d00000, paddr: 0x45d00000
[ 10.270784] rust_e1000dev: e1000 CTL: 0x140240, Status: 0x80080783
[ 10.271943] rust_e1000dev: e1000_init has been completed
[ 10.273726] rust_e1000dev: e1000 device is initialized
[ 10.280992] rust_e1000dev: handle_irq
[ 10.282869] rust_e1000dev: irq::Handler E1000_ICR = 0x4
[ 10.286218] rust_e1000dev: get stats64
[ 10.289874] rust_e1000dev: NapiPoller poll
[ 10.291886] rust_e1000dev: e1000_recv
[ 10.291886]
[ 10.292258] rust_e1000dev: irq::handler recv is None
[ 10.323775] rust_e1000dev: get stats64
/bin/sh: can't access tty; job control turned off
/ # ping 10.0.2.2
PING 10.0.2.2 (10.0.2.2): 56 data bytes
[ 18.279362] [r4l test]:binding start xmit
[ 18.281663] rust_e1000dev: Read E1000_TDT = 0x0
[ 18.282078] rust_e1000dev: >>>>>>>>> TX PKT 60
[ 18.282844] rust_e1000dev:
[ 18.282844]
[ 18.284086] rust_e1000dev: handle_irq
[ 18.291407] rust_e1000dev: irq::Handler E1000_ICR = 0x83
[ 18.293517] rust_e1000dev: NapiPoller poll
[ 18.295755] rust_e1000dev: Read E1000_RDT + 1 = 0x0
[ 18.296219] rust_e1000dev: RX PKT 64 <<<<<<<<<
[ 18.299517] rust_e1000dev: e1000_recv
[ 18.299517]
[ 18.301622] rust_e1000dev: irq::Handler recv = 0x1
[ 18.316187] rust_e1000dev: irq::Handler recv = packets_len:0x1 datalen:0x40
[ 18.330359] [r4l test]:binding start xmit
[ 18.332177] rust_e1000dev: Read E1000_TDT = 0x1
[ 18.332326] rust_e1000dev: >>>>>>>>> TX PKT 98
[ 18.334101] rust_e1000dev:
[ 18.334101]
[ 18.338608] rust_e1000dev: handle_irq
[ 18.340693] rust_e1000dev: irq::Handler E1000_ICR = 0x83
[ 18.346517] rust_e1000dev: NapiPoller poll
[ 18.347330] rust_e1000dev: Read E1000_RDT + 1 = 0x1
[ 18.347421] rust_e1000dev: RX PKT 98 <<<<<<<<<
[ 18.348343] rust_e1000dev: e1000_recv
[ 18.348343]
[ 18.350169] rust_e1000dev: irq::Handler recv = 0x1
[ 18.353030] rust_e1000dev: irq::Handler recv = packets_len:0x1 datalen:0x62
64 bytes from 10.0.2.2: seq=0 ttl=255 time=122.904 ms
[ 19.313489] [r4l test]:binding start xmit
[ 19.315003] rust_e1000dev: Read E1000_TDT = 0x2
[ 19.315273] rust_e1000dev: >>>>>>>>> TX PKT 98
[ 19.316666] rust_e1000dev:
[ 19.316666]
[ 19.318228] rust_e1000dev: handle_irq
[ 19.323728] rust_e1000dev: irq::Handler E1000_ICR = 0x83
[ 19.325865] rust_e1000dev: NapiPoller poll
[ 19.327389] rust_e1000dev: Read E1000_RDT + 1 = 0x2
[ 19.327518] rust_e1000dev: RX PKT 98 <<<<<<<<<
[ 19.329009] rust_e1000dev: e1000_recv
[ 19.329009]
[ 19.330706] rust_e1000dev: irq::Handler recv = 0x1
[ 19.333860] rust_e1000dev: irq::Handler recv = packets_len:0x1 datalen:0x62
64 bytes from 10.0.2.2: seq=1 ttl=255 time=27.249 ms
[ 20.339028] [r4l test]:binding start xmit
[ 20.340420] rust_e1000dev: Read E1000_TDT = 0x3
[ 20.340669] rust_e1000dev: >>>>>>>>> TX PKT 98
[ 20.341640] rust_e1000dev:
[ 20.341640]
[ 20.343304] rust_e1000dev: handle_irq
[ 20.346551] rust_e1000dev: irq::Handler E1000_ICR = 0x83
[ 20.348644] rust_e1000dev: NapiPoller poll
[ 20.350200] rust_e1000dev: Read E1000_RDT + 1 = 0x3
[ 20.350338] rust_e1000dev: RX PKT 98 <<<<<<<<<
[ 20.352735] rust_e1000dev: e1000_recv
[ 20.352735]
[ 20.354760] rust_e1000dev: irq::Handler recv = 0x1
[ 20.358279] rust_e1000dev: irq::Handler recv = packets_len:0x1 datalen:0x62
64 bytes from 10.0.2.2: seq=2 ttl=255 time=23.375 ms