[Resolved] How can I use libugpio.so library?
-
Good day, all. Last time I encountered with GPIO problems. I think all of C/C++ coders wants to use simple mechanism to GPIO manipulation. The second reason is using this library because it has poll-ed fuction to make pseudo-async events for our application. As I know we don't have any gpio drivers to use real hardware gpio interrupts with asynchronous dev-file operations.
I know that library libugpio.so is already installed in Onion OS in the /usr/lib/. It's compiled version mhei/libugpio, created by Michael Heimpold.
But I can't find any .h-file of it, also the development package (named libugpio-dev) is not avalable in the repository.
Unfortunately I can't use it as dynamicaly loaded because this version not export any symbols, the commands
nm
,readelf
,objdump
don't find any exported symbols in and any other one in the path /usr/lib.But if you open the file in a simple viewer you can find the text name of all the functions same as ugpio.h that can be found in the repository mhei/libugpio,
If anyone has used this library, please tell can I use.
-
@Modest-Polykarpovich take a look at the onion github https://github.com/OnionIoT
Take a look at all the stuff available for gpio work in C
-
Many thanks all, I've figure out on it! The format of libugpio.so is corrupted for a my version of GCC.
How to fix it and same one is below:
-
First, it's posible only in cross-compiling machine (see official documentation). I'm using OpenWRT SDK Toolchain (it's compiled toolchain for MIPS MT76x8) on Debian CLI Virtual Machine. See more details here and here.
-
Second. You must have right configuration of the
feeds.config.default
(the file at top path of SDK). My configuration is below:
src-git base https://github.com/openwrt/openwrt.git;v18.06.4 src-git packages https://github.com/openwrt/packages.git;openwrt-18.06 src-git onion https://github.com/OnionIoT/OpenWRT-Packages src-link omega2_kmods /home/vladimir/My_kmods #src-git luci https://git.openwrt.org/project/luci.git^4d6d8bc5b0d7ee71c7b29b12e7e0c2e1e86cb268 #src-git routing https://git.openwrt.org/feed/routing.git^bb156bf355b54236a52279522fabbec1e8dd7043 #src-git telephony https://git.openwrt.org/feed/telephony.git^507eabe1b60458ceb1a535aec9d12c8be95706f0
Look at the second line of my file:
src-git packages https://github.com/openwrt/packages.git;openwrt-18.06
I'm using GitHub Mirrow of The OpenWRT sources because Russian provider has banned resource https://git.openwrt.org. And I'm using named branch
openwrt-18.06
because Onion OS has based on its.- Third you must enter next commands below for download metafiles, sources, take configuration and compile our or another library (package).
3a) We are updating packages metadata from repository (see second line of feeds.config.default
myname@debian-cli:~/OpenWRT_sdk$ ./scripts/feeds update packages
3b) Next, let's install libugpio package in the our SDK.
myname@debian-cli:~/OpenWRT_sdk$ ./scripts/feeds install libugpio
3c) Next, we have to download sources, configure and compile package:
myname@debian-cli:~/OpenWRT_sdk$ make package/libugpio/download ... myname@debian-cli:~/OpenWRT_sdk$ make package/libugpio/prepare ... myname@debian-cli:~/OpenWRT_sdk$ make package/libugpio/compile
- Now we can try to find our files that we need to use in our own C/Π‘++ project:
myname@debian-cli:~$ find ./OpenWRT-sdk -type f -name "*ugpio.*" ./OpenWRT-sdk/build_dir/target-mipsel_24kc_musl/libugpio-0.0.6/.pkgdir/libugpio.installed ./OpenWRT-sdk/build_dir/target-mipsel_24kc_musl/libugpio-0.0.6/.pkgdir/libugpio/usr/lib/libugpio.so.1.0.0 ./OpenWRT-sdk/staging_dir/target-mipsel_24kc_musl/pkginfo/libugpio.provides ./OpenWRT-sdk/staging_dir/target-mipsel_24kc_musl/root-ramips/usr/lib/libugpio.so.1.0.0 ./OpenWRT-sdk/staging_dir/target-mipsel_24kc_musl/usr/include/ugpio/ugpio.h ./OpenWRT-sdk/staging_dir/target-mipsel_24kc_musl/usr/lib/pkgconfig/libugpio.pc ./OpenWRT-sdk/staging_dir/target-mipsel_24kc_musl/usr/lib/libugpio.a ./OpenWRT-sdk/staging_dir/target-mipsel_24kc_musl/usr/lib/libugpio.so.1.0.0 ./OpenWRT-sdk/staging_dir/target-mipsel_24kc_musl/packages/libugpio.list
We see the next files:
ugpio.h
,libugpio.a
,libugpio.so.1.0.0
(it's acronym oflibugpio.so
. You must rename it if will use).
Also you will need fileugpio-version.h
that you can find with ugpio.h in the same directory.- Last. Copy these files in your project and use CFLAGS
-L<path>
and-l<libname without prefix *lib* and *extension*>
for a GCC linker.
By the way: static and dynamic linkage:
- If you put .so file in your project dir, your application will use shared object from LIB-path (/usr/lib/libugpio.so that has incorrect symbols format but normal works).
- If you put static library .a file your application will use static library and .so file no need.
And the end. My compiled version of libugpio.so has normal format and all symbols you can see by next unitilies: nm, readelf, objdump. See example:
myname@debian-cli:~/OpenWRT-sdk/staging_dir/target-mipsel_24kc_musl/usr/lib$ readelf -s ./libugpio.so.1 Π’Π°Π±Π»ΠΈΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Β«.dynsymΒ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 71 ΡΠ»Π΅ΠΌΠ΅Π½Ρ: Π§ΠΈΡ: ΠΠ½Π°Ρ Π Π°Π·ΠΌ Π’ΠΈΠΏ Π‘Π²ΡΠ· Vis ΠΠ½Π΄Π΅ΠΊΡ ΠΈΠΌΠ΅Π½ΠΈ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000ccc 0 SECTION LOCAL DEFAULT 10 2: 00001331 104 FUNC GLOBAL DEFAULT 11 ugpio_direction_output 3: 00013000 0 NOTYPE GLOBAL DEFAULT 19 _fdata 4: 00001651 64 FUNC GLOBAL DEFAULT 11 gpio_set_activelow 5: 0001aff0 0 SECTION GLOBAL DEFAULT ABS _gp_disp 6: 000013c9 36 FUNC GLOBAL DEFAULT 11 ugpio_set_edge 7: 00001719 54 FUNC GLOBAL DEFAULT 11 gpio_free_array 8: 00001611 64 FUNC GLOBAL DEFAULT 11 gpio_get_activelow 9: 00001255 68 FUNC GLOBAL DEFAULT 11 ugpio_set_activelow 10: 00000e51 240 FUNC GLOBAL DEFAULT 11 ugpio_request 11: 000012a5 62 FUNC GLOBAL DEFAULT 11 ugpio_get_direction 12: 00000ccc 8 FUNC GLOBAL DEFAULT 10 _init 13: 000013a5 36 FUNC GLOBAL DEFAULT 11 ugpio_get_edge 14: 00000d30 0 NOTYPE GLOBAL DEFAULT 11 _ftext 15: 000016d9 64 FUNC GLOBAL DEFAULT 11 gpio_set_value 16: 00000f41 136 FUNC GLOBAL DEFAULT 11 ugpio_request_one 17: 000012e5 74 FUNC GLOBAL DEFAULT 11 ugpio_direction_input 18: 00001299 10 FUNC GLOBAL DEFAULT 11 ugpio_alterable_direction 19: 00001195 4 FUNC GLOBAL DEFAULT 11 ugpio_fd 20: 000130bc 0 NOTYPE GLOBAL DEFAULT 21 __bss_start 21: 00001691 72 FUNC GLOBAL DEFAULT 11 gpio_get_value 22: 00001f60 8 FUNC GLOBAL DEFAULT 13 _fini 23: 0000121d 56 FUNC GLOBAL DEFAULT 11 ugpio_get_activelow 24: 00001399 10 FUNC GLOBAL DEFAULT 11 ugpio_alterable_edge 25: 000011d9 68 FUNC GLOBAL DEFAULT 11 ugpio_set_value 26: 000130bc 0 NOTYPE GLOBAL DEFAULT 20 _edata 27: 000130e0 0 NOTYPE GLOBAL DEFAULT 21 _end 28: 00001119 124 FUNC GLOBAL DEFAULT 11 ugpio_close 29: 00001051 200 FUNC GLOBAL DEFAULT 11 ugpio_full_open 30: 00001895 100 FUNC GLOBAL DEFAULT 11 gpio_request_array 31: 00001199 64 FUNC GLOBAL DEFAULT 11 ugpio_get_value 32: 00000fc9 62 FUNC GLOBAL DEFAULT 11 ugpio_free 33: 000130bc 0 NOTYPE GLOBAL DEFAULT 21 _fbss 34: 00001f40 0 FUNC GLOBAL DEFAULT UND free 35: 00001f30 0 FUNC GLOBAL DEFAULT UND close 36: 00001a91 128 FUNC GLOBAL DEFAULT 11 gpio_fd_write 37: 00001f20 0 FUNC GLOBAL DEFAULT UND open 38: 00001f10 0 FUNC GLOBAL DEFAULT UND strlen 39: 00001bb5 120 FUNC GLOBAL DEFAULT 11 gpio_fd_set_edge 40: 00001951 124 FUNC GLOBAL DEFAULT 11 gpio_fd_open 41: 00001f00 0 FUNC GLOBAL DEFAULT UND __errno_location 42: 000018f9 88 FUNC GLOBAL DEFAULT 11 gpio_get_edge 43: 0000141d 124 FUNC GLOBAL DEFAULT 11 gpio_request 44: 00001751 42 FUNC GLOBAL DEFAULT 11 gpio_alterable_edge 45: 0000177d 92 FUNC GLOBAL DEFAULT 11 gpio_set_edge 46: 000017d9 188 FUNC GLOBAL DEFAULT 11 gpio_request_one 47: 00001589 52 FUNC GLOBAL DEFAULT 11 gpio_direction_input 48: 000015bd 84 FUNC GLOBAL DEFAULT 11 gpio_direction_output 49: 00001ef0 0 FUNC GLOBAL DEFAULT UND strncmp 50: 00001b11 164 FUNC GLOBAL DEFAULT 11 gpio_fd_get_edge 51: 00001ee0 0 FUNC GLOBAL DEFAULT UND read 52: 00001009 72 FUNC GLOBAL DEFAULT 11 ugpio_open 53: 00001541 70 FUNC GLOBAL DEFAULT 11 gpio_get_direction 54: 00001ed0 0 FUNC GLOBAL DEFAULT UND write 55: 00000000 0 FUNC WEAK DEFAULT UND __deregister_frame_info@GLIBC_2.0 (2) 56: 00001ec0 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail 57: 00001eb0 0 FUNC GLOBAL DEFAULT UND lseek 58: 00001ea0 0 FUNC GLOBAL DEFAULT UND malloc 59: 00001499 124 FUNC GLOBAL DEFAULT 11 gpio_free 60: 00000000 0 FUNC WEAK DEFAULT UND __cxa_finalize 61: 00001ce9 184 FUNC GLOBAL DEFAULT 11 gpio_write 62: 00001da1 144 FUNC GLOBAL DEFAULT 11 gpio_check 63: 00001515 42 FUNC GLOBAL DEFAULT 11 gpio_alterable_direction 64: 00000000 0 FUNC WEAK DEFAULT UND __register_frame_info@GLIBC_2.0 (2) 65: 000019cd 34 FUNC GLOBAL DEFAULT 11 gpio_fd_close 66: 00001c2d 188 FUNC GLOBAL DEFAULT 11 gpio_read 67: 00000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard 68: 000013f1 42 FUNC GLOBAL DEFAULT 11 gpio_is_requested 69: 00001e90 0 FUNC GLOBAL DEFAULT UND snprintf 70: 000019f1 160 FUNC GLOBAL DEFAULT 11 gpio_fd_read Π’Π°Π±Π»ΠΈΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Β«.symtabΒ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 137 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²: Π§ΠΈΡ: ΠΠ½Π°Ρ Π Π°Π·ΠΌ Π’ΠΈΠΏ Π‘Π²ΡΠ· Vis ΠΠ½Π΄Π΅ΠΊΡ ΠΈΠΌΠ΅Π½ΠΈ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000138 0 SECTION LOCAL DEFAULT 1 2: 00000150 0 SECTION LOCAL DEFAULT 2 3: 00000168 0 SECTION LOCAL DEFAULT 3 4: 00000268 0 SECTION LOCAL DEFAULT 4 5: 00000498 0 SECTION LOCAL DEFAULT 5 6: 00000908 0 SECTION LOCAL DEFAULT 6 7: 00000bec 0 SECTION LOCAL DEFAULT 7 8: 00000c7c 0 SECTION LOCAL DEFAULT 8 9: 00000c9c 0 SECTION LOCAL DEFAULT 9 10: 00000ccc 0 SECTION LOCAL DEFAULT 10 11: 00000d30 0 SECTION LOCAL DEFAULT 11 12: 00001e90 0 SECTION LOCAL DEFAULT 12 13: 00001f60 0 SECTION LOCAL DEFAULT 13 14: 00001fa0 0 SECTION LOCAL DEFAULT 14 15: 00002094 0 SECTION LOCAL DEFAULT 15 16: 00012fd0 0 SECTION LOCAL DEFAULT 16 17: 00012fd8 0 SECTION LOCAL DEFAULT 17 18: 00012fe0 0 SECTION LOCAL DEFAULT 18 19: 00013000 0 SECTION LOCAL DEFAULT 19 20: 000130b8 0 SECTION LOCAL DEFAULT 20 21: 000130c0 0 SECTION LOCAL DEFAULT 21 22: 00000000 0 SECTION LOCAL DEFAULT 22 23: 00000000 0 SECTION LOCAL DEFAULT 23 24: 00000000 0 SECTION LOCAL DEFAULT 24 25: 00000000 0 SECTION LOCAL DEFAULT 25 26: 00000000 0 SECTION LOCAL DEFAULT 26 27: 00000000 0 SECTION LOCAL DEFAULT 27 28: 00000000 0 SECTION LOCAL DEFAULT 28 29: 00000000 0 SECTION LOCAL DEFAULT 29 30: 00000000 0 SECTION LOCAL DEFAULT 30 31: 00000000 0 SECTION LOCAL DEFAULT 31 32: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c 33: 00012fd0 0 OBJECT LOCAL DEFAULT 16 __CTOR_LIST__ 34: 00012fd8 0 OBJECT LOCAL DEFAULT 17 __DTOR_LIST__ 35: 00002094 0 OBJECT LOCAL DEFAULT 15 36: 00000d30 0 FUNC LOCAL DEFAULT 11 __do_global_dtors_aux 37: 000130c0 1 OBJECT LOCAL DEFAULT 21 completed.4849 38: 000130c4 4 OBJECT LOCAL DEFAULT 21 dtor_idx.4851 39: 00000e10 0 FUNC LOCAL DEFAULT 11 frame_dummy 40: 000130c8 24 OBJECT LOCAL DEFAULT 21 object.4861 41: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c 42: 00012fd4 0 OBJECT LOCAL DEFAULT 16 __CTOR_END__ 43: 00002094 0 OBJECT LOCAL DEFAULT 15 __FRAME_END__ 44: 00001e30 0 FUNC LOCAL DEFAULT 11 __do_global_ctors_aux 45: 00000000 0 FILE LOCAL DEFAULT ABS ugpio.c 46: 0000104c 0 OBJECT LOCAL DEFAULT 11 __pool_ugpio_open_44 47: 00001050 0 FUNC LOCAL DEFAULT [MIPS16] 11 __pend_ugpio_open_44 48: 00001114 0 OBJECT LOCAL DEFAULT 11 __pool_ugpio_full_open_66 49: 00001118 0 FUNC LOCAL DEFAULT [MIPS16] 11 __pend_ugpio_full_open_66 50: 00000000 0 FILE LOCAL DEFAULT ABS gpio.c 51: 000017d4 0 OBJECT LOCAL DEFAULT 11 __pool_gpio_set_edge_49 52: 000017d8 0 FUNC LOCAL DEFAULT [MIPS16] 11 __pend_gpio_set_edge_49 53: 0000194c 0 OBJECT LOCAL DEFAULT 11 __pool_gpio_get_edge_84 54: 00001950 0 FUNC LOCAL DEFAULT [MIPS16] 11 __pend_gpio_get_edge_84 55: 00000000 0 FILE LOCAL DEFAULT ABS ugpio-internal.c 56: 00012fe0 32 OBJECT LOCAL DEFAULT 18 ugpio_triggers 57: 00001ce4 0 OBJECT LOCAL DEFAULT 11 __pool_gpio_read_69 58: 00001ce8 0 FUNC LOCAL DEFAULT [MIPS16] 11 __pend_gpio_read_69 59: 00001e2c 0 OBJECT LOCAL DEFAULT 11 __pool_gpio_check_86 60: 00001e30 0 FUNC LOCAL DEFAULT [MIPS16] 11 __pend_gpio_check_86 61: 00000000 0 FILE LOCAL DEFAULT ABS 62: 00001e90 0 FUNC LOCAL DEFAULT 12 _MIPS_STUBS_ 63: 00000168 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC 64: 0001aff0 0 NOTYPE LOCAL DEFAULT 19 _gp 65: 00012fdc 0 OBJECT LOCAL DEFAULT 17 __DTOR_END__ 66: 000130b8 0 OBJECT LOCAL DEFAULT 20 __dso_handle 67: 00013000 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ 68: 00001331 104 FUNC GLOBAL DEFAULT 11 ugpio_direction_output 69: 00013000 0 NOTYPE GLOBAL DEFAULT 19 _fdata 70: 00001651 64 FUNC GLOBAL DEFAULT 11 gpio_set_activelow 71: 0001aff0 0 SECTION GLOBAL DEFAULT ABS _gp_disp 72: 000013c9 36 FUNC GLOBAL DEFAULT 11 ugpio_set_edge 73: 00001719 54 FUNC GLOBAL DEFAULT 11 gpio_free_array 74: 000019f1 160 FUNC GLOBAL DEFAULT 11 gpio_fd_read 75: 00001e90 0 FUNC GLOBAL DEFAULT UND snprintf 76: 000013f1 42 FUNC GLOBAL DEFAULT 11 gpio_is_requested 77: 00000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard 78: 00001c2d 188 FUNC GLOBAL DEFAULT 11 gpio_read 79: 000019cd 34 FUNC GLOBAL DEFAULT 11 gpio_fd_close 80: 00000000 0 FUNC WEAK DEFAULT UND __register_frame_info@@GL 81: 00001515 42 FUNC GLOBAL DEFAULT 11 gpio_alterable_direction 82: 00001da1 144 FUNC GLOBAL DEFAULT 11 gpio_check 83: 00001ce9 184 FUNC GLOBAL DEFAULT 11 gpio_write 84: 00000000 0 FUNC WEAK DEFAULT UND __cxa_finalize 85: 00001499 124 FUNC GLOBAL DEFAULT 11 gpio_free 86: 00001ea0 0 FUNC GLOBAL DEFAULT UND malloc 87: 00001611 64 FUNC GLOBAL DEFAULT 11 gpio_get_activelow 88: 00001255 68 FUNC GLOBAL DEFAULT 11 ugpio_set_activelow 89: 00000e51 240 FUNC GLOBAL DEFAULT 11 ugpio_request 90: 00001eb0 0 FUNC GLOBAL DEFAULT UND lseek 91: 000012a5 62 FUNC GLOBAL DEFAULT 11 ugpio_get_direction 92: 00001ec0 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail 93: 00000ccc 8 FUNC GLOBAL DEFAULT 10 _init 94: 000013a5 36 FUNC GLOBAL DEFAULT 11 ugpio_get_edge 95: 00000000 0 FUNC WEAK DEFAULT UND __deregister_frame_info@@ 96: 00001ed0 0 FUNC GLOBAL DEFAULT UND write 97: 00001541 70 FUNC GLOBAL DEFAULT 11 gpio_get_direction 98: 00000d30 0 NOTYPE GLOBAL DEFAULT 11 _ftext 99: 00001009 72 FUNC GLOBAL DEFAULT 11 ugpio_open 100: 00001ee0 0 FUNC GLOBAL DEFAULT UND read 101: 00001b11 164 FUNC GLOBAL DEFAULT 11 gpio_fd_get_edge 102: 00001ef0 0 FUNC GLOBAL DEFAULT UND strncmp 103: 000015bd 84 FUNC GLOBAL DEFAULT 11 gpio_direction_output 104: 000016d9 64 FUNC GLOBAL DEFAULT 11 gpio_set_value 105: 00000f41 136 FUNC GLOBAL DEFAULT 11 ugpio_request_one 106: 000012e5 74 FUNC GLOBAL DEFAULT 11 ugpio_direction_input 107: 00001299 10 FUNC GLOBAL DEFAULT 11 ugpio_alterable_direction 108: 00001589 52 FUNC GLOBAL DEFAULT 11 gpio_direction_input 109: 00001195 4 FUNC GLOBAL DEFAULT 11 ugpio_fd 110: 000130bc 0 NOTYPE GLOBAL DEFAULT 21 __bss_start 111: 00001691 72 FUNC GLOBAL DEFAULT 11 gpio_get_value 112: 00001f60 8 FUNC GLOBAL DEFAULT 13 _fini 113: 0000121d 56 FUNC GLOBAL DEFAULT 11 ugpio_get_activelow 114: 00001399 10 FUNC GLOBAL DEFAULT 11 ugpio_alterable_edge 115: 000017d9 188 FUNC GLOBAL DEFAULT 11 gpio_request_one 116: 0000177d 92 FUNC GLOBAL DEFAULT 11 gpio_set_edge 117: 000011d9 68 FUNC GLOBAL DEFAULT 11 ugpio_set_value 118: 00001751 42 FUNC GLOBAL DEFAULT 11 gpio_alterable_edge 119: 000130bc 0 NOTYPE GLOBAL DEFAULT 20 _edata 120: 000130e0 0 NOTYPE GLOBAL DEFAULT 21 _end 121: 0000141d 124 FUNC GLOBAL DEFAULT 11 gpio_request 122: 000018f9 88 FUNC GLOBAL DEFAULT 11 gpio_get_edge 123: 00001119 124 FUNC GLOBAL DEFAULT 11 ugpio_close 124: 00001f00 0 FUNC GLOBAL DEFAULT UND __errno_location 125: 00001951 124 FUNC GLOBAL DEFAULT 11 gpio_fd_open 126: 00001051 200 FUNC GLOBAL DEFAULT 11 ugpio_full_open 127: 00001bb5 120 FUNC GLOBAL DEFAULT 11 gpio_fd_set_edge 128: 00001f10 0 FUNC GLOBAL DEFAULT UND strlen 129: 00001895 100 FUNC GLOBAL DEFAULT 11 gpio_request_array 130: 00001f20 0 FUNC GLOBAL DEFAULT UND open 131: 00001199 64 FUNC GLOBAL DEFAULT 11 ugpio_get_value 132: 00000fc9 62 FUNC GLOBAL DEFAULT 11 ugpio_free 133: 00001a91 128 FUNC GLOBAL DEFAULT 11 gpio_fd_write 134: 000130bc 0 NOTYPE GLOBAL DEFAULT 21 _fbss 135: 00001f30 0 FUNC GLOBAL DEFAULT UND close 136: 00001f40 0 FUNC GLOBAL DEFAULT UND free
-
-
@Modest-Polykarpovich why would you not just follow the onion documented cross compilation process like the rest of us?
-
@crispyoz said in [Resolved] How can I use libugpio.so library?:
@Modest-Polykarpovich why would you not just follow the onion documented cross compilation process like the rest of us?
Because it's need the Docker that can be install in only Windows 10 Pro, but my Windows is "Home" and I can't use it.
I think my path with pre-compiled Open WRT SDK is the simplest in this situation.
-
@Modest-Polykarpovich You don't need docker, as Windows 10 Home doesn't support Hyper-V but you can use other virtualisation products. VirtualBox will run on Windows 10 Home into which you install Linux, I use Ubuntu 18.