当前位置: 首页 > news >正文

群晖网站建设处理错误500小企业网站制作

群晖网站建设处理错误500,小企业网站制作,简单的模板网站,自己电脑做服务器发布网站一、inand 驱动问题的解决 1、先从现象出发定位问题 (1) 解决问题的第一步#xff0c;是定位问题。所谓定位问题#xff0c;就是找到源代码当中导致这个问题的那一句或者那几句代码。有时候解决这个问题需要修改的代码和直接导致这个问题的代码是不同的。我们这里说的定位问…一、inand 驱动问题的解决 1、先从现象出发定位问题 (1) 解决问题的第一步是定位问题。所谓定位问题就是找到源代码当中导致这个问题的那一句或者那几句代码。有时候解决这个问题需要修改的代码和直接导致这个问题的代码是不同的。我们这里说的定位问题指的是定位到出问题的代码处也就是运行了这一句代码时发生了这个错误。 (2) 定位了问题之后实际修改程序解决问题不一定改的是这一句代码。但是肯定和这一句代码有关联我们要通过自己分析来找到这种关联从而从定位的错误点找到真正需要修改的点然后去修改他。 (3) 实战方法从打印出来的错误信息中挑选一个关键词然后去源代码中搜索这个关键字通过这种搜索的方法定位问题。通过搜索将问题定位在 drivers/mmc/mmc.c 的 818 行。 (4) 然后就是解决问题了。 2、网络搜索解决方案 (1) 初步的解决方案是自己先浏览一遍这个问题点周边代码的上下文。通过浏览代码上下文发现这个函数是在读取 SD/iNand 的 ext_csd 寄存器的值。通过浏览代码结合出错地方可以判断出从卡端读取 ext_csd 寄存器是成功的并且从读取结果中拿到了卡的版本号信息。然后代码对版本号进行了判断并且如果版本号大于 5 就会报错并且函数错误退出。这就是问题所在。 (2) 问题就是我们使用的 iNand 卡的版本号大于 5而 uboot 代码本身不处理版本号大于 5 的卡因此出错了。 (3) 怎么解决第一可能换卡第二可能软件修复。 (4)网络搜索错误关键字然后逐个去查阅看看哪个可以给我们提供解决问题的思路和方法。http://blog.csdn.net/wang_shuai_ww/article/details/22308853 3、尝试修改代码解决问题 (1) 解决方法就是修改 uboot 中的代码把判断的 5 改成更大的数字。譬如 8然后跳过这个错误。 现象 4、推测和实验验证SD卡和iNand的区别 (1) 当前板子上有一个 iNand 接在 SD0 上有一个外置 SD 卡接在 SD2 上。那 uboot 中初始化的这个是 iNand 而不是 SD 卡。也就是说uboot 中实际用的是 SD0 而不是SD2. 现象 完整的现象截图 (2) 大家可以尝试使用外置 SD 卡时这个版本号的问题不会出现。从这里可以推测出SD 卡和 iNand 的区别至少从一个角度可以看出SD 卡版本低iNand 的版本比较高。 二、一些小问题的修补 1、控制台串口更换为串口 0 (1) uboot 中默认使用串口 2 来做控制台输入输出的。 (2) SOC 中一共有 4 个串口串口 0、1、2、3开发板 X210 上用 DB9 接口引出了 2 个串口分别是串口 2 和串口 0.靠边的是串口 2靠里那个是串口 0。 (3) 三星公司推荐使用串口 2 来作为调试串口所以在三星移植的 uboot 和内核版本中都是以串口 2 默认为控制台串口的。 (4) 有时候项目需要将调试串口修改为另外的串口譬如串口 0这时候需要修改 uboot 的代码做移植让 uboot 工作在串口 0 的控制台下。 (5) uboot 中真正去硬件初始化串口控制器的代码在 lowlevel_init.S 中的 uart_asm_init 中其中初始化串口的寄存器用 ELFIN_UART_CONSOLE_BASE 宏作为串口 n 的寄存器的基地址结合偏移量对寄存器进行寻址初始化。所以 uart_asm_init 中到底初始化的是串口几从 0 到 3取决于 ELFIN_UART_CONSOLE_BASE 宏。这个宏的值又由 CONFIG_SERIALnn 是从 1 到 4来决定。 (6) 同步代码、编译烧录运行发现串口线插在串口 2 上控制台上只打印SD checksum error.这个是内部 iROM 打印出来的内部 iNand 校验失败的信息然后将串口线改插到串口 0 上启动所有的信息出现。实验成功。 2、修改默认网络地址设置 (1) 修改配置头文件 smdkv210single.h 中的 CONFIG_IPADDR 等宏则可以修改 uboot 的默认环境变量。 修改后 (2) 更改完成后如果环境变量还是原来的正常。因为原来 uboot 执行过 saveenv因此环境变量已经被保存到 iNand 中的 ENV 分区中去了。uboot 启动后校验时 iNand 的 ENV 分区中的环境变量是正确的因此会优先加载。我们在 uboot 源代码中修改的只是默认的环境变量。 解决方案是擦除掉 iNand 中的那一份环境变量然后迫使 uboot 启动时使用 uboot 代码中自带的默认的这一份环境变量就可以看到了。 (3) 可以使用 mmc write 0 30000000 11# 32表示将 DDR 的 0x30000000 开头的一段内存中的内容写入 iNand 中的第 17 个扇区开始的 32 个扇区内写入长度是 32 个扇区长度16KB 3、修改行提示符 (1) 三、网卡驱动移植1 1、网卡芯片与开发板的连接方式 (1) SoC 的 SROM bank 和网卡芯片的 CS 引脚 SROM 就是 SRAM/ROM。 SoC 的 SROMController 其实就是 SoC 提供的 对外总线式连接 SRAM/ROM 的接口。如果 SoC 要外部外接一些 SRAM/ROM 类的存储芯片或者伪装成 SROM 接口的芯片譬如网卡芯片就要通过 SROM Controller 来连接。网卡接在 SROM 中的好处就是网卡芯片好像一个存储芯片一样被扩展在 SoC 的一个地址空间中主机 SoC 可以直接用一个地址来访问网卡芯片的内部寄存器。 (2) 网卡芯片内部寄存器使用相对地址访问。网卡芯片内部很多寄存器有一个地址这个地址是从 00 开始的但是实际上我们 SoC 不能用 0 地址去访问这个网卡的芯片内部寄存器。SoC 访问网卡芯片 00 寄存器时的地址应该是起始地址 00。 这里的起始地址就是网卡芯片对应接在 SROM bankn 中的 bankn 对应的基地址。 《DM9000AEP.pdf》 (3) 主机 SoC 上网其实就是通过操控网卡芯片内部的寄存器、缓冲区等资源来上网的。也就是说其实 SoC 是通过网卡芯片来间接上网的。 (4) 总结网卡芯片实际上也是一种总线式连接方式。优势是 SoC 内部不需要内置网卡控制器所有的 SFR 全都在外部网卡芯片中而且还可以通过地址直接访问IO与内存统一编址不用像 Nand/SD 接口一样使用时序来访问。 2、原理图浏览 《x210bv3s.pdf》 (1) 210 的 SROM 控制器允许 8/16bit 的接口我们实际使用的是 16 位接口。 (2) 网线有 8 根线但是实际只有 4 根有效通信线另外 4 根都是 GND用来抗干扰的。4 根通信线中负责发送的有 2 根Tx- 和 Tx负责接收的有 2 根Rx 和 Rx-。因为网线上传输的是差分信号。 (3) 网卡芯片有个 CS 引脚CS 就是 chip select片选信号主机向 CS 发送有效信号则从机芯片工作主机向 CS 发送无效信号则从机芯片不工作。这个引脚要接主机 SoC 的片选信号引脚主机 S5PV210 的每一个 SROM bank 中有一个片选信号CSn (n0-5)从原理图可以看出我们 X210 上将 DM9000 的 CS 引脚接到了 CSn1上对应 SROM bank1推断出 DM9000 的总线地址基地址是 0x88000000。 (4) DM9000 的 CMD 引脚接到了 S5PV210 的 ADDR2 引脚上。DM9000 为了减少芯片引脚数数据线和地址线是复用的DATA0 到 DATA15这 16 根线是有时候做数据线传输数据有时候做地址线传输地址的。什么时候做什么用就由 CMD 引脚决定。通过查询数据手册知道当 CMD 为高电平时对应传输是DATA当 CMD 为低电平时对应传输为 INDEXoffset寄存器地址。 注明这些引脚上的电平变化都是控制器自动的不需要程序员手工干预。程序员所需要做的就是在配置寄存器值时充分考虑到硬件电路的接法然后给相应寄存器配置正确的数值即可。 四、网卡驱动移植2 1、网卡驱动文件介绍 (1) uboot 中本来就提供了很多网卡芯片的驱动程序在 uboot/drivers/net/dm9000x.c 和dm9000x.h。 这个驱动来自于 linux kernel 源代码。所以我们 uboot 中是移植而不是编写。 (2) 要想彻底看懂这个驱动必须对 linux 的驱动模型中网络设备驱动有一定的理解才可以。因为我们还没学驱动因此这个源代码就不用看了。 (3) 这个驱动是 linux 内核中做好的根本不用动可以在 uboot 中直接使用的。而且因为 linux 驱动设计的很合理数据和代码是分开的这里驱动主要是代码数据是由硬件开发板中的接法决定的数据由一定的数据结构来提供。所以驱动本身具有可移植性。这个就决定了我们移植 DM9000 驱动时这个驱动文件 dm9000x.c 和 dm9000x.h 不用动要动的是数据。 2、网卡移植的关键初始化 (1) uboot 在第二阶段 init_sequences 中进行了一系列的初始化其中就有网卡芯片的初始化。这个初始化就是关键在这里的初始化中只要将网卡芯片正确的初始化了则网卡芯片就能工作意思是网卡驱动 dm9000x.c 和 dm9000x.h 依赖于这里的初始化而工作。 (2) 网卡初始化代码地方在 start_armbootinit_sequenceboard_initdm9000_pre_init 这个函数就是移植的关键(3) dm9000_pre_init 函数主要功能就是初始化 DM9000 网卡。这个初始化过程和我们开发板上 DM9000 网卡芯片的硬件连接方式有关。必须要结合开发板原理图来分析然后决定这个函数怎么编程。 (4) 原来的代码是三星的工程师根据三星的开发板 SMDKV210 的硬件接法来写的程序我们要根据自己的开发板的硬件接法去修改这个程序让网卡在我们的开发板上能工作。 (5) #define DM9000_16BIT_DATA 这个宏用来表示 DM9000 工作在 16 位总线模式下。根据上节课的硬件原理图的分析可以看到我们开发板上 DM9000 确实工作在 16 位模式下。 (6) 从三星版本的代码中可以看出它操作的是 bit20-bit23 对照数据手册中寄存器定义可以看出三星的开发板 DM9000 是接在 Bank5 上的。而我们接在 bank1 上的因此我们需要操作的 bit 位是 bit4-bit7。 (7) 总结三个寄存器的修改。主要是三星的开发板DM9000接在bank5我们接在了bank1上因此要做一些修改。 3、基地址的配置等 (1) 之前说过驱动分为2部分代码和数据。代码不用动数据要修改。 (2) CONFIG_DM9000_BASE 是 DM9000 网卡通过 SROM bank 映射到 SoC 中地址空间中的地址。这个地址的值取决于硬件接到了哪个 bank这个 bank 的基地址是 SoC 自己定义好的。譬如我们这里接到了 bank1 上bank1 的基地址是 0x88000000. (3) DM9000_IO 表示访问芯片 IO 的基地址直接就是 CONFIG_DM9000_BASEDM9000_DATA 表示我们访问数据时的基地址因为 DM9000 芯片的 CMD 引脚接到了 ADDR2因此这里要 40b100对应 ADDR2。 开发板实践ping 命令成功 实际上只要我们的 CONFIG_DM9000_BASE 和 DM9000_DATA 在 SROMC Bank1 的地址范围内而且区分好 CPU 地址总线的 ADDR2 第二根地址线的为 0 和为 1 的两种情况都是能够正常使用网络通信的。 想了解更详细的 DM9000 的信息可以浏览链接地址 五、网卡驱动如何工作 1、网卡移植代码实践 (1) 经过实践网卡驱动移植成功。 (2) 其实还可以做一些实验。譬如说对网卡驱动初始化部分寄存器的设置还有网卡 CONFIG_DM9000_BASE 也可以配成 0x88000000 再去试一试。 2、linux 系统中网卡驱动的典型工作方式简介 (1) 在 linux 系统中网卡算是一个设备这个设备驱动工作后会生成一个设备名叫ethnn 是0、1、2、····无线网卡名字一般叫 wlan0、wlan1····。然后 linux 系统用一些专用命令来操作网卡譬如 ifconfig 命令。 (2) linux 下的应用程序如何使用网卡驱动来进行网络通信最通用的方法就是 socket 接口。linux 系统中有一系列的 API 和库函数提供了一个 socket 编程接口linux 下的应用程序都是通过 socket 来实现上网的socket 内部就是间接调用的网卡驱动实现网络通信的。 (3) linux 设计是非常完备的应用层和驱动层是严格分离的。也就是说写网络编程应用层的人根本不用管驱动只要会用 socket 接口即可写底层驱动的人根本不用管应用层只要面向 linux 的网络驱动框架模型即可。 3、uboot 中网卡驱动的工作方式简介 (1) 一定要记住uboot 本身是一个裸机程序是一个整体没有分层。所以 uboot 中根本没有驱动和应用的概念。 (2) 按照逻辑来说ping 这样的命令实现的代码就是网络应用的应用程序像dm9000x.c 和 dm9000x.h 这样的代码属于驱动程序。 所以在 uboot 中这些东西是揉在一起的应用是直接调用驱动实现的。也就是说ping 命令内部是直接调用了 dm9000 的网卡驱动中的函数来实现自己的。 4、以 ping 命令为例查找代码验证分析 (1) ping 命令是 uboot 的众多命令之一ping 命令实现的函数叫 do_ping。 (2) 函数的调用关系 do_pingNetLoopPingStartPingSendArpRequesteth_senddm9000x.c中(3) 验证了 《3、uboot 中网卡驱动的工作方式简介》 中说的uboot 中应用程序ping调用驱动程序dm9000x.c的方式。这就是一种直接调用的方式。 六、使用自己移植的 uboot 启动内核 1、问题当前我们移植的 uboot 不能启动内核 (1) 用同样的方法使用 tftp 0x30008000 zImage-qt; 然后 bootm 0x30008000分别使用我们自己移植的 uboot 和使用九鼎移植版本的 uboot 去启动内核发现九鼎移植版本的可以启动但是我们自己移植的不可以启动。到此我们就断定我们的 uboot 有问题不能启动内核。 (2) 做基本检查首先怀疑是机器码不对。经过和九鼎移植版本的 uboot 对比发现machid 都是 2456说明机器码没错。 (3) 想到一个问题我们之前做实验时将串口改为了串口 0而内核 zImage-qt 的串口输出在串口 2.怀疑可能的问题是uboot 使用了串口 0 而内核使用了串口 2所以在 uboot 后看不到内核的启动信息。 2、解决第一步将串口改回串口2 (1) 在 smdkv210single.h 中修改串口编号即可。 3、根据现象分析定位问题并试图解决 (1) 如果已经启动了内核那没什么好说的了。应该是可以直接启动了。 (2) 如何内核没有启动是 smdkv210single.h 中没有定义 bootm 传参需要的那几个宏造成的。 源自朱友鹏老师.
http://www.hkea.cn/news/14512911/

相关文章:

  • 辽阳网站建设学校设计师找灵感的网站
  • 设计感网站有哪些方面上海网站建设 s
  • 邮件设计网站seo优化有哪些
  • 织梦印刷公司网站源码做网站的北京
  • 做临时网站企业年报网上申报系统网址
  • 织梦网站栏目管理wordpress更改ip后登录密码
  • 东营有什么网站建设公司三合一网站建设公司
  • 北京企业网站建设方济南公司网站建设公司哪家好
  • 郴州网站制作公司网页网站建设ppt模板下载
  • 手机好看的网站电子书城网站开发项目概况
  • 网站开发项目名电子商务网站建设的开发流程
  • 国内电商网站跳出率是多少包头移动的网站建设
  • 上海自助建站官网福永响应式网站多少钱
  • 网站项目报价方案做网站的公司 成都
  • dede旅游网站源码免费网页上传网站
  • 遵化建设招标网站网站搭建入门
  • 门户网站开发公司平台寻找哈尔滨网站建设
  • 营销网站的主题 定位 修改建议软件工程师报考条件
  • 广东建设监理网站wordpress 弹出搜索框
  • 网站建设实训报告要求网页视觉设计是什么
  • 网站网页设计培训班如何自建网站做外贸
  • 淘宝上成都网站建设视频类网站开发经验
  • 自学网站设计与建设深圳网页设计兴田德润放心
  • 网站建设的行业新闻wordpress 无广告视频插件下载
  • 如何提高网站seo排名本地wordpress安装
  • 友情链接中有个网站域名过期了会影响南阳做网站价格
  • 有私人做网站的吗代加工手工活外发免费 来料加工
  • 网站改版对优化的影响企业展厅设计哪里好
  • 云畅网站建设后台wordpress 主题 响应式
  • 工厂的网站在哪里做的h5免费制作网站有哪些