目前在做Hi3515平台监控项目,前期开发一直使用SDK里推荐的mount nfs方式来调试代码,虽然也算方便,但是我一直觉得用法NFS-ROOT才是最省事的方法,而且最接近最终用户使用环境,因为如果NFS-ROOT调试完成后,就直接可以出firmware了.

由于SDK几乎将所有用到的驱动都独立编译成了ko文件,所以为了将驱动编译到内核中,还是需要做一番工作的,由于初次接触内核和驱动,所以很多东西都是刚了解的。通过不断的试错和调试,终于搞定了网卡驱动和NFS-ROOT的支持。

若想内核支持NFS-ROOT,主要是两个方面的功能配置,一是ethernet,让网卡在内核运行时驱动自动加载,这样才不会导致eth0找不到的情况,而是nfs内核中的相关配置选项。

step 0. 复制使用到的config配置文件

cp arch/arm/configs/hi3515v100_full_release_defconfig .config

step 1.在内核代码中增加网卡驱动

step 1.0 在驱动目录下增加hiether文件夹,用来存放hi3515的网卡驱动

mkdir linux-2.6.24/drivers/net/hiether

step 1.1 复制已有的网卡驱动到新添加的文件夹中

cp Hi3515_SDK_V1.0.5.0.c1/source/drv/hi3515v100-sfv300 linux-2.6.24/drivers/net/hiether

step 1.2 修改驱动文件夹中的代码

由于原有驱动是用来编译为独立的ko文件的,所以里面的部分函数使用了__exit标志,用来表示只用来作为模块退出使用的函数,如果不将次函数的__exit标志去掉,在编译内核的时候会打印

“ `.exit.text’ referenced in section `.init.text’ of drivers/built-in.o: defined in discarded section `.exit.text’ of drivers/built-in.o`.exit.text’ referenced in section `.data’ of drivers/built-in.o: defined in discarded section `.exit.text’
of drivers/built-in.o`.exit.text’ referenced in section `.data’ of drivers/built-in.o: defined in discarded section `.exit.text’ of drivers/built-in.omake: *** [.tmp_vmlinux1] 错误 1”

简单的将__exit标志去掉,就能顺利通过编译了。

step 1.3 增加菜单选项

要想通过menuconfig来选择是否选择hiether驱动,要做一下修改:

step 1.3.0 修改Kconfig文件

在net/Kconfig中config DM9000下面的位置增加下面内容

config DM9000

tristate “DM9000 support”

depends on ARM || BLACKFIN || MIPS

select CRC32

select MII

—help—

Support for DM9000 chipset.

To compile this driver as a module, choose M here.  The module

will be called dm9000.

config HIETHER

tristate “HIETHER support”

—help—

step 1.3.1 修改net/Makefile,增加需要编译的文件夹

obj-$(CONFIG_HIETHER) += hiether/

step 1.3.2 在hiether文件夹中增加Makefile文件,内容如下

obj-$(CONFIG_HIETHER) += hiether.o

hiether-objs := mdio.o mii-drv.o mac.o ctrl.o glb.o net-drv.o mm.o sys.o proc.o

step 1.3.3 make menuconfig 选择新增加的驱动

[*] Network device support  —>  [*]   Ethernet (10 or 100Mbit)  —> <*>   hiether support

step 2. 内核增加对NFS-ROOT的支持

Networking  —>Networking options  —>[*]   IP: kernel level autoconfiguration

[*]     IP: DHCP support

[*]     IP: BOOTP support

[*]     IP: RARP support

File systems  —> [*] Network File Systems  —> <*>   NFS file system support

[*]     Allow direct I/O on NFS files

[*]   Root file system on NFS

[*]   Support for rpcbind versions 3 & 4 (EXPERIMENTAL)

step 3.重新编译内核

make; make uImage

step4. 测试

宿主机要安装nfs,tftp,这些网上教程很多,这里就不罗嗦了

启动参数setenv bootargs busclk=220000000 mem=64M console=ttyAMA0,115200 root=/dev/nfs rw nfsroot=192.168.6.141:/tftpboot/hi3515.filesys, nolock eth=00:1e:9a:04:5c:4d ip=192.168.6.143:192.168.6.100:192.168.6.254:255.255.255.0:tocore:eth0:off pcimod=host
pciclksel=1

下载最新内核并运行

tftp 0xc1000000 uImage; bootm 0xc1000000

—————————启动打印信息————————————————–

IP-Config: Complete:

device=eth0, addr=192.168.6.143, mask=255.255.255.0, gw=192.168.6.254,

host=tocore, domain=, nis-domain=(none),

bootserver=192.168.6.100, rootserver=192.168.6.141, rootpath=

Looking up port of RPC 100003/2 on 192.168.6.141

PHY: 0:01 – Link is Up – 100/Full

Looking up port of RPC 100005/1 on 192.168.6.141

VFS: Mounted root (nfs filesystem).

Freeing init memory: 112K

Hi3515支持NFS-ROOT启动的更多相关文章

  1. NFS无法启动解决方式

    今天一台挂载nfs磁盘的服务器出现异常,数据不能写入,执行 df -h 卡住不动. 登录nfs server查看发现nfs为启动. [root@server10-13 web]# exportfs [ ...

  2. centos7也支持service命令启动服务吗,对于centos7 中的systemctl和旧的service命令的区别和联系

    一.centos7也支持service命令启动服务吗 CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服 ...

  3. NFS挂载启动

    NFS挂载启动参数: 1.服务器IP.目录(虚拟机IP和 NFS目录) 2.开发的IP 如下我的开发板设置 ipaddr=192.168.1.17           ① 开发板IP serverip ...

  4. 让.Net程序支持命令行启动

    很多时候,我们需要让程序支持命令行启动,这个时候则需要一个命令行解析器,由于.Net BCL并没有内置命令行解析库,因此需要我们自己实现一个.对于简单的参数来说,自己写一个字符串比较函数来分析args ...

  5. 自windows8以后,所有版本(专业版、企业版、旗舰版)都支持从 vhd 启动

    而在windows 7 中,只有:企业版.旗舰版: 支持 从 vhd 启动!

  6. Linux NFS Root and PXE-Boot

    Linux NFS Root and PXE-Boot November 6, 2006 Home· Linux Linux kernel hacking and test running on th ...

  7. elasticsearch不能使用root启动问题解决

    问题: es安装好之后,使用root启动会报错:can not run elasticsearch as root [root@iZbp1bb2egi7w0ueys548pZ bin]# ./elas ...

  8. 以root启动pycharm

    在使用scapy模块的时候提示permitted就猜想可能是权限问题.然后换成root启动啥事情都没了. 由于本机是deepin先找到pycharm.sh脚本 然后再执行sudo ./pycharm. ...

  9. nfs 客户端启动报错rpc.mountd: svc_tli_create: could not open connection for tcp6

    # /etc/init.d/nfs start Starting NFS services: [ OK ] Starting NFS mountd: rpc.mountd: svc_tli_creat ...

随机推荐

  1. MonogoDB 查询小结

    MonogoDB是一种NoSQL数据库 优点: 1.数据的存储以json的文档进行存储(面向文档存储) 2.聚合框架查询速度快 3.高效存储二进制大对象 缺点: 1.不支持事务 2.文件存储空间占用过 ...

  2. 架设rsync服务器同步数据

    什么是rsync rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用.本文主要讲述的是如何自架rsync服 务器,以实现文件传输.备 ...

  3. wxpython发布还自己图标的程序

    在py2exe安装脚本文件中,修改代码: setup( windows=[ { 'script': 'myapp.py', 'icon_resources': [(1, 'myicon.ico')] ...

  4. SpringMVC源码情操陶冶-DispatcherServlet类简析(一)

    阅读源码有利于陶冶情操,此文承接前文SpringMVC源码情操陶冶-DispatcherServlet父类简析 注意:springmvc初始化其他内容,其对应的配置文件已被加载至beanFactory ...

  5. java对象序列化、反序列化

    平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...

  6. 有标号DAG计数 [容斥原理 子集反演 组合数学 fft]

    有标号DAG计数 题目在COGS上 [HZOI 2015]有标号的DAG计数 I [HZOI 2015] 有标号的DAG计数 II [HZOI 2015]有标号的DAG计数 III I 求n个点的DA ...

  7. codeM美团编程大赛初赛B轮E题

    题目描述 给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101.现在对于给定的n和字 ...

  8. WPF项目学习.一

    WPF项目搭建 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案. 使用MVVM的优点是 数据和视图分离,双向绑定,低耦合,可重用行,相对独立 ...

  9. Angular4---部署---Angular 与 Nginx的邂逅

    Nginx + Angular结合操作 1.下载Nginx , 根据自己的版本下载Nginx,关于Nginx配置,请看https://www.cnblogs.com/MBirds/p/6605366. ...

  10. python爬虫登录

    python3 urllib.request 网络请求操作 http://www.cnblogs.com/cocoajin/p/3679821.html python实现 爬取twitter用户姓名 ...