总结一些在LwIP移植的时候体会

电子发烧友网 2018-06-08 09:33 次阅读

在LwIP移植的时候,一开始遇到很多坑,在大家的帮助下都调通了,现在回头看看,总结了一些体会,和大家分享一下:

1. 对RT-Thread的体系结构不熟悉,特别是设备驱动层这块,如果不理解,很可能会出现如下情况:

这是没有添加I2C底层驱动的原因。当时的情况是这样的,我在menuconfig配置环境中,Device Drivers子条目下,打开了I2C的驱动,如下图所示:

我单纯的以为这样就行了,还天真的想着RT-THread真贴心,啥都做好了,唉!Too young too simple!        这个只是做好了I2C设备(总线)的抽象层(BUS层),供应用层调用,跟linux的设备驱动体系类似,这样做的好处在于能统一设备,管你是什么设备,万千接口,你在我这里就是一个总线接口,从而简化应用层的逻辑处理。如下图所示:

之前做了很多linux驱动开发,也了解到RT-Thread是类linux的一种RTOS,也怪自己太直,忘记这点了,一直在这个错误上面纠结,钻牛角尖了,最后看了一篇文档才恍然大悟。解决办法就是:在bsp->drivers目录下,加上stm32f7板级的设备驱动,相当于把上面提到的I2C抽象层所提供的接口一 一实例化。这样的话,应用层就能和底层I2C通过抽象层达成一一映射对应的关系。2. 犯了形而上学的错误。出现上述错误后,当然要去问群里的大神、老师了。当时,黄老师说让我用pin设备类的驱动,改了一定的代码,我照做了,也没看原理图,想着老师说的都是对的,结果我错了。事实上,作为工程师,必须要谨慎细致,要去看原理图,理解原理。唉,急功近利,形而上学,片面的看待问题理解问题。

黄老师,反复提到一个pin,117. 比如rt_pin_write(117,1); 这是F407独有的ETH_RESET引脚,我想着都是原子家的娃,这点还用细分吗?767必须也是呀! 汗!不说这点了,羞愧!

事实上,767不能用pin设备复位PCF8574的,必须用I2C设备进行驱动,原因就是硬件决定的!

马爷爷,毛爷爷的辩证法,矛盾论教导我们,切莫教条主义,静止孤立片面的看待问题,这次感同身受。

上面算是一些经验和教训总结,下面上硬菜。

1. 下载rt-thread-3.0.3源码,解压之,删除bsp文件夹内所有子文件夹(干净,看着舒服,不做亦可),到GitHub上面下载stm32f7-disco最新的板级支持包。3.0.3内的F7包非常老,没有767的芯片支持,同时,驱动特性支持的也不好,总之,如果用767的话,这步虽然非必需,但是对后续的移植却非常有益。然后,把这个文件夹命名为stm32f767-apollo(非必需,装逼要紧)

2.将bsp内stm32f429-apollo文件内drivers目录下的drv_eth.c/h  drv_i2c.c/h drv_pcf8574.c/h 这6个文件拷贝到stm32f767-apollo相应目录下。(cao! 步骤1中与此步骤有逻辑冲突,各位原谅我)3.现在开始修改各种配置吧,先用ENV工具menuconfig以下,注意看此时的配置图

下面我们就装逼到底,让这个配置图变为STM32F767IGTx的专属。进入顶层目录(进入stm32f767-apollo文件夹内,以下均称“顶层目录”),打开Kconfig顶层kernel-config文件。 加上如下代码

保存退出,我们再menuconfig一下看下效果。  

吊不吊先不说了,就说装逼足够了吧,哈哈!        4.虽然很好看,但是步骤3目前来说还是没有什么卵用,万里长征才刚刚开始。在顶层目录下,打开template.uvprojx文件(没错,您要是不瞎搞,这个文件目测应该在最下面),用keil打开之后,修改为对应的STM32F767IGx芯片,如下图所示。这样,再用命令生成工程时,默认的就是767IGT,不用每次都重新修改了。   

5.进入Libraries子目录,打开SConscript文件,做如下修改:

这样的话,生产工程时,会自动加载767的启动文件,并且在keil的C/C++预定义框中会自动定义STM32F767xx  如下图所示:

6.进入drivers子目录下,打开SConscript文件,这里说一下,3.0.3内的SConscript文件可以直接把该文件夹下所有源码加入工程,而这个最新的得自己加进去。修改如下:

把之前加入的文件名字添加进去。别急,还有一步,打开drv_iic.h文件, 把包含的头文件修改一下,你自己一看就懂了(算了,写一下 #include "stm32f7xx_hal.h")7. 看到这里,我可以负责任的告诉你,BSP已经准备好了!!!我们开始LwIP的移植吧,这一步骤先高兴下,喝杯茶,45°角仰望天空,像某位梳着大背头的伟人一样,吐口烟圈。8.到顶层目录,打开ENV工具,menuconfig 关掉Using SDRAM,然后进入RT-Thread Components子条目,在Device Drivers目录下,打开I2C驱动;

回到上层,如果设备虚拟文件系统打开了的话,关掉吧,用不上的。进入Network stack子条目,再进入LWIP子条目,选择LWIP的版本为2.0.2 如果有路由器,现在就可以了,如果没有,需要配置静态IPv4地址。如图所示:

9. 到RT-Thread online packages子条目下,选择IOT - internet if things 子条目下,打开ping工具,如下图所示:

10. 至此,所有配置完成,保存退出menuconfig,此时ENV开始自动下载ping工具包,使用pkgs --update更新包,完成后,使用 scons --target=mdk5 -s 命令生成工程。至此移植完成11.打开工程,直接编译,下载进开发板,打开串口助手,看好戏吧。对了,在开发板ping电脑的时候,要关闭电脑防火墙,不然ping不同。下图是成功现象:

                

写在最后,这个帖子断断续续写了一天,很累,但是分享很开心。衷心希望大家多多斧正!

热门推荐

原文标题:【周四RTOS专栏】基于正点原子F767的RT-Thread LwIP移植

文章出处:【微信号:elecfans,微信公众号:电子发烧友网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

请问DM365怎么将linux从UART0启动改为UART1启动??

发表于 06-22 04:53 2次 阅读
请问DM365怎么将linux从UART0启动改为UART1启动??

单片机通过I2C读取EEPROM中的数据,向EEPROM中发数据正常,但是一旦读数据就会导致单片机复位。想请问为什么?

发表于 06-22 02:58 8次 阅读
单片机通过I2C读取EEPROM中的数据,向EEPROM中发数据正常,但是一旦读数据就会导致单片机复位。想请问为什么?

Linux 配置 NFS进行服务器端配置,重启NFS时报错,请问这是为什么?

发表于 06-21 20:00 2次 阅读
Linux 配置 NFS进行服务器端配置,重启NFS时报错,请问这是为什么?

Google发布了适用于Mac和Linux的全新工具——VR180Creator

VR180 Creator将素材转换为标准格式,以便您可以使用Adobe Premiere和Fina....

的头像 AR联盟 发表于 06-21 11:43 211次 阅读
Google发布了适用于Mac和Linux的全新工具——VR180Creator

開始編譯i2c_led範例程式時,出現一個error,叫我更新更新版的XDCTool,更新了卻出現下列錯誤 請問該如何解決?

发表于 06-21 05:19 10次 阅读
開始編譯i2c_led範例程式時,出現一個error,叫我更新更新版的XDCTool,更新了卻出現下列錯誤 請問該如何解決?

AM335X最新Linux SDK下载问题,请问最新的Linux SDK在哪里下载?

发表于 06-21 04:14 17次 阅读
AM335X最新Linux SDK下载问题,请问最新的Linux SDK在哪里下载?

AM335X以太网问题,请问需要在linux里面修改什么吗,比如把PHY芯片的自协商关闭,固定在100full模式之类的?

发表于 06-21 03:42 14次 阅读
AM335X以太网问题,请问需要在linux里面修改什么吗,比如把PHY芯片的自协商关闭,固定在100full模式之类的?

TI 的 AM335X EVM H/W上使用了 I2C0 讀取 EEPROM資訊,如何修改 Uboot, Kernel?

发表于 06-21 02:58 12次 阅读
TI 的 AM335X EVM H/W上使用了 I2C0 讀取  EEPROM資訊,如何修改 Uboot, Kernel?

请问哪位大神可以分享一下AM335x-LINUX-PSP-MM.mm.pp.bb.tgz的下载地址?

发表于 06-21 02:57 13次 阅读
请问哪位大神可以分享一下AM335x-LINUX-PSP-MM.mm.pp.bb.tgz的下载地址?

请问哪里能下载OMAPL137的 linux?

发表于 06-21 02:48 1次 阅读
请问哪里能下载OMAPL137的 linux?

请问OMAP L138可以在win上开发linux程序吗,如何配置开发环境?

发表于 06-21 02:41 1次 阅读
请问OMAP L138可以在win上开发linux程序吗,如何配置开发环境?

如何使用PIC MCU器件实现实现LIN协议的详细中文资料概述

本应用笔记并非要取代或者重建LIN协议规范。 它只是对该总线进行了全面介绍,并从一个较高的角度来说明....

发表于 06-20 10:26 20次 阅读
如何使用PIC MCU器件实现实现LIN协议的详细中文资料概述

dsPIC33F系列的I2Cx模块与Microchip的24XXX系列EEPROM器件详细概述

Microchip Technology的24XXX系列EEPROM与I 2C™ 兼容,其最大时钟频....

发表于 06-20 08:26 7次 阅读
dsPIC33F系列的I2Cx模块与Microchip的24XXX系列EEPROM器件详细概述

串行EEPROM的详细介绍和耐擦写能力教程的资料概述

当前市场上有许多不同的单片机用于嵌入式控制应用领域。许多这种嵌入式控制系统都需要非易失性存储器。由于....

发表于 06-20 08:26 14次 阅读
串行EEPROM的详细介绍和耐擦写能力教程的资料概述

I2C串行EEPROM的详细中文使用手册详细中文概述

大多数嵌入式控制系统都需要非易失性存储器。由于其外形小巧、提供字节级灵活性、 I/O 引脚要求低、低....

发表于 06-19 17:26 8次 阅读
I2C串行EEPROM的详细中文使用手册详细中文概述

如何实现SPI和I2C串行EEPROM器件的接口的详细中文资料概述

SPI 和 I 2C同步串行协议仍然是与串行EEPROM器件接口的两种最流行的方式。为了与之适应,大....

发表于 06-19 17:26 13次 阅读
如何实现SPI和I2C串行EEPROM器件的接口的详细中文资料概述

Linux以inode的方式,让数据形成文件

当我们读取一个文件时,实际上是在目录中找到了这个文件的inode编号,然后根据inode的指针,把数....

的头像 马哥Linux运维 发表于 06-19 14:23 174次 阅读
Linux以inode的方式,让数据形成文件

Embest EduKit2410 平台的ARM920T Linux实验系统的用户手册详细概述

Linux 的调试通常比较复杂,可以选择的调试环境也很多。但由于 Linux 系统内核有包括全球在内....

发表于 06-19 08:00 13次 阅读
Embest EduKit2410 平台的ARM920T Linux实验系统的用户手册详细概述

单片机的IO口模拟I2C数据总线传输方式的详细中文资料概述

需要做的工作小结如下:1、MCU的I2C采用IO口模拟实现;2、MCU作为I2C主设备与定时芯片RX....

发表于 06-19 08:00 57次 阅读
单片机的IO口模拟I2C数据总线传输方式的详细中文资料概述

Linux文件缓存使用情况和命中率查看的工具详细概述

这里总结几个Linux文件缓存(page cache)使用情况、命中率查看的工具。

的头像 Linuxer 发表于 06-18 17:51 84次 阅读
Linux文件缓存使用情况和命中率查看的工具详细概述

Windows和Linux的区别以及Linux系统的目录结构

本文先对 Windows 和 Linux 上面文件系统原理、组织概念进行区分,并给出例子、列举两者的....

的头像 Linux爱好者 发表于 06-18 17:37 103次 阅读
Windows和Linux的区别以及Linux系统的目录结构

使用I2C作为通信通道的自举程序的实现的详细中文资料概述

新的PIC16F1XXX增强型内核单片机能够在软件控制下写入自己的程序存储器。这允许单片机在闪存程序....

发表于 06-15 10:27 15次 阅读
使用I2C作为通信通道的自举程序的实现的详细中文资料概述

使用C语言和硬件模块实现8051MCU与I2C串行EEPROM的接口的资料概述

Microchip Technology 的 24XXX 系列串行 EEPROM 支持双向 2 线总....

发表于 06-15 08:27 21次 阅读
使用C语言和硬件模块实现8051MCU与I2C串行EEPROM的接口的资料概述

SHT30-31-35温湿度传感器模块全套资料免费下载

本文档的主要内容介绍的是SHT30-31-35温湿度传感器模块全套资料免费下载包括了;3系保护壳,C....

发表于 06-15 08:00 30次 阅读
SHT30-31-35温湿度传感器模块全套资料免费下载

PCA9306双向I2C总线和SMBus电压电平转换器的详细资料概述

PCA9306是一种双双向I2C总线和SMBus电压电平转换器,具有使能(EN)输入,并且从1 V到....

发表于 06-15 08:00 19次 阅读
PCA9306双向I2C总线和SMBus电压电平转换器的详细资料概述

Linux内存配置:overcommit的设置

使用版本管理工具的工程师都熟悉commit的含义,就是向代码仓库提交自己更新的意思,对于这个场景,实....

的头像 Linuxer 发表于 06-14 11:45 205次 阅读
Linux内存配置:overcommit的设置

Chrome OS将获Linux支持,可在Chrome OS 上运行Linux?

继添加了安卓应用支持后,Chrome OS现在又将获得Linux支持。此前,IT之家报道了 Term....

的头像 39度创意研究所 发表于 06-14 08:45 267次 阅读
Chrome OS将获Linux支持,可在Chrome OS 上运行Linux?

如何在Linux中使用SIM7100模块的详细资料概述

本文档的主要内容详细介绍的是如何在Linux中使用SIM7100模块的详细资料概述

发表于 06-14 08:00 24次 阅读
如何在Linux中使用SIM7100模块的详细资料概述

Linux用户与用户组的关系详解

在 linux 中,用户帐号,用户密码,用户组信息和用户组密码均是存放在不同的配置文件中的。

的头像 马哥Linux运维 发表于 06-13 14:30 231次 阅读
Linux用户与用户组的关系详解

本文档介绍如何使用PICkitTM串行分析器来操作MCP4728评估板的概述

MCP4728 评估板包含一枚 MCP4728 器件 (4 通道 12 位数模转换器)、连接 PIC....

发表于 06-13 10:27 20次 阅读
本文档介绍如何使用PICkitTM串行分析器来操作MCP4728评估板的概述

如何使用44引脚演示板开发工具在目标电路板上仿真和调试固件的概述

PMBus 是一种开放式标准协议,业界将其定义为一种与电源转换器和其他设备进行通信的方式,从而创立了....

发表于 06-13 09:27 14次 阅读
如何使用44引脚演示板开发工具在目标电路板上仿真和调试固件的概述

Web Installer介绍和提供的各种特性以及优点的详细资料概述

你有没有注意到在Netflix流媒体视频播放时,有时候视频模糊,然后很快恢复到高质量? 你知道Net....

的头像 嵌入式资讯精选 发表于 06-12 19:44 513次 阅读
Web Installer介绍和提供的各种特性以及优点的详细资料概述

Linux内核中的hash与bucket

哈希表(Hashtable)又称为“散列”,Hashtable是会根据索引键的哈希程序代码组织成的索....

的头像 嵌入式ARM 发表于 06-12 14:53 299次 阅读
Linux内核中的hash与bucket

8位PIC单片机上具有硬件协议加速功能的I2C其特性和基本功能的概述

在图 1 中,控制单元包含用于主 / 从工作模式的主器件模块和从器件模块以及用于监视模块状态的中断控....

发表于 06-12 09:28 22次 阅读
8位PIC单片机上具有硬件协议加速功能的I2C其特性和基本功能的概述

MGC3030和MGC3130 GestIC库的详细中文资料介绍

本文档介绍了 MGC3030/3130 GestIC 库 用途本文档是 MGC3X30 的 Ges....

发表于 06-11 09:28 12次 阅读
 MGC3030和MGC3130 GestIC库的详细中文资料介绍

9个超有趣的Linux命令使用动画演示详细介绍

Linux最强大的一个特征就是它有大量的各种小命令工具,这也可以称做是它最有趣的一个地方了。

的头像 马哥Linux运维 发表于 06-10 09:19 399次 阅读
9个超有趣的Linux命令使用动画演示详细介绍

Unix和Linux有什么区别?

近些年来,随着 Android 和基于 Linux 的嵌入式系统在智能手机、电视、汽车和其他设备中的....

的头像 Linux爱好者 发表于 06-08 17:57 479次 阅读
Unix和Linux有什么区别?

液晶显示模块RSCG12864和U-PD2使用手册以及字符编码应用程序免费下载

本文档的主要内容介绍的是液晶显示模块RSCG12864和U-PD2使用手册以及字符编码-CN应用程序....

发表于 06-07 08:00 56次 阅读
液晶显示模块RSCG12864和U-PD2使用手册以及字符编码应用程序免费下载

PIC32用于同其他外设或单片机器件进行通信的串行接口的I2C模块的概述

I 2C™模块是用于同其他外设或单片机器件进行通信的串行接口。这些外设可以是串行EEPROM、显示驱....

发表于 06-06 13:29 34次 阅读
PIC32用于同其他外设或单片机器件进行通信的串行接口的I2C模块的概述

Linux Mint 19“Tara”beta版发布

Linux Mint 团队已正式宣布推出 Linux Mint 19 "Tara" 的首个 beta....

的头像 Linux爱好者 发表于 06-06 09:07 245次 阅读
 Linux Mint 19“Tara”beta版发布

学习Linux的基础知识的详细中文资料概述

这本书的所有内容是学习Linux的基础,这些内容是基础中的基础,如果您能将其中的文字都看完并且消化过....

发表于 06-06 08:00 49次 阅读
学习Linux的基础知识的详细中文资料概述

Linux进程的概念及进程通信的应用场景

管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程....

的头像 嵌入式ARM 发表于 06-05 16:44 548次 阅读
Linux进程的概念及进程通信的应用场景

嵌入式Linux系统开发教程及案例分析

本文主要介绍了嵌入式Linux系统开发教程及案例分析。

发表于 06-05 12:00 45次 阅读
嵌入式Linux系统开发教程及案例分析

了解下五大嵌入式操作系统

FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让....

的头像 电子发烧友网 发表于 06-05 09:43 395次 阅读
了解下五大嵌入式操作系统

嵌入式linux开发详细资料

本文主要介绍了嵌入式linux开发详细资料。

发表于 06-05 08:00 40次 阅读
嵌入式linux开发详细资料

STM32F030中I2C 的配置和 AT24C16驱动

I2C_AutoEnd_Mode,顾名思义,操作length字节后自动添加STOP。 I2C_Sof....

发表于 06-04 07:34 115次 阅读
STM32F030中I2C 的配置和 AT24C16驱动

Purism计划在将到来的Librem 5 Linux智能机上,默认使用GNOME的一个移动版本

GNOME 开发团队刚刚宣布了一个好消息,因为有位神秘人士承诺会分两年时间、向非盈利性质的 GNOM....

的头像 Linux爱好者 发表于 06-02 10:31 789次 阅读
Purism计划在将到来的Librem 5 Linux智能机上,默认使用GNOME的一个移动版本

eGuideDog——Linux 界的导盲犬

在近 30 年的发展中,Linux 先后衍生出了众多发行版本。比如妇孺皆知的 Android,还有开....

的头像 Linux爱好者 发表于 06-02 10:21 482次 阅读
eGuideDog——Linux 界的导盲犬

Linux的中文学习方法详细资料(免费下载)

Linux 操作系统最初是在 1991 年 10 月份由芬兰赫尔辛基大学的在校生 Linus Tor....

发表于 06-01 13:00 79次 阅读
Linux的中文学习方法详细资料(免费下载)

什么是系统调用?为什么要用系统调用?

实际上,很多已经被我们习以为常的C语言标准函数,在Linux平台上的实现都是靠系统调用完成的,所以如....

的头像 EDN电子技术设计 发表于 06-01 08:44 1001次 阅读
什么是系统调用?为什么要用系统调用?

任天堂Switch被黑客破解 成功安装Linux系统

推特中包含的一张照片显示了运行Debian的Switch,黑客团队说这个漏洞攻击是针对启动ROM中的....

的头像 39度创意研究所 发表于 05-31 19:11 447次 阅读
任天堂Switch被黑客破解 成功安装Linux系统

如何避免僵尸进程,多线程的实现原理

创建一个进程时,它的第一个线程称为主线程(Primary thread),由系统自动生成。然后可以由....

的头像 嵌入式ARM 发表于 05-31 14:37 1954次 阅读
如何避免僵尸进程,多线程的实现原理

为什么选择Linux操作系统?制约标准Linux操作系统实时性的因素

Xenomai正是充分利用了Adeos技术,它的首要目标是帮助人们尽量平缓地移植那些依赖传统RTOS....

的头像 嵌入式ARM 发表于 05-30 14:24 1073次 阅读
为什么选择Linux操作系统?制约标准Linux操作系统实时性的因素

大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源

迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源。

发表于 05-29 14:46 217次 阅读
大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源

MSP430硬件I2C实现 SMBus 源程序

MSP430硬件I2C实现 SMBus 源程序。

发表于 05-29 09:13 44次 阅读
MSP430硬件I2C实现 SMBus 源程序

如何创建有多个Linux发行版的可启动USB

我们有一个工具正好可以做到在单个 U 盘上保留多个 Linux 发行版。你所需要做的只是选择要安装的....

的头像 马哥Linux运维 发表于 05-28 17:39 770次 阅读
如何创建有多个Linux发行版的可启动USB

一文读懂Linux的文档内容(属性、拥有者、群组、权限)

为了保护每个人的隐私和工作环境,针对某一个文档(文件、目录),Linux系统定义了三种身份,分别是拥....

的头像 Linux爱好者 发表于 05-28 16:07 725次 阅读
一文读懂Linux的文档内容(属性、拥有者、群组、权限)

浅谈Linux中ls 命令(20 个实用范例分析)

ls命令用于列出文件和目录,默认列出当前目录的内容。带上参数后,我们可以用ls做更多的事情。这里是一....

的头像 马哥Linux运维 发表于 05-28 16:03 632次 阅读
浅谈Linux中ls 命令(20 个实用范例分析)

基于Linux操作系统的服务器运行的同时,也会表征出各种各样参数信息

最后是每个程序的资源占用列表,其中 CPU 的使用率是所有 CPU core 占用率的总和。通常执行....

的头像 马哥Linux运维 发表于 05-25 17:28 1437次 阅读
基于Linux操作系统的服务器运行的同时,也会表征出各种各样参数信息

I2C基本的传输方式知识整理

当I2C不工作时,SDA和SCL一样都处于高位HIGH,SCL保持为HIGH,SDA由HIGH变LO....

的头像 嵌入式ARM 发表于 05-25 15:09 592次 阅读
I2C基本的传输方式知识整理