2021-05-12 14:32:11
ubuntu20.04 編譯安裝ckermit
ubuntu20.04編譯安裝ckermit
我呢之前一直使用的是ubuntu18.04,最近在安裝了某個軟體之後,再加上自己的操作不當最終導致ubuntu系統卡死無法進入桌面環境,早就想更新20.04的我,終於迎來了換最新版ubuntu的理由
常規安裝ckermit過程(通過apt下載方式)
請參考「Linux安裝kermit」這篇文章。本文主要介紹通過原始碼安裝方式。
原始碼方式安裝ckermit
一、原始碼下載
The Kermit Project | Columbia University 注:通過哥倫比亞大學下載常常會因為網路原因導致下載速度過慢,甚至無法下載
這裡提供已經下載好的最新版本原始碼包:
連結: C-Kermit 9.0 source
提取碼: 3ssb
二、編譯C-kermit Source
解壓原始碼壓縮包
unzip x.zip
ls
ckc302.txt ckcftp.c ckcnet.c ckcssl.h ckcxla.h ckuath.h ckufio.c ckusig.h ckuus6.c ckuver.h ckvioc.c ckvrms.h COPYING.TXT
ckcasc.h ckcker.h ckcnet.h ckcsym.h ck_des.c ckucmd.c ckuker.nr ckutio.c ckuus7.c ckuxla.c ckvioc.h ckvrtl.c makefile
ckcdeb.h ckclib.c ckcpro.c ckctel.c ck_ssl.c ckucmd.h ckupty.c ckuus2.c ckuusr.c ckuxla.h ckvker.com ckvrtl.h x.zip
ckcfn2.c ckclib.h ckcpro.w ckctel.h ck_ssl.h ckucns.c ckupty.h ckuus3.c ckuusr.h ckvcon.c ckvker.mms ckvtio.c
ckcfn3.c ckcmai.c ck_crp.c ckcuni.c ckuat2.h ckucon.c ckuscr.c ckuus4.c ckuusx.c ckvcvt.c ckvold.c ckvvms.h
ckcfns.c ckcmdb.c ckcsig.h ckcuni.h ckuath.c ckudia.c ckusig.c ckuus5.c ckuusy.c ckvfio.c ckvold.com ckwart.c
編譯原始碼
make linux
出現錯誤
In file included from ckucmd.c:41:
ckucmd.c: In function ‘cmdconchk’:
ckucmd.c:7385:48: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_cnt’
7385 | debug(F101,"cmdconchk stdin->_cnt","",stdin->_cnt);
| ^~
ckcdeb.h:5129:51: note: in definition of macro ‘debug’
5129 | ((void)(deblog?dodebug(a,b,(char *)(c),(CK_OFF_T)(d)):0))
| ^
ckucmd.c:7386:14: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_cnt’
7386 | x = stdin->_cnt;
| ^~
開啟報錯檔案ckucmd.c,定位到報錯行
7371 /* Here we must look inside the stdin buffer - highly platform dependent */
7372
7373 #ifdef _IO_file_flags /* Linux */
7374 x = (int) ((stdin->_IO_read_end) - (stdin->_IO_read_ptr));
7375 debug(F101,"cmdconchk _IO_file_flags","",x);
7376 #else /* _IO_file_flags */
7377 #ifdef USE_FILE_CNT /* Traditional */
7378 #ifdef VMS
7379 debug(F101,"cmdconchk (*stdin)->_cnt","",(*stdin)->_cnt);
7380 x = (*stdin)->_cnt;
7381 #else
7382 #ifdef NOARROWKEYS
7383 debug(F101,"cmdconchk NOARROWKEYS x","",0);
7384 #else
7385 debug(F101,"cmdconchk stdin->_cnt","",stdin->_cnt);
7386 x = stdin->_cnt;
7387 #endif /* NOARROWKEYS */
7388 #endif /* VMS */
7389 if (x == 0) x = conchk();
7390 if (x < 0) x = 0;
7391 #else /* USE_FILE_CNT */
7392 #ifdef USE_FILE__CNT /* HP-UX */
7393 debug(F101,"cmdconchk stdin->__cnt","",stdin->__cnt);
7394 x = stdin->__cnt;
7395 if (x == 0) x = conchk();
7396 if (x < 0) x = 0;
7397 #else /* USE_FILE_CNT */
7398 #ifdef USE_FILE_R /* FreeBSD, OpenBSD, etc */
7399 debug(F101,"cmdconchk stdin->_r","",stdin->_r);
7400 x = stdin->_r;
7401 if (x == 0) x = conchk();
7402 if (x < 0) x = 0;
7403
7404 /* Fill in any others here... */
7405
7406 #endif /* USE_FILE_R */
7407 #endif /* USE_FILE__CNT */
7408 #endif /* USE_FILE_CNT */
7409 #endif /* _IO_file_flags */
在7371行的註釋告訴我們要關注stdin buffer,這個buf(struct _iobuf也就是FILE結構體)和平臺高度相關。而Linux平臺下的stdin結構體沒有_cnt成員,該成員在MinGW和MSVC編譯環境中才有。因此這裡應該執行#ifdef _IO_file_flags下的程式碼,這裡需要自己把這個宏新增進去。
注:[參考連結]https://blog.mxslly.com/archives/172.html
三、解決錯誤
進入makefile報錯行[6054],及linuxa
的標籤,在CFLAGS後新增-D_IO_file_flags
。
linuxa:
@echo 'Making C-Kermit $(CKVER) for Linux 1.2 or later...'
@echo 'IMPORTANT: Read the comments in the linux section of the'
@echo 'makefile if you have trouble.'
$(MAKE) xermit KTARGET=$${KTARGET:-$(@)} "CC = gcc" "CC2 = gcc"
"CFLAGS = -O -DLINUX -pipe -funsigned-char -DFNFLOAT -DCK_POSIX_SIG
-DCK_NEWTERM -DTCPSOCKET -DLINUXFSSTND -DNOCOTFMC -DPOSIX -D_IO_file_flags
-DUSE_STRERROR $(KFLAGS)" "LNKFLAGS = $(LNKFLAGS)"
"LIBS = $(LIBS) -lm"
四、再次編譯
再次執行make linux
進行編譯,編譯成功會生成wermit
可執行檔案,將該可執行檔案移動到/usr/local/bin
目錄下(為了方便使用)。
make linux
#注:該命令需要root許可權
cp wermit /usr/local/bin/kermit
五、編輯.kermrc(在家目錄~/
下完成)
$ cd ~
$ vim .kermrc
#.kermrc檔案內容,一般USB轉串列埠會分配為/dev/ttyuSB0,如果是用串列埠線連線主機的話,需要設定為/dev/ttyS0,裝置名根據自己電腦識別的自行修改。
set line /dev/ttyUSB0
set speed 115200
set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set file name lit
set rec pack 1000
set send pack 1000
set window 5
編輯完成儲存退出後,若串列埠設定這正確,執行 sudo kermit
一直出現如下內容。
?SET SPEED has no effect without prior SET LINE
Sorry, you must SET LINE or SET HOST first
該問題出現的原因:
由於kermit
是root
使用者的應用程式,因此在執行的時候不會在家目錄~/
下匹配.kermrc
檔案。
只需要將組態檔.kermrc
複製到root
目錄下即可
#注:該命令需要root許可權
sudo mv ~/.kermrc /root/
到此,有關Ubuntu 20.04設定安裝ckermit的文章結束
help
#檢視當前裝置識別到的串列埠
ls /dev/tty*
#正確設定kermrc後,執行kermit命令
sudo kermit
#開啟並連線串列埠,已經進入kermit介面輸入`c`回車即可
#退出到kermit命令列:在連線到串列埠的情況下使用組合鍵`Ctrl + `之後按下`c`鍵,即可進入kermit的命令列介面,再輸入`q`回車即可退出kermit程式
#退出到terminal命令:在連線到串列埠情況下使用組合見`Ctrl + `之後按下`q`建,即可直接退出到terminal命令列介面
相關文章