LoginSignup
0
0

FreeRTOSを動かしてみる(9)

Posted at

今回は受信側を実装していく

NICドライバからダミープロセスまで

以下の赤部分
image

こんな感じ

なぜかiovだと通信できなくて、kvecだと通信できた。
sendtoのコード見ても
なぜiovじゃだめなのかわからん。
ちなみにubufもだめだった。
多分この先でcopy_from_userとかしてるんだろうと想像(見てないけど)

ver5のときは普通にsock_sendmsgで通信できたんだけどなぁ。。。

ビルド&実行して

./run.sh 1

pingを打つと
ダミープロセスにarpリクエストが飛んでいることが見て取れる

virtether$ ping -w1 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
echoback.c(160) recv_main cond signal
echoback.c(82) main queue:0x7fce74000b70
echoback.c(86) main ff ff ff ff ff ff fe 93 21 0d 69 88 08 06 00 01
08 00 06 04 00 01 fe 93 21 0d 69 88 c0 a8 64 01
00 00 00 00 00 00 c0 a8 64 02 

echoback.c(218) send_callback write:42
echoback.c(82) main queue:(nil)

--- 192.168.100.2 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

ダミープロセスからQEMUへの送信

以下の赤部分

images

これはユーザ空間で普通にUDP通信するだけなので大したことはしていない。

qemu立ち上げて

CORTEX_M3_MPS2_QEMU_GCC$ sudo /home/voyager/workspace/oss/build_qemu/qemu-system-arm -machine mps2-an385 -m 16 -monitor null -semihosting --semihosting-config enable=on,target=native -kernel ./build/RTOSDemo.axf -serial stdio -nographic | tee qemu.log 

ビルド&実行して

virtether$ ./run.sh 1
gcc -g -O0 echoback.c -o echoback
make -C /lib/modules/6.5.6-300.fc39.x86_64/build M=/home/voyager/workspace/freertos/virtether modules
make[1]: Entering directory '/usr/src/kernels/6.5.6-300.fc39.x86_64'
  CC [M]  /home/voyager/workspace/freertos/virtether/virtether.o
  MODPOST /home/voyager/workspace/freertos/virtether/Module.symvers
  CC [M]  /home/voyager/workspace/freertos/virtether/virtether.mod.o
  LD [M]  /home/voyager/workspace/freertos/virtether/virtether.ko
  BTF [M] /home/voyager/workspace/freertos/virtether/virtether.ko
Skipping BTF generation for /home/voyager/workspace/freertos/virtether/virtether.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/kernels/6.5.6-300.fc39.x86_64'
EXTRA_CLAGS="-g -DDEBUG"
    try:
        ping -w1 192.168.100.2
        sudo echo "aiueo" > /dev/veth_cdev 

pingを打つと

virtether$ ping -w1 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
echoback.c(262) send_udp sendto(42): 42

--- 192.168.100.2 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

qemu側でARPパケットを受け取れていることが確認出来る。

mps2.c(801) udp_recvfromdummy TODO: irq fire n:42
mps2.c(801) udp_recvfromdummy TODO: irq fire n:42
mps2.c(801) udp_recvfromdummy TODO: irq fire n:42


参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0