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

該問題出現的原因:
由於kermitroot用戶的應用程序,因此在執行的時候不會在家目錄~/下匹配.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命令行界面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM