如何往riscv上移植linux

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何往riscv上移植linux相关的知识,希望对你有一定的参考价值。

参考技术A 步骤一:编译生成u-boot.elf文件

使用git clone命令从github上下载u-boot源码,注意使用主分支(master),使用tar命令对下载的压缩文件解压,tar zxvf u-boot-digilent-2012.04-digilent-13.01.tar.gz。 如果下载的是zip文件用unzip u-boot-digilent-2012.04-digilent-13.01.zip

编译u-boot之前我们要先设置好交叉编译环境变量,设置环境变量方法为source settings64.sh(见第一篇文章),然后根据上图编译u-boot,使用命令make CROSS_COMPILE= arm-xilinx-linux-gnueabi-

编译完成后会在u-boot-Digilent-Dev目录下生成u-boot文件,我们要给其加上‘.elf’,并且预先拷贝到sd_image目录下。本回答被提问者采纳

Lwip:原生态的Linux socket应用如何移植到Lwip上

lwIP - A Lightweight TCP/IP stack

在上一篇中,我们了解到在OpenFastPath上如何移植原生态的Linux Socket应用程序,那么,对于另外一个老牌的小型TCPIP协议栈------LWIP,又是如何处理这个问题的。

1、lwip重新定义了函数符号

#define listen(s,backlog)                         lwip_listen(s,backlog)
/** @ingroup socket */
#define recv(s,mem,len,flags)                     lwip_recv(s,mem,len,flags)
/** @ingroup socket */
#define recvmsg(s,message,flags)                  lwip_recvmsg(s,message,flags)
/** @ingroup socket */
#define recvfrom(s,mem,len,flags,from,fromlen)    lwip_recvfrom(s,mem,len,flags,from,fromlen)
/** @ingroup socket */
#define send(s,dataptr,size,flags)                lwip_send(s,dataptr,size,flags)
/** @ingroup socket */
#define sendmsg(s,message,flags)                  lwip_sendmsg(s,message,flags)
/** @ingroup socket */
#define sendto(s,dataptr,size,flags,to,tolen)     lwip_sendto(s,dataptr,size,flags,to,tolen)
/** @ingroup socket */
#define socket(domain,type,protocol)              lwip_socket(domain,type,protocol)
#if LWIP_SOCKET_SELECT
/** @ingroup socket */
#define select(maxfdp1,readset,writeset,exceptset,timeout)     lwip_select(maxfdp1,readset,writeset,exceptset,timeout)
#endif
#if LWIP_SOCKET_POLL
/** @ingroup socket */
#define poll(fds,nfds,timeout)                    lwip_poll(fds,nfds,timeout)
#endif

 

2、lwip重新定义了socket结构体

#if LWIP_IPV4
/* members are in network byte order */
struct sockaddr_in {
  u8_t            sin_len;
  sa_family_t     sin_family;
  in_port_t       sin_port;
  struct in_addr  sin_addr;
#define SIN_ZERO_LEN 8
  char            sin_zero[SIN_ZERO_LEN];
};
#endif /* LWIP_IPV4 */

3、lwip重新定义了socket宏

/* Socket protocol types (TCP/UDP/RAW) */
#define SOCK_STREAM     1
#define SOCK_DGRAM      2
#define SOCK_RAW        3

/*
 * Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c)
 */
#define SO_REUSEADDR   0x0004 /* Allow local address reuse */
#define SO_KEEPALIVE   0x0008 /* keep connections alive */
#define SO_BROADCAST   0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */


/*
 * Additional options, not kept in so_options.
 */
#define SO_DEBUG        0x0001 /* Unimplemented: turn on debugging info recording */
#define SO_ACCEPTCONN   0x0002 /* socket has had listen() */
#define SO_DONTROUTE    0x0010 /* Unimplemented: just use interface addresses */
#define SO_USELOOPBACK  0x0040 /* Unimplemented: bypass hardware when possible */
#define SO_LINGER       0x0080 /* linger on close if data present */
#define SO_DONTLINGER   ((int)(~SO_LINGER))

 

说句题外话:LWIP从2012年的1.4.1版本后基本没有更新了,近两年突然发布了很多新版本,功能(主要是apps)也大大增强,说明这个开源还是有一定市场基础的。

以上是关于如何往riscv上移植linux的主要内容,如果未能解决你的问题,请参考以下文章

新人求指教OpenWrt如何往ARM平台移植

如何将Linux下的QT程序移植到arm板上

如何把51程序移植到arm?

Linux 内核移植

Lwip:原生态的Linux socket应用如何移植到Lwip上

stm32系列可以移植应用程序吗