3983|3

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

grub-0.97 文件写操作函数的实现(grub_write) [复制链接]

各位好:
    最近在 x86下进行单板引导的开发,在此过程中 遇到了一点问题 希望与大家共同探讨一下;
    1 单板上电后 首先读取 单板上EEPROM中存储的启动信息;
    2 使用grub-0.97 的grub_read 函数读配置文件 menu.lst;(实际调用的是 当前文件系统格式的读函数.eg: ext2fs_read)
     if(相同)  
         从配置文件启动单板;
      else
        改写 grub-0.97的配置文件,将从EEPROM中的启动信息 写入到 menu.lst中。

问题一 : grub-0.97 本身没有 grub_write 函数,只包含 devwrite/rawwrite。按照 grub_read 的实现流程 我改写了 grub_read 实现了 grub_write. 改动的地方不多 (A)将grub_read 中的  disk_read_func = disk_read_hook;
                                                          disk_read_hook = NULL;          给屏蔽掉.  
                                         (B) 将 grub_read 中的  devread  按照 devwrite 函数的格式 修改
                                                     成 devwrite 。                          
         
        改写结果: 文件能够正常进行写操作,并且 写操作 正确无误。但是 操作完 文件后,单板确不能正常启动,内核与跟文件系统不能正常启动。经过测试发现 grub_write 函数似乎将启动分区的扇区写坏;
         
          是否 是调用devwrite 函数时出现了某种错误?—是否写入时的偏移有问题?< 希望大家能给点意见 >

问题二:  grub_write 函数实现的过程中,如果不屏蔽掉   disk_read_func = disk_read_hook;
                                                 disk_read_hook = NULL       而是将其改写成
          disk_write_hook. 时需要从新实现disk_write_func函数。这个函数可以仿照 disk_read_save..._func() 函数实现。   
          但是 似乎还会出现问题一的情况。


      如果以上问题得以解决,则可以在开源的 grub-0.97 中加入自己的grub_write函数了。希望有兴趣的朋友 能帮我分析一下原因,共同进步。
      谢谢~      


     

最新回复

这个绝对不可能。如果有这个需求的话,源码维护者早就加进去了...  详情 回复 发表于 2009-5-16 11:13
点赞 关注

回复
举报

49

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
有点晕,似乎还是写文件错误。

grub启动的时候文件系统是否已经建立,这个时候如何去修改 menu.lst(/boot/grub/grub.conf)

disk_read... disk_write...是文件系统的操作吗?
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
配置文件 men.lst 确实修改成功了,但是经测试发现 内核被破坏了. 应该是写文件造成的.
disk_read/disk_write 不是文件系统的操作,是直接对 disk(硬盘)的操作.grub命令行中的setup 就是将内核与根文件系统安装到指定位置(disk).
现在很困惑,感觉还是写文件的位置不对. 不知道怎么解决.
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用楼主 christain 的帖子:
如果以上问题得以解决,则可以在开源的 grub-0.97 中加入自己的grub_write函数


这个绝对不可能。如果有这个需求的话,源码维护者早就加进去了...
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表