luigifcruz / pico-stuff

I add my Pi Pico (RP2040) stuff here.
GNU General Public License v2.0
170 stars 21 forks source link

Windows on ARM, Support? #2

Open sidd-kishan opened 2 years ago

sidd-kishan commented 2 years ago

Please connect the RPI PICO and the just the tcp server module to test the rndis compatibility as it will open the path to port the entire project to a low powered devices Window on ARM devices.

luigifcruz commented 2 years ago

Hi, unfortunately, I don't have access to a Windows machine to set this up. I would be happy to accept any PR featuring these changes.

karelv commented 1 year ago

I just build the tcp_server and upload it to my RP2040. Then my windows 10 machine does not have the driver...

image image

But windows cannot find it....

luigifcruz commented 1 year ago

I recently changed the code to use NCM (Network Control Model). According to Microsoft's documentation, this should be compatible with Windows 11 but not Windows 10.

karelv commented 1 year ago

Sorry, I have no windows 11 machine... Is it simple to configure to use another model which is compatible with Windows 10?

karelv commented 1 year ago

This is from august last year, it seems most users are still on Windows 10. https://techcommunity.microsoft.com/t5/windows-11/why-users-are-not-upgrading-to-windows-11-is-windows-11-a/m-p/3611663

luigifcruz commented 1 year ago

I understand. According to this thread, it might be possible to compile the driver for Windows 10. But this would require the driver to be signed. I'm not familiar with this process. Another alternative is to change NCM to ECM_RNDIS here. But I have no idea if it will work.

karelv commented 1 year ago

Cool, so went to that file, I swapped the 0 and the 1.... Then I created a build2 directory, and build again. However the linker is not happy. Could you have a look?

[100%] Building C object apps/tcp_server/CMakeFiles/tcp_server.dir/__/__/pico-extras/lib/lwip/src/apps/http/fs.c.obj
[100%] Building C object apps/tcp_server/CMakeFiles/tcp_server.dir/__/__/pico-extras/src/rp2_common/lwip/lwip_arch.c.obj
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/iperf_server.dir/main.c.obj: in function `linkoutput_fn':
main.c:(.text.linkoutput_fn+0x1c): undefined reference to `tud_network_can_xmit'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: main.c:(.text.linkoutput_fn+0x2e): undefined reference to `tud_network_xmit'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/iperf_server.dir/main.c.obj: in function `main':
main.c:(.text.startup.main+0x94): undefined reference to `tud_network_recv_renew'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/iperf_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj: in function `tud_init':
usbd.c:(.text.tud_init+0xa0): undefined reference to `netd_init'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_init+0xd4): undefined reference to `netd_init'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/iperf_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj: in function `tud_task':
usbd.c:(.text.tud_task+0x2e0): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x2f2): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x348): undefined reference to `netd_open'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x354): undefined reference to `netd_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x364): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x66c): undefined reference to `netd_control_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x7de): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x7f0): undefined reference to `netd_open'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x8c0): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/iperf_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x0): undefined reference to `netd_init'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/iperf_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x4): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/iperf_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x8): undefined reference to `netd_open'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/iperf_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0xc): undefined reference to `netd_control_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/iperf_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x10): undefined reference to `netd_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/piccolosdr.dir/main.c.obj: in function `linkoutput_fn':
main.c:(.text.linkoutput_fn+0x1c): undefined reference to `tud_network_can_xmit'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: main.c:(.text.linkoutput_fn+0x2e): undefined reference to `tud_network_xmit'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/piccolosdr.dir/main.c.obj: in function `main':
main.c:(.text.startup.main+0x1fe): undefined reference to `tud_network_recv_renew'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/piccolosdr.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj: in function `tud_init':
usbd.c:(.text.tud_init+0xa0): undefined reference to `netd_init'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_init+0xd4): undefined reference to `netd_init'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/piccolosdr.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj: in function `tud_task':
usbd.c:(.text.tud_task+0x2e0): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x2f2): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x348): undefined reference to `netd_open'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x354): undefined reference to `netd_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x364): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x66c): undefined reference to `netd_control_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x7de): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x7f0): undefined reference to `netd_open'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x8c0): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/piccolosdr.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x0): undefined reference to `netd_init'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/piccolosdr.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x4): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/piccolosdr.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x8): undefined reference to `netd_open'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/piccolosdr.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0xc): undefined reference to `netd_control_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/piccolosdr.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x10): undefined reference to `netd_xfer_cb'
collect2: error: ld returned 1 exit status
make[2]: *** [apps/iperf_server/CMakeFiles/iperf_server.dir/build.make:1640: apps/iperf_server/iperf_server.elf] Error 1
make[1]: *** [CMakeFiles/Makefile2:2275: apps/iperf_server/CMakeFiles/iperf_server.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
collect2: error: ld returned 1 exit status
make[2]: *** [apps/piccolosdr/CMakeFiles/piccolosdr.dir/build.make:1640: apps/piccolosdr/piccolosdr.elf] Error 1
make[1]: *** [CMakeFiles/Makefile2:2384: apps/piccolosdr/CMakeFiles/piccolosdr.dir/all] Error 2
[100%] Linking CXX executable tcp_server.elf
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/tcp_server.dir/main.c.obj: in function `linkoutput_fn':
main.c:(.text.linkoutput_fn+0x1c): undefined reference to `tud_network_can_xmit'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: main.c:(.text.linkoutput_fn+0x2e): undefined reference to `tud_network_xmit'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/tcp_server.dir/main.c.obj: in function `main':
main.c:(.text.startup.main+0x6c): undefined reference to `tud_network_recv_renew'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/tcp_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj: in function `tud_init':
usbd.c:(.text.tud_init+0xa0): undefined reference to `netd_init'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_init+0xd4): undefined reference to `netd_init'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/tcp_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj: in function `tud_task':
usbd.c:(.text.tud_task+0x2e0): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x2f2): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x348): undefined reference to `netd_open'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x354): undefined reference to `netd_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x364): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x66c): undefined reference to `netd_control_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x7de): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x7f0): undefined reference to `netd_open'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: usbd.c:(.text.tud_task+0x8c0): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/tcp_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x0): undefined reference to `netd_init'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/tcp_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x4): undefined reference to `netd_reset'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/tcp_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x8): undefined reference to `netd_open'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/tcp_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0xc): undefined reference to `netd_control_xfer_cb'
/usr/lib/gcc/arm-none-eabi/11.2.0/../../../../arm-none-eabi/bin/ld: CMakeFiles/tcp_server.dir/__/__/pico-sdk/lib/tinyusb/src/device/usbd.c.obj:(.rodata._usbd_driver+0x10): undefined reference to `netd_xfer_cb'
collect2: error: ld returned 1 exit status
make[2]: *** [apps/tcp_server/CMakeFiles/tcp_server.dir/build.make:1624: apps/tcp_server/tcp_server.elf] Error 1
make[1]: *** [CMakeFiles/Makefile2:2329: apps/tcp_server/CMakeFiles/tcp_server.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

Thanks.

karelv commented 1 year ago

I found the definition of the first missing reference: pico-sdk/lib/tinyusb/src/class/net/ncm_device.c But I'm not familiar with the CMakefile system, how can I add that file into the build?

luigifcruz commented 1 year ago

I think the source code for this is at the pico-sdk repository. Their CMake is quite complicated. It’s kind of a pain to modify things without breaking it.

— Luigi On Feb 1, 2023 at 2:57 PM -0300, karelv @.***>, wrote:

I found the definition of the first missing reference: pico-sdk/lib/tinyusb/src/class/net/ncm_device.c But I'm not familiar with the CMakefile system, how can I add that file into the build? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>