欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

移植minicom到嵌入式系统

程序员文章站 2022-05-22 20:57:25
...

一、添加驱动

因项目需求,需要通过MT7628中提供的USB转出两路串口。硬件方面使用FT232实现。

内核中需要选择FT232的驱动,按照网上的方法即可实现。需要注意的是:除了要添加FT232的驱动还要添加USB总线控制驱动。

移植minicom到嵌入式系统

移植minicom到嵌入式系统

移植minicom到嵌入式系统

编译生成内核文件即可。

二、安装minicom

minicom的编译依赖ncurses和libiconv;

三者的都为开源软件,可从官网下载,我用到的分别为:

ncurses-5.7

libiconv-1.15

minicom-2.7.1

下面分别介绍三者的编译和使用:

1、ncurses编译

1)、解压源码

tar xvf ncurses-5.7.tar.gz

2)、进入解压得到的ncurses-5.7目录,创建一个shell文件并添加如下内容:

  #!/bin/bash 
  ./configure \
  CC=/opt/buildroot-gcc463/usr/bin/mipsel-buildroot-linux-uclibc-gcc \
  CXX=/opt/buildroot-gcc463/usr/bin/mipsel-buildroot-linux-uclibc-g++ \
  --prefix=/opt/tools/ncurses-5.7/install \
  --host=arm-linux \
  CPPFLAGS=-I/opt/buildroot-gcc463/usr/include \                                                                                                                                   
  LDFLAGS=-L/opt/buildroot-gcc463/usr/lib
  make

其中CC和CXX分别对应自己所需的交叉编译工具gcc和g++;

prefix用于指定编译完成后生成文件的安装目录,此处的install目录是我自己手动创建的;

CPPFLAGS用于指定编译时所需头文件的查找目录;

LDFLAGS用于指定编译时所需库文件的查找目录;

3)、如上操作完成后,为该shell文件添加可执行权限,例如我创建的shell命名为run,则执行:

chmod 766 run

4)、运行该shell,等待编译完成;

5)、执行make install,将生成的文件安装到指定目录,如上所述,我指定的安装目录为:

--prefix=/opt/tools/ncurses-5.7/install

2、编译libiconv

说明:多数网上教程中没有该步骤,但我自己在编译完成ncurses之后就开始编译minicom时提示
minicom.c:34:19: fatal error: iconv.h: No such file or directory

我通过find命令查找了解压得到的minicom和ncurses目录都未找到该文件,所以就自己下载了libiconv源码,并通过交叉编译工具编译得到了该库文件。

1)、解压源码

tar xvf libiconv-1.15.tar.gz

2)、进入解压得到的目录,在顶层目录手动创建install目录和shell文件并添加如下内容:

  #!/bin/bash 
  ./configure \
  CC=/opt/buildroot-gcc463/usr/bin/mipsel-buildroot-linux-uclibc-gcc \
  --prefix=/opt/tools/libiconv-1.15/install \                                                                                                                                      
  --host=arm-linux \
  CPPFLAGS=-I/opt/buildroot-gcc463/usr/include \
  LDFLAGS=-L/opt/buildroot-gcc463/usr/lib

3)、为该shell添加可执行权限并运行;

4)、如果在该步骤之后直接make,编译时会包如下错误信息

getprogname.c: In function 'getprogname':
getprogname.c:147:4: error: #error "getprogname module not ported to this OS"
Makefile:1127: recipe for target 'getprogname.o' failed

此时,则需要对./srclib/getprogname.c做如下修改:

将原来的:

 getprogname (void)
 {
 # if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME                /* glibc, BeOS */
...
}

改为:

getprogname (void)
 {
 # if ARM
      char strProcessPath[1024] = {0};
      if(readlink("/proc/self/exe", strProcessPath,1024) <=0)
      {
          return NULL;
      }
      char *strProcessName = strrchr(strProcessPath, '/');  
      if(strProcessName)
      {
          size_t nameLen = strlen(strProcessName);
          char* namecopy = malloc(nameLen + 1);
          if (namecopy)
          {
              namecopy[nameLen] = 0;
              return memcpy(namecopy, strProcessName, nameLen);
          }
      }
  
      return NULL;
 # elif HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME                /* glibc, BeOS */
...
}

另在该文件中添加:

 #define ARM 1

5)、做完如上操作之后,执行make;

6)、等编译完成,执行make install;

3、编译minicom

1)、解压源码:

tar xvf minicom-2.7.1;

2)、进入解压得到的目录,在顶层目录手动创建install目录和shell文件并添加如下内容:

   #!/bin/bash 
   ./configure \
           CC=/opt/buildroot-gcc463/usr/bin/mipsel-buildroot-linux-uclibc-gcc \
           --prefix=/opt/tools/minicom-2.7.1/install \
           --host=arm-linux \
           CPPFLAGS=-I/opt/tools/ncurses-5.7/install/include/ncurses \
           CPPFLAGS=-I/opt/tools/ncurses-5.7/include \                                                                                                                                      
           CPPFLAGS=-I/opt/tools/libiconv-1.15/install/include/ \
           LDFLAGS=-L/opt/tools/ncurses-5.7/install/lib\
           LDFLAGS=-L/opt/tools/libiconv-1.15/install/lib

3)、为该shell添加可执行权限并运行;

4)、找到生成的src/Makefile,在其中添加ncurses静态库,修改方法如下:

修改:

 minicom_LDADD =  $(LIBICONV) $(MINICOM_LIBPORT) $(LOCKDEV_LIBS)
为:
 minicom_LDADD = /opt/tools/ncurses-5.7/lib/libncurses.a $(LIBICONV) $(MINICOM_LIBPORT) $(LOCKDEV_LIBS)

5)、之后执行make、makeinstall即可。

6)、查看install目录下是否有minicom。

三、将minicom在开发板上运行

经过以上步骤,我们已得到所需的minicom工具,之后就是在开发板上使用之。