总结一些在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,微信公众号:电子发烧友网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

基于linux 2.6.24内核版本浅谈socket的close

笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件 Exciting 的事情。

的头像 Linux爱好者 发表于 08-18 11:22 75次 阅读
基于linux 2.6.24内核版本浅谈socket的close

浅谈Linux权限管理的ACL权限

Linux权限管理是Linux很重要的一项内容,重则引起用户信息泄露,轻则导致文件错乱和丢失。企业服....

的头像 马哥Linux运维 发表于 08-18 11:13 48次 阅读
浅谈Linux权限管理的ACL权限

ARM架构和总线协议如何支持Linux原子操作?

这篇文章探讨ARM架构和总线协议如何来支持的。对于某款ARM处理器和总线CCI,CCN和CMN产品的....

的头像 Linuxer 发表于 08-18 10:57 66次 阅读
ARM架构和总线协议如何支持Linux原子操作?

基于Linux的嵌入式实时操作系统研究应如何进行?

在嵌入式产品的开发中,有必要寻找一种廉价的嵌入式实时操作系统,以降低产品的开发成本和系统复杂度。由于....

发表于 08-18 09:13 28次 阅读
基于Linux的嵌入式实时操作系统研究应如何进行?

Cortex-A53 FS6818的嵌入式Linux应用和驱动开发的详细资料免费下载

本书从嵌入式Linux 的基础知识、系统环境搭建到综合应用,共分三个层次深入浅出地为读者拨开萦绕于嵌....

发表于 08-17 17:24 21次 阅读
Cortex-A53 FS6818的嵌入式Linux应用和驱动开发的详细资料免费下载

pyboardCN V2 使用I2C接口驱动I2C外设DS3231

pyboard上面有I2C类库可以供我们调用,根据邵版主的原话,I2C类库所挂载的I2C接口是STM32F405RG的硬件I2C接口,非...

发表于 08-17 16:53 142次 阅读
pyboardCN V2 使用I2C接口驱动I2C外设DS3231

寻Linux版本labview下载地址

官网下载的不知道为什么不可用,不知道是不是下载错了 ...

发表于 08-17 16:06 76次 阅读
寻Linux版本labview下载地址

基于嵌入式Linux内核的系统设备驱动程序开发设计

Linux是一个遵循POSIX标准的免费操作系统。具有BSD和SYSV的扩展特性。与其他操作系统相比....

发表于 08-17 15:12 35次 阅读
基于嵌入式Linux内核的系统设备驱动程序开发设计

基于Linux2.6内核的实时性增强方案设计

Linux以其功能强大、源代码开放、支持多种硬件平台、模块化设计方案以及丰富的开发工具支持等特点广泛....

发表于 08-17 15:01 27次 阅读
基于Linux2.6内核的实时性增强方案设计

Linux入门到精通之常用系统操作命令

  Linux中常用命令是必须掌握的,它们与系统状态、目录、文件、网络等相关。本节讲解常用的Linux命令,为今后学习更复杂的命...

发表于 08-17 13:50 152次 阅读
Linux入门到精通之常用系统操作命令

将iot-gatewat-lighting-gateway移植后ARM后在APP上找不到Zlight

最近把TI提供的iot-gateway-lighting-gateway移植到了其他的ARM平台,也就是说,可以脱离BeagleBone Black来搭建Linux网...

发表于 08-17 06:40 25次 阅读
将iot-gatewat-lighting-gateway移植后ARM后在APP上找不到Zlight

请问I2C代码对应答失败怎么处理

原子哥在I2C的代码有些没有看懂下面这段代码里,IIC_Wait_Ack()函数应该会返回一个0或1,这里并没有用它的返回值,而是直...

发表于 08-17 06:19 94次 阅读
请问I2C代码对应答失败怎么处理

请问TM4C129Np自带I2C无法写入数据是什么原因?

大家好,我用129的自带I2C,无法写入数据。

发表于 08-17 06:18 13次 阅读
请问TM4C129Np自带I2C无法写入数据是什么原因?

移植LWIP时候遇到了进入硬件中断的问题

  //网卡接收数据(lwip直接调用)//netif:网卡结构体指针 //返回值:ERR_OK,发送正常 //     &nb...

发表于 08-17 06:06 93次 阅读
移植LWIP时候遇到了进入硬件中断的问题

MULATA 1FX与Linux的计算模块

我们正在研究一种使用Raspberry Pi的计算模块3为基础的系统。我们有lbwa1kl1fx开发套件(即1fx模块),并通过一些硬件修改的试...

发表于 08-17 01:09 19次 阅读
MULATA 1FX与Linux的计算模块

通过I2C连接精密DAC器件方法步骤

如何通过I2C连接一个精密DAC器件

的头像 TI视频 发表于 08-17 00:13 20次 观看
通过I2C连接精密DAC器件方法步骤

Docker到底是什么,要解决什么问题,好处又在哪里?

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Lin....

的头像 Linux爱好者 发表于 08-16 16:56 109次 阅读
Docker到底是什么,要解决什么问题,好处又在哪里?

一名入门的嵌入式Linux工程师需要掌握什么

随着嵌入式行业的迅猛发展,嵌入式Linux凭借其系统发展的成熟度、市场应用的高份额也受到更多工程师朋友的青睐,越来越多的企业...

发表于 08-16 15:50 26次 阅读
一名入门的嵌入式Linux工程师需要掌握什么

关于Linux嵌入式操作系统的优势特征详解

嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种....

发表于 08-16 15:17 180次 阅读
关于Linux嵌入式操作系统的优势特征详解

如何才能提高Linux系统的安全性?这八大招告诉你!

Linux系统不论在功能上、价格上或性能上都有很多优点,然而,作为开放式操作系统,它不可避免地存在一....

发表于 08-16 15:08 41次 阅读
如何才能提高Linux系统的安全性?这八大招告诉你!

TMS320DM37303设计:厘米悬空线引发的案件

[table] [tr][td]   以前用TMS320DM3730做过设计,重新做了一个方案。系统使用TF卡启动。X-Loader和Uboot及...

发表于 08-16 03:33 20次 阅读
TMS320DM37303设计:厘米悬空线引发的案件

inotify框架的使用和原理!如何添加对于目标文件的watch呢?

为了防止文件描述符fd的快速消耗,inotify提出了一个inotify instance(inot....

的头像 Linuxer 发表于 08-15 17:43 276次 阅读
inotify框架的使用和原理!如何添加对于目标文件的watch呢?

Linux内核学习经验总结分享

操作系统是介于底层硬件和应用软件之间的接口,其各个子系统的实现很大程度上依赖于硬件特性。书上介绍这些....

的头像 马哥Linux运维 发表于 08-13 17:40 165次 阅读
Linux内核学习经验总结分享

基于Linux操作系统内核的崩溃转储机制解析

随着嵌入式Linux系统的广泛应用,对系统的可靠性提出了更高的要求,尤其是涉及到生命财产等重要领域,....

发表于 08-13 17:00 72次 阅读
基于Linux操作系统内核的崩溃转储机制解析

关于Linux操作系统网络驱动程序编写知识详解

Linux作为挑战微软垄断的强有力武器,日益受到大家的喜爱。真希望她能在中国迅速成长。把程序文档贴出....

发表于 08-13 16:52 80次 阅读
关于Linux操作系统网络驱动程序编写知识详解

嵌入式工程师常用的IIC和SPI总线协议

现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit....

的头像 面包板社区 发表于 08-13 14:52 163次 阅读
嵌入式工程师常用的IIC和SPI总线协议

四款炫酷Linux开源程序照亮你的生活!

许多 Linux 用户认为在终端中工作太复杂、无聊,并试图逃避它。但这里有个改善方法 —— 四款终端....

的头像 Linux爱好者 发表于 08-13 14:36 193次 阅读
四款炫酷Linux开源程序照亮你的生活!

嵌入式Linux模块编译步骤详细概述让你少走弯路

今天将直接了当的带你进入linux的模块编译,当然在介绍的过程当中,我也会添加一些必要的注释,以便初....

的头像 嵌入式ARM 发表于 08-12 10:56 306次 阅读
嵌入式Linux模块编译步骤详细概述让你少走弯路

Linux环境下对磁盘分区进行管理的一种机制

物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,....

的头像 马哥Linux运维 发表于 08-10 17:58 322次 阅读
Linux环境下对磁盘分区进行管理的一种机制

关于嵌入式Linux系统开发学习流程详解

C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C语言的基础编程以及高级编程知....

发表于 08-10 17:15 123次 阅读
关于嵌入式Linux系统开发学习流程详解

浅析Linux中命令链接操作符的十个最佳实例

Linux命令中链接的意思是,通过操作符的行为将几个命令组合执行。

的头像 马哥Linux运维 发表于 08-10 15:51 160次 阅读
浅析Linux中命令链接操作符的十个最佳实例

Linux内核的git历史记录一些最奇怪的事情

正如我所看到的,这个有66个父节点的不同寻常的提交在某种程度上只是对于ASoc代码修改的正常合并。A....

的头像 Linux爱好者 发表于 08-10 11:22 291次 阅读
Linux内核的git历史记录一些最奇怪的事情

如何修复Linux内核存在的TCP漏洞?

卡内基梅隆大学的 CERT/CC 发出警告,称 Linux 内核 4.9 及更高版本中有一个 TCP....

的头像 Linux爱好者 发表于 08-10 11:15 272次 阅读
如何修复Linux内核存在的TCP漏洞?

一个关于Linux中断的问题:硬件处理,初始化和中断处理

I/O APIC 每个I/O APIC提供24个管脚,能够和外部设备的中断线连接,每个管脚都可以通....

的头像 Linuxer 发表于 08-09 17:16 434次 阅读
一个关于Linux中断的问题:硬件处理,初始化和中断处理

以Arm-Linux为平台的智能家居控制系统的设计详解

嵌入式系统以其占用资源少、专用性强、功耗低的特点使其广泛应用在移动通信、工业生产、安全监控等领域。针....

发表于 08-08 16:27 124次 阅读
以Arm-Linux为平台的智能家居控制系统的设计详解

排查Linux机器被入侵的11个步骤

随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至....

的头像 马哥Linux运维 发表于 08-08 14:42 180次 阅读
排查Linux机器被入侵的11个步骤

嵌入式环境下的轻量级GUI系统解决方案设计详解

近年来,随着信息家电、手持设备、无线设备的迅速发展,人们对嵌入式系统的需求逐渐增多,要求也越来越高....

发表于 08-07 15:18 167次 阅读
嵌入式环境下的轻量级GUI系统解决方案设计详解

基于嵌入式Linux系统的机车状态实时检测系统设计详解

状态监测与故障诊断技术是现代工业技术发展的产物,已发展到了以专家系统、神经网络和模糊分析等理论为基....

发表于 08-07 15:07 92次 阅读
基于嵌入式Linux系统的机车状态实时检测系统设计详解

基于嵌入式Linux的Qt Designer快速安装流程设计详解

RAD(快速应用程序开发)是一种高效的软件开发形式,可以让用户在极短的时间里创建一个图形化的用户界....

发表于 08-06 09:17 93次 阅读
基于嵌入式Linux的Qt Designer快速安装流程设计详解

Linux 4.18 正式版将延期发布

前两天 Linux 4.18 RC 7 发布的时候,Linus Torvalds 表示,如果不出意外....

的头像 Linux爱好者 发表于 08-05 08:55 319次 阅读
Linux 4.18 正式版将延期发布

Arch Linux 有何优缺点?

Arch Linux 于 2002 年发布,由 Aaron Grifin 领头,是当下最热门的 Li....

的头像 Linux爱好者 发表于 08-05 08:52 372次 阅读
Arch Linux 有何优缺点?

示波器和I2C时序波形图的关系分析

对于I2C总线的数据,我们要用到示波器,这样我们才能抓取到信号,而且必须同时采集SDA和SCL的数据....

发表于 08-03 16:57 135次 阅读
示波器和I2C时序波形图的关系分析

关于在嵌入式项目中使用Linux的五大技巧详解

微控制器制造商的开发板,以及他们与开发板一起提供的软件项目例程,在工程师着手一个新设计时可以提供很大....

发表于 08-03 15:23 170次 阅读
关于在嵌入式项目中使用Linux的五大技巧详解

用于管理文件方法和数据结构案例分析

文件系统是在存储设备中(SD Card、NAND Flash…)组织文件的方法和数据结构,用于管理文....

的头像 周立功单片机 发表于 08-03 09:28 1228次 阅读
用于管理文件方法和数据结构案例分析

ARM与嵌入式Linux入门的6个建议

也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也....

的头像 玩转单片机 发表于 08-02 17:02 379次 阅读
ARM与嵌入式Linux入门的6个建议

嵌入式Linux OS启动流程

BootLoader是一段小程序,主要功能是引导操作系统启动。可以把它想象成PC机Linux上的GR....

的头像 嵌入式ARM 发表于 08-01 16:17 326次 阅读
嵌入式Linux OS启动流程

基于ARM920处理器和嵌入式Linux操作系统的GPS智能终端设计解析

GPS智能终端是智能交通系统(ITS系统)的重要组成部分,它将卫星定位技术(GPS)、地理信息系统(....

发表于 08-01 14:55 384次 阅读
基于ARM920处理器和嵌入式Linux操作系统的GPS智能终端设计解析

什么是Qt?Qt 5的安装和开发步骤及实例及概念解析

Qt最早是在1991年由奇趣科技开发的,1996年进入商业领域,成为全世界范围内数千种成功的应用程序....

发表于 08-01 08:00 37次 阅读
什么是Qt?Qt 5的安装和开发步骤及实例及概念解析

德国下萨克森州跟随慕尼黑计划从Linux转向Windows

据外媒消息,德国下萨克森州计划跟随慕尼黑的脚步,将超过 13000 台工作站从 OpenSUSE 迁....

的头像 Linux爱好者 发表于 07-31 16:58 282次 阅读
德国下萨克森州跟随慕尼黑计划从Linux转向Windows

RF430CL330H目标板的详细资料免费下载

作为出货,R430CL330HTB硬件配置为I2C模式(CS引脚=0,在SDA/SCL上的上拉电阻)....

发表于 07-31 16:54 45次 阅读
RF430CL330H目标板的详细资料免费下载

Linux2.4.22 内核基础上的嵌入式闸门智能监控系统设计

闸门系统是水资源调度中重要的组成部分,国内目前多采用手动和部分电动的操作方式,真正实现闸门的智能控制....

发表于 07-31 15:57 285次 阅读
Linux2.4.22 内核基础上的嵌入式闸门智能监控系统设计

以嵌入式Linux为基础的机车状态实时检测系统设计详解

状态监测与故障诊断技术是现代工业技术发展的产物,已发展到了以专家系统、神经网络和模糊分析等理论为基础....

发表于 07-31 15:48 177次 阅读
以嵌入式Linux为基础的机车状态实时检测系统设计详解

24AA01和24LC01B用于I2C串行EEPROM的详细资料免费下载

Microchip技术公司24AA01/24LC01B(24XX01*)是一个1千位电可擦除PROM....

发表于 07-31 08:00 22次 阅读
24AA01和24LC01B用于I2C串行EEPROM的详细资料免费下载

基于嵌入式Linux框架下的的智能仪器触摸屏接口设计过程详解

在现代化生产中, 为了确保机械设备安全可靠地运行, 通常要采用适宜的仪器仪表, 利用故障诊断技术及时....

发表于 07-30 15:13 113次 阅读
基于嵌入式Linux框架下的的智能仪器触摸屏接口设计过程详解

LT8711HE芯片的详细资料和I2C TOOL应用程序等详细资料免费下载

LT811HE集成了符合DPL 2标准的接收机和符合HDM12.0标准的发射机。此外,两个CC控制器....

发表于 07-30 08:00 47次 阅读
LT8711HE芯片的详细资料和I2C TOOL应用程序等详细资料免费下载

Linux 0.01版本内核的源码和注释的详细资料免费下载

对于学习linux内核很有帮助,能学到很多基础性的知识。本文档的主要内容详细介绍的是linux 0.....

发表于 07-30 08:00 54次 阅读
Linux 0.01版本内核的源码和注释的详细资料免费下载

Linux十个基础知识点分享

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任....

的头像 马哥Linux运维 发表于 07-28 10:23 380次 阅读
Linux十个基础知识点分享

什么是僵尸进程_Linux僵尸进程可以被“杀死”吗?

首先要明确一点,僵尸进程的含义是:子进程已经死了,但是父进程还没有wait它的一个中间状态,这个时候....

的头像 Linuxer 发表于 07-28 10:09 331次 阅读
什么是僵尸进程_Linux僵尸进程可以被“杀死”吗?

LINUX是什么?

LINUX是一个免费类unix内核,适用于386-AT计算机,附带完整源代码。主要让黑客、计算机科学....

的头像 马哥Linux运维 发表于 07-28 08:53 389次 阅读
LINUX是什么?

如何管理Linux 的内存分页?

内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。我将从内存的物理特性出发,深....

的头像 Linux爱好者 发表于 07-28 08:24 538次 阅读
如何管理Linux 的内存分页?