移植minicom到嵌入式系统
一、添加驱动
因项目需求,需要通过MT7628中提供的USB转出两路串口。硬件方面使用FT232实现。
内核中需要选择FT232的驱动,按照网上的方法即可实现。需要注意的是:除了要添加FT232的驱动还要添加USB总线控制驱动。
编译生成内核文件即可。
二、安装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工具,之后就是在开发板上使用之。
上一篇: PHP定时执行计划任务