• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 749
  • Last Modified:

digiboard configuration

Hi experts.
I am trying to install a acceleport xem host adapter with several 8em modules on my RH 9 box.
I have installed the card in a PCI slot and kudzu recognized the card on startup.
Now, I have tried to install the driver that i found at digi.com but it does not seem to have done anything.
I am not sure how to go about this installation. Please help.
  • 2
  • 2
1 Solution
From the little I know about digiboards, you should now be able to use all the ports as /dev/ttyS0, /dev/ttsS1, etc... continuing on until all your ports are allocated. I apologize if this is way off, I'm not exactly familiar with your specific piece of hardware.

You can make sure the kernel module driver is loaded by viewing the output of 'lsmod'.

I hope this helps, in some small way.
Hi :-)

I have installed a couple of Digi Neo cards and they have the same install procedure.
The driver you download from digi.com comes as a source RPM. For this, you will need a compiler (GCC) on the host in which you are installing.

For this example I used the driver for "AccelePort 8em-PCI RJ45" and for "Fedora Core 2"
You need to download a driver for your card and os, is comes with a name similar to:

Download the file to somewhere on your linux server. Then re-compile (rebuild) the source RPM:
rpmbuild --rebuild -vh 40002347_a.src.rpm

When the rebuild command is done, it will output a filename, most probably

Install this RPM
rpm -Uvh /usr/src/redhat/RPMS/i386/dgap-1.1-1.i386.rpm


Your digi ports should be accessible as:
(x= card number)
(yy = port number)

Everything I wrote is also in the release notes (which btw, i used to install my driver with).

Digi provides excellent support for Linux, they always update their drivers to comply with new kernel versions and provide the source(!). I used the source once to fill in a gap they had - I wanted to install a new custom kernel I have downloaded and the driver was not able to compile with. I fixed the source myself and recompiled it successfully.

Enjoy your digi...
kephillipsAuthor Commented:
ok. will give that a try.
do you know by the way, if i can use 8 pin (ethernet rj45) connectors on my portserver?
I have one I would like to install and use, but am not sure the 8 pin connectors work with the 10 pin slot....
e-tsik, will give your instructions a try....
kephillipsAuthor Commented:
here is what i tried and the errror it gives me....
Also I tried using -vh like you put but it didn't recognize  that option so I used -vv instead...

[root@back root]# rpmbuild --rebuild -vv 40002347_a.src.rpm
Installing 40002347_a.src.rpm
D: Expected size:       622279 = lead(96)+sigs(180)+pad(4)+data(621999)
D:   Actual size:       622279
D: ========== Directories not explictly included in package:
D:          0 /usr/src/redhat/SOURCES/
D:          1 /usr/src/redhat/SPECS/
D: ==========
D: fini      100644  1 (   0,   0)      2770 /usr/src/redhat/SPECS/dgap-1.1.spec;4163e219
D: fini      100644  1 (   0,   0)    618636 /usr/src/redhat/SOURCES/dgap-1.1.tgz;4163e219
GZDIO:      76 reads,   621780 total bytes in 0.000 secs
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.86870
+ umask 022
+ cd /usr/src/redhat/BUILD
+ export LANG
+ cd /usr/src/redhat/BUILD
+ rm -rf dgap-1.1
+ /usr/bin/gzip -dc /usr/src/redhat/SOURCES/dgap-1.1.tgz
+ tar -xvvf -
drwxr-xr-x root/root         0 2004-04-14 22:39:32 dgap-1.1/
-rwxr-xr-x root/root    159805 2004-04-14 22:39:31 dgap-1.1/configure
-rw-r--r-- root/root     17048 2004-04-14 22:39:31 dgap-1.1/configure.in
-rw-r--r-- root/root      3634 2004-04-14 22:39:31 dgap-1.1/Makefile.in
-rw-r--r-- root/root      1660 2004-04-14 22:39:31 dgap-1.1/Makefile.inc
-rw-r--r-- root/root      7857 2004-04-14 22:39:31 dgap-1.1/relnotes.txt
-rw-r--r-- root/root     17976 2004-04-14 22:39:31 dgap-1.1/COPYING
drwxr-xr-x root/root         0 2004-04-14 22:39:31 dgap-1.1/include/
-rw-r--r-- root/root       327 2004-04-14 22:39:31 dgap-1.1/include/config.h.in
drwxr-xr-x root/root         0 2004-04-14 22:39:31 dgap-1.1/include/dxb/
-rw-r--r-- root/root      2769 2004-04-14 22:39:31 dgap-1.1/include/dxb/dxbtypes.h
-rw-r--r-- root/root     16350 2004-04-14 22:39:31 dgap-1.1/include/dxb/rascon.h
drwxr-xr-x root/root         0 2004-04-14 22:39:31 dgap-1.1/include/dxb/include/
-rw-r--r-- root/root      8874 2004-04-14 22:39:31 dgap-1.1/include/dxb/include/mgmtioc1.h
-rw-r--r-- root/root     60025 2004-04-14 22:39:31 dgap-1.1/include/dxb/include/mgmthlc.h
-rw-r--r-- root/root      8414 2004-04-14 22:39:31 dgap-1.1/include/dxb/include/mgmttigger.h
-rw-r--r-- root/root      1103 2004-04-14 22:39:31 dgap-1.1/include/dxb/include/mgmtinternal.h
-rw-r--r-- root/root     11274 2004-04-14 22:39:31 dgap-1.1/include/dxb/include/mgmtcmds.h
-rw-r--r-- root/root      5407 2004-04-14 22:39:31 dgap-1.1/include/dxb/include/mgmtdflt.h
-rw-r--r-- root/root     10577 2004-04-14 22:39:31 dgap-1.1/include/dxb/include/pci_ids.h
-rw-r--r-- root/root     37445 2004-04-14 22:39:31 dgap-1.1/include/dxb/include/mgmtcc.h
drwxr-xr-x root/root         0 2004-04-14 22:39:31 dgap-1.1/driver/
-rw-r--r-- root/root      2535 2004-04-14 22:39:31 dgap-1.1/driver/Makefile24
-rw-r--r-- root/root      1202 2004-04-14 22:39:31 dgap-1.1/driver/Makefile26
-rw-r--r-- root/root     35735 2004-04-14 22:39:31 dgap-1.1/driver/dgap_driver.c
-rw-r--r-- root/root     29588 2004-04-14 22:39:31 dgap-1.1/driver/dgap_parse.c
-rw-r--r-- root/root      4917 2004-04-14 22:39:31 dgap-1.1/driver/dgap_trace.c
-rw-r--r-- root/root     18428 2004-04-14 22:39:31 dgap-1.1/driver/dgap_proc.c
-rw-r--r-- root/root     94970 2004-04-14 22:39:31 dgap-1.1/driver/dgap_tty.c
-rw-r--r-- root/root     16662 2004-04-14 22:39:31 dgap-1.1/driver/dgap_mgmt.c
drwxr-xr-x root/root         0 2004-04-14 22:39:31 dgap-1.1/driver/include/
-rw-r--r-- root/root      6371 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_conf.h
-rw-r--r-- root/root      1121 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_proc.h
-rw-r--r-- root/root      1224 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_types.h
-rw-r--r-- root/root     26627 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_driver.h
-rw-r--r-- root/root      1329 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_parse.h
-rw-r--r-- root/root      1207 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_trace.h
-rw-r--r-- root/root      1195 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_mgmt.h
-rw-r--r-- root/root     13936 2004-04-14 22:39:31 dgap-1.1/driver/include/digi.h
-rw-r--r-- root/root     12535 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_fep5.h
-rw-r--r-- root/root      2972 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_pci.h
-rw-r--r-- root/root      1179 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_tty.h
-rw-r--r-- root/root      2028 2004-04-14 22:39:31 dgap-1.1/driver/include/dgap_downld.h
drwxr-xr-x root/root         0 2004-04-14 22:39:31 dgap-1.1/ditty/
-rw-r--r-- root/root      8239 2004-04-14 22:39:31 dgap-1.1/ditty/ditty.1
-rw-r--r-- root/root     27781 2004-04-14 22:39:31 dgap-1.1/ditty/ditty.c
-rw-r--r-- root/root       669 2004-04-14 22:39:31 dgap-1.1/ditty/Makefile.in
drwxr-xr-x root/root         0 2004-04-14 22:39:32 dgap-1.1/mipsfepbin/
-rwxr-xr-x root/root     36352 2004-04-14 22:39:31 dgap-1.1/mipsfepbin/pcifep.bin
-rwxr-xr-x root/root     29696 2004-04-14 22:39:31 dgap-1.1/mipsfepbin/pcibios.bin
-rwxr-xr-x root/root     28928 2004-04-14 22:39:31 dgap-1.1/mipsfepbin/cxpbios.bin
-rwxr-xr-x root/root     36352 2004-04-14 22:39:31 dgap-1.1/mipsfepbin/cxpfep.bin
-rwxr-xr-x root/root     41728 2004-04-14 22:39:31 dgap-1.1/mipsfepbin/sxbios.bin
-rwxr-xr-x root/root     30976 2004-04-14 22:39:32 dgap-1.1/mipsfepbin/sxfep.bin
-rwxr-xr-x root/root     41728 2004-04-14 22:39:32 dgap-1.1/mipsfepbin/xrbios.bin
-rwxr-xr-x root/root     30976 2004-04-14 22:39:32 dgap-1.1/mipsfepbin/xrfep.bin
-rwxr-xr-x root/root     51888 2004-04-14 22:39:32 dgap-1.1/mipsfepbin/fxcon.bin
drwxr-xr-x root/root         0 2004-04-14 22:39:32 dgap-1.1/cxfepbin/
-rwxr-xr-x root/root     20000 2004-04-14 22:39:32 dgap-1.1/cxfepbin/cxcon.bin
-rwxr-xr-x root/root     20176 2004-04-14 22:39:32 dgap-1.1/cxfepbin/ibmcxcon.bin
-rwxr-xr-x root/root     20768 2004-04-14 22:39:32 dgap-1.1/cxfepbin/ibmencon.bin
drwxr-xr-x root/root         0 2004-04-14 22:39:32 dgap-1.1/config/
-rw-r--r-- root/root      1451 2004-04-14 22:39:32 dgap-1.1/config/Makefile.in
-rw-r--r-- root/root      4682 2004-04-14 22:39:32 dgap-1.1/config/dgap_mknod.in
-rw-r--r-- root/root      3154 2004-04-14 22:39:32 dgap-1.1/config/dgap.in
-rwxr-xr-x root/root      1681 2004-04-14 22:39:32 dgap-1.1/config/mpi
-rwxr-xr-x root/root     68330 2004-04-14 22:39:32 dgap-1.1/config/dgap_config
-rw-r--r-- root/root     18429 2004-04-14 22:39:32 dgap-1.1/config/downld.c
-rw-r--r-- root/root    204959 2004-04-14 22:39:32 dgap-1.1/config/dialog.tar.gz
drwxr-xr-x root/root         0 2004-04-14 22:39:32 dgap-1.1/dinc/
-rw-r--r-- root/root      3206 2004-04-14 22:39:32 dgap-1.1/dinc/Makefile
-rw-r--r-- root/root     31870 2004-04-14 22:39:32 dgap-1.1/dinc/dinc.c
-rw-r--r-- root/root      8831 2004-04-14 22:39:32 dgap-1.1/dinc/dinc_hw.c
-rw-r--r-- root/root      2125 2004-04-14 22:39:32 dgap-1.1/dinc/dinc.h
-rw-r--r-- root/root      6633 2004-04-14 22:39:32 dgap-1.1/dinc/dinc.1
drwxr-xr-x root/root         0 2004-04-14 22:39:32 dgap-1.1/dpa/
-rwxr-xr-x root/root      1406 2004-04-14 22:39:32 dgap-1.1/dpa/dgaplinux.mk
-rwxr-xr-x root/root      2145 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_info1
-rwxr-xr-x root/root       603 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_info2
-rwxr-xr-x root/root       324 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_info3
-rwxr-xr-x root/root      4754 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_info4
-rwxr-xr-x root/root      2657 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_info5
-rwxr-xr-x root/root       594 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_info6
-rwxr-xr-x root/root      7120 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_info7
-rwxr-xr-x root/root       617 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_info8
-rwxr-xr-x root/root      3625 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_info9
-rwxr-xr-x root/root    290139 2004-04-14 22:39:32 dgap-1.1/dpa/dpa.c
-rwxr-xr-x root/root     14196 2004-04-14 22:39:32 dgap-1.1/dpa/dpa.h
-rwxr-xr-x root/root      1981 2004-04-14 22:39:32 dgap-1.1/dpa/mid.h
-rwxr-xr-x root/root     10718 2004-04-14 22:39:32 dgap-1.1/dpa/dpa_fep.h
-rwxr-xr-x root/root      2722 2004-04-14 22:39:32 dgap-1.1/dpa/fepflags.h
-rwxr-xr-x root/root      3897 2004-04-14 22:39:32 dgap-1.1/dpa/attribs.c
drwxr-xr-x root/root         0 2004-04-14 22:39:32 dgap-1.1/scripts/
-rwxr-xr-x root/root       785 2004-04-14 22:39:32 dgap-1.1/scripts/postinstall
-rwxr-xr-x root/root       978 2004-04-14 22:39:32 dgap-1.1/scripts/preuninstall
+ '[' 0 -ne 0 ']'
+ cd dgap-1.1
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chown -Rhf root .
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chgrp -Rhf root .
+ /bin/chmod -Rf a+rX,g-w,o-w .
+ '[' /var/tmp/dgap-buildroot = / ']'
+ CFLAGS=-O2 -g -pipe -march=i386 -mcpu=i686
+ export CFLAGS
+ CXXFLAGS=-O2 -g -pipe -march=i386 -mcpu=i686
+ export CXXFLAGS
+ FFLAGS=-O2 -g -pipe -march=i386 -mcpu=i686
+ export FFLAGS
++ find . -name config.guess
++ find . -name config.sub
+ ./configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=i386-redhat-linux-gnu --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info
checking for awk... /bin/awk
checking for arch... /bin/arch
checking for cat... /bin/cat
checking for chkconfig... /sbin/chkconfig
checking for chmod... /bin/chmod
checking for chown... /bin/chown
checking for cp... /bin/cp
checking for depmod... /sbin/depmod
checking for dialog... /usr/bin/dialog
checking for fuser... /sbin/fuser
checking for grep... /bin/grep
checking for init... /sbin/init
checking for insmod... /sbin/insmod
checking for kill... /bin/kill
checking for ln... /bin/ln
checking for ls... /bin/ls
checking for lsmod... /sbin/lsmod
checking for mkdir... /bin/mkdir
checking for mknod... /bin/mknod
checking for more... /bin/more
checking for mv... /bin/mv
checking for ps... /bin/ps
checking for rm... /bin/rm
checking for rmdir... /bin/rmdir
checking for rmmod... /sbin/rmmod
checking for sed... /bin/sed
checking for sh... /bin/sh
checking for sleep... /bin/sleep
checking for stty... /bin/stty
checking for tar... /bin/tar
checking for touch... /bin/touch
checking for true... /bin/true
checking for uname... /bin/uname
checking for platform type... i386
checking for gcc... gcc
checking for gcc version... >= 3.2 (3.2.2)
checking for i686-pc-linux-gnu-gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for current kernel version...  2.4.20-8 -> 2.4.20-8 -> 2.4.20
checking for kernel headers...  "/lib/modules/2.4.20-8/build"
checking extra version of kernel...  -8custom
checking if running kernel was compiled for SMP...  No
checking what type of build we will do... non-KBUILD.
checking for modules directory...  "/lib/modules/2.4.20-8"
configure: checking for tgetent...
configure: checking for libncurses...
checking if Distro specified... None
configure: creating ./config.status
config.status: creating Makefile
config.status: creating driver/Makefile
config.status: creating config/Makefile
config.status: creating config/dgap
config.status: creating config/dgap_mknod
config.status: creating ditty/Makefile
config.status: creating include/config.h
config.status: executing default commands
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.66977
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd dgap-1.1
+ export LANG
+ make all
(cd driver; make all)
make[1]: Entering directory `/usr/src/redhat/BUILD/dgap-1.1/driver'
gcc -O2 -march=i486 -falign-loops=2 -falign-jumps=2 -falign-functions=2 -fno-strict-aliasing -DCPU=586 -O2 -D__KERNEL__ -DMODULE  -DLINUX -DDG_NAME=\"dgap-"1.1-1"\" -DDG_PART=\"40002347_A\" -I/lib/modules/2.4.20-8/build/include -I./include -I../include -Wall -Wstrict-prototypes -pipe -fno-strength-reduce -DSBINDIR=\"/usr/sbin\" -DDGAP_TRACER -DMODVERSIONS -include /lib/modules/2.4.20-8/build/include/linux/modversions.h -DNO_DISTRO -c dgap_driver.c -o dgap_driver.o
In file included from /lib/modules/2.4.20-8/build/include/linux/spinlock.h:56,
                 from /lib/modules/2.4.20-8/build/include/linux/module.h:11,
                 from include/dgap_driver.h:33,
                 from dgap_driver.c:37:
/lib/modules/2.4.20-8/build/include/asm/spinlock.h:9: invalid suffix on integer constant
/lib/modules/2.4.20-8/build/include/asm/spinlock.h:9: parse error before numeric constant
/lib/modules/2.4.20-8/build/include/asm/spinlock.h:10: `printk_R_ver_str' declared as function returning a function
/lib/modules/2.4.20-8/build/include/asm/spinlock.h:10: warning: function declaration isn't a prototype
In file included from /lib/modules/2.4.20-8/build/include/linux/prefetch.h:13,
                 from /lib/modules/2.4.20-8/build/include/linux/list.h:6,
                 from /lib/modules/2.4.20-8/build/include/linux/module.h:12,
                 from include/dgap_driver.h:33,
                 from dgap_driver.c:37:
/lib/modules/2.4.20-8/build/include/asm/processor.h:60: warning: parameter names (without types) in function declaration
/lib/modules/2.4.20-8/build/include/asm/processor.h:60: field `loops_per_jiffy_R_ver_str' declared as a function
/lib/modules/2.4.20-8/build/include/asm/processor.h:82: invalid suffix on integer constant
/lib/modules/2.4.20-8/build/include/asm/processor.h:82: parse error before numeric constant
/lib/modules/2.4.20-8/build/include/asm/processor.h:82: warning: function declaration isn't a prototype
In file included from /lib/modules/2.4.20-8/build/include/linux/prefetch.h:13,
                 from /lib/modules/2.4.20-8/build/include/linux/list.h:6,
                 from /lib/modules/2.4.20-8/build/include/linux/module.h:12,
                 from include/dgap_driver.h:33,
                 from dgap_driver.c:37:
/lib/modules/2.4.20-8/build/include/asm/processor.h:267:1: warning: "EISA_bus" redefined
In file included from /lib/modules/2.4.20-8/build/include/linux/modversions.h:132,
                 from <command line>:1:
/lib/modules/2.4.20-8/build/include/linux/modules/i386_ksyms.ver:92:1: warning: this is the location of the previous definition
/lib/modules/2.4.20-8/build/include/asm/processor.h:269: warning: parameter names (without types) in function declaration
In file included from include/dgap_driver.h:33,
                 from dgap_driver.c:37:
/lib/modules/2.4.20-8/build/include/linux/module.h:183: invalid suffix on integer constant
/lib/modules/2.4.20-8/build/include/linux/module.h:183: parse error before numeric constant
/lib/modules/2.4.20-8/build/include/linux/module.h:183: `inter_module_register_R_ver_str' declared as function returning a function
/lib/modules/2.4.20-8/build/include/linux/module.h:183: warning: function declaration isn't a prototype
/lib/modules/2.4.20-8/build/include/linux/module.h:184: invalid suffix on integer constant
/lib/modules/2.4.20-8/build/include/linux/module.h:184: parse error before numeric constant
/lib/modules/2.4.20-8/build/include/linux/module.h:184: `inter_module_unregister_R_ver_str' declared as function returning a function
/lib/modules/2.4.20-8/build/include/linux/module.h:184: warning: function declaration isn't a prototype
/lib/modules/2.4.20-8/build/include/linux/module.h:185: `inter_module_get_R_ver_str' declared as function returning a function
/lib/modules/2.4.20-8/build/include/linux/module.h:185: warning: parameter names (without types) in function declaration
/lib/modules/2.4.20-8/build/include/linux/module.h:186: `inter_module_get_request_R_ver_str' declared as function returning a function
/lib/modules/2.4.20-8/build/include/linux/module.h:186: warning: parameter names (without types) in function declaration
/lib/modules/2.4.20-8/build/include/linux/module.h:187: invalid suffix on integer constant
/lib/modules/2.4.20-8/build/include/linux/module.h:187: parse error before numeric constant
/lib/modules/2.4.20-8/build/include/linux/module.h:187: `inter_module_put_R_ver_str' declared as function returning a function
/lib/modules/2.4.20-8/build/include/linux/module.h:187: warning: function declaration isn't a prototype
/lib/modules/2.4.20-8/build/include/linux/module.h:196: `try_inc_mod_count_R_ver_str' declared as function returning a function
/lib/modules/2.4.20-8/build/include/linux/module.h:196: warning: parameter names (without types) in function declaration
make[1]: *** [dgap_driver.o] Error 1
make[1]: Leaving directory `/usr/src/redhat/BUILD/dgap-1.1/driver'
make: *** [build] Error 2
error: Bad exit status from /var/tmp/rpm-tmp.66977 (%build)

RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.66977 (%build)
/lib/modules/2.4.20-8/build/include/linux/module.h:196: `try_inc_mod_count_R_ver_str' declared as function returning a function

This usually happens when you try to compile a driver that has compatiability problems with the kernel you are trying to work with.

You could try 3 things:
1. Download a version for an older linux version and see if it compiles.
2. Upgrade your kernel (at least to 2.4.20-30). If this is a redhat 9 install, then your kernel is really old and you need to update it for security reasons anyway. This may solve your compatiability problems.
3. Copy what you have in /usr/include/linux to /lib/modules/`uname -r`/include/linux

(uname -r) is your kernel version

Hope it helps!


Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now