Compiling
在 Debian Buster (+bpo) 上建構 ksmbd
我正在嘗試建構 ksmbd 核心模組。我嘗試了標籤版本:
$ wget https://github.com/namjaejeon/ksmbd/archive/refs/tags/3.2.1.tar.gz $ tar xvfz 3.2.1.tar.gz $ cd ksmbd-3.2.1 $ make [...] CC [M] /tmp/ksmbd-3.2.1/transport_tcp.o /tmp/ksmbd-3.2.1/transport_tcp.c: In function ‘create_socket’: /tmp/ksmbd-3.2.1/transport_tcp.c:484:10: error: incompatible type for argument 4 of ‘sock_setsockopt’ (char __user *)iface->name, ^~~~~~~~~~~~~~~~~~~~~~~~~~
以及來自 git/master 的版本:
$ git clone git@github.com:namjaejeon/ksmbd.git $ cd ksmbd $ make make -C /lib/modules/5.10.0-0.bpo.7-amd64/build M=/tmp/ksmbd modules make[1]: Entering directory '/usr/src/linux-headers-5.10.0-0.bpo.7-amd64' make[3]: *** No rule to make target '/tmp/ksmbd/ksmbd_spnego_negtokeninit.asn1.c', needed by '/tmp/ksmbd/ksmbd_spnego_negtokeninit.asn1.o'. Stop. make[2]: *** [/usr/src/linux-headers-5.10.0-0.bpo.7-common/Makefile:1845: /tmp/ksmbd] Error 2 make[1]: *** [/usr/src/linux-headers-5.10.0-0.bpo.7-common/Makefile:185: __sub-make] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-5.10.0-0.bpo.7-amd64' make: *** [Makefile:47: all] Error 2
生成這些 *.asn1.c 文件的訣竅是什麼?
供參考:
$ cat Makefile [...] $(obj)/asn1.o: $(obj)/ksmbd_spnego_negtokeninit.asn1.h $(obj)/ksmbd_spnego_negtokentarg.asn1.h $(obj)/ksmbd_spnego_negtokeninit.asn1.o: $(obj)/ksmbd_spnego_negtokeninit.asn1.c $(obj)/ksmbd_spnego_negtokeninit.asn1.h $(obj)/ksmbd_spnego_negtokentarg.asn1.o: $(obj)/ksmbd_spnego_negtokentarg.asn1.c $(obj)/ksmbd_spnego_negtokentarg.asn1.h
在 Fedora 和 RHEL 上,
ksmbd
外部模組建構是有效的,因為kernel-devel
軟體包提供了所有相關工具,特別是asn1_compiler
.Debian 中沒有等效的軟體包,因此建構的唯一方法
ksmbd
是使用完整的核心原始碼,簡單的選擇是在核心樹中建構它:sudo apt install linux-source-5.10 cd $(mktemp -d) tar xf /usr/src/linux-source-5.10.tar.xz cd linux-source-5.10/fs git clone https://github.com/namjaejeon/ksmbd
fs/Kconfig
對和進行必要的更改fs/Makefile
,然後cd .. make allmodconfig make fs/ksmbd/ksmbd.ko