免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 19497 | 回复: 14
打印 上一主题 下一主题

[操作系统] 改嵌入式linux的mac地址--基于uboot参数区 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-25 10:41 |只看该作者 |倒序浏览
大家好,请教个问题,目前我要改嵌入式linux的mac地址,情况是这样的:

我们目前设置mac地址是通过uboot环境设置,然后传递给内核设置系统mac地址的,我的理解是这个mac地址应该是保存到了uboot的参数区里,现在我要实现的功能是,客户通过pc客户端设置设备的mac地址,我在设备linux运行的情况下设定系统的mac地址,初步计划是这样的:open /dev/mtd1, read全部数据出来,然后解析出目前的mac地址,然后改成客户端设置的mac,然后回写mtd1,

现在的难题是,在read出来的数据中,该如何定位mac的位置,哪些数据是mac的数据,这种方法可行吗,

我的flash分区是这样的:
# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00080000 00004000 "bootloader"
mtd1: 00180000 00004000 "params"   (应该是uboot的参数区)
mtd2: 00200000 00004000 "kernel"
mtd3: 01800000 00004000 "filesystem1"
mtd4: 00400000 00004000 "filesystem2"

论坛徽章:
0
2 [报告]
发表于 2011-06-27 13:33 |只看该作者
回复 1# pxebxp


    你这个方法可行是可行,不过比较麻烦。你要通过字符串解析,把mac地址解析出来,我后来想了另外一种方法来实现的,如果想具体了解我怎么做的,可以加我qq:1007753241再谈细节

论坛徽章:
0
3 [报告]
发表于 2011-06-27 15:30 |只看该作者
回复 2# chenrvmldd


    兄弟,你的qq认证信息是:“我的真实姓名是什么”,我如何回答。

论坛徽章:
0
4 [报告]
发表于 2011-06-28 09:13 |只看该作者
你告诉我你的qq:我加你啊!

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
5 [报告]
发表于 2011-06-28 09:14 |只看该作者
能不能在这里说呢?别弄得那么神秘嘛

论坛徽章:
0
6 [报告]
发表于 2011-06-28 09:33 |只看该作者
本帖最后由 T-Bagwell 于 2011-06-28 09:52 编辑

回复 5# T-Bagwell
我现在有两种做法:
第一种做法:通过cmdline的方式:因为在Linux起来的时候我们可以通过cat /proc/cmdline查看uboot传递给内核的一些参数,我们可以将mac地址的信息放入到cmdline中传递过来,到时候在内核里面直接解析,这个比较方便

第二种做法:将 mac地址以固定的格式比如:‘m’,'a','c',"xx:xx:xx:xx:xx:xx"这样的形式写入到比如nvram的固定的位置,然后内核初始化的时候每次都可以从nvram固定的地址去读mac地址的内容然后去设置。
方法一的好处就是,不需要占用nvram的空间,直接通过cmdline传递,缺点是:在内核中解析mac参数稍微麻烦一点
方法的好处:直观,内核中解析起来方便,缺点:需要占用nvram的空间,因为一般nvram只有1M左右,空间很宝贵

评分

参与人数 1可用积分 +10 收起 理由
T-Bagwell + 10 精品文章

查看全部评分

论坛徽章:
0
7 [报告]
发表于 2011-06-28 15:13 |只看该作者
回复 4# chenrvmldd


    我的qq是:504444896.谢谢你的支持。

论坛徽章:
0
8 [报告]
发表于 2011-06-28 15:38 |只看该作者
本帖最后由 T-Bagwell 于 2011-06-28 16:05 编辑

回复 6# chenrvmldd


我现在有两种做法:
第一种做法:通过cmdline的方式:因为在Linux起来的时候我们可以通过cat /proc/cmdline查看uboot传递给内核的一些参数,我们可以将mac地址的信息放入到cmdline中传递过来,到时候在内核里面直接解析,这个比较方便

这个如何实现,客户是通过pc机设置嵌入式linux的mac地址,当在嵌入式linux这边接收到客户设置过来的mac地址信息,我该放到哪里,“我们可以将mac地址的信息放入到cmdline中传递过来”,这里的cmdline具体在什么位置,可写吗,重启后,能保存吗,我的文件系统是cramefs,

第二种做法:将 mac地址以固定的格式比如:‘m’,'a','c',"xx:xx:xx:xx:xx:xx"这样的形式写入到比如nvram的固定的位置,然后内核初始化的时候每次都可以从nvram固定的地址去读mac地址的内容然后去设置。
方法一的好处就是,不需要占用nvram的空间,直接通过cmdline传递,缺点是:在内核中解析mac参数稍微麻烦一点
方法的好处:直观,内核中解析起来方便,缺点:需要占用nvram的空间,因为一般nvram只有1M左右,空间很宝贵

这种方式,空间对我来说不是问题,因为我用的是nand flash,还有10几M的空间可用,用此方法,要改内核,并且还要兼容当客户从uboot界面设置mac时也有效,这个可行性不大。并且,把mac地址信息放到nand flash的常用分区,感觉不太安全,随时都有可能被用户rm掉。

论坛徽章:
0
9 [报告]
发表于 2011-06-28 16:06 |只看该作者
还有个问题,在uboot环境下,在我们saveenv参数时,怎么知道它把参数保存到哪里了,我就想过看uboot的源码,知道uboot在保存自己的参数区时,保存到哪里了,保存到那个分区了,还是只是某个分区的一部分。

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
10 [报告]
发表于 2011-06-28 16:06 |只看该作者
为了防止出现表情,回帖时可以选上 禁用Smilies
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP