背景:

  机械硬盘需要12V 5V电源,此前设计是硬件电路默认5V有效、12V无效,然后系统通过驱动上12V电,对磁盘来说相当于先上5V后上12V,这种方式对大部分磁盘是可以的,但对于日立 HGST磁盘,冷启动(或未使能12V后reboot,使能12V后reboot会由于12V 5V都使能,重启(热启动)后会正确probe磁盘),系统在扫描磁盘时(执行initramfs中的init脚本中的`udevadm settle`)会检测到磁盘,但是由于12V未上,所以导致probe磁盘失败,由于驱动会循环四次probe磁盘(考虑到磁盘可能没准备好,所以多尝试几次),所以会由此导致系统启动过慢,这说明此类磁盘需要先上12V 然后再上5V或同时上电。

解决:

  由于扫描磁盘是在initramfs中进行的,所以需要在扫描之前先关掉5V 然后使能12V 再打开5V,然后再扫描。

  initramfs文件是由cpio打包gzip压缩的文件,先修改后缀后解压:

  # mv initramfs-2.6.32-431.20.3.el6.x86_64.img initramfs-2.6.32-431.20.3.el6.x86_64.gz

  # gunzip initramfs-2.6.32-431.20.3.el6.x86_64.gz

  # cpio -id initramfs-2.6.32-431.20.3.el6.x86_64

  首先将关5V和开12V的驱动tca6416-nosh-low.ko、slotpower.ko及其依赖的i2c控制器驱动i2c-i801.ko放入解包后产生的lib/modules/2.6.32-431.20.3.el6.x86_64下面任意目录下,然后运行`depmod -b .`(扫描当前lib/modules/`uname -r`目录,非系统的此类目录;然后生成所有此目录下驱动的依赖等信息,并保存在此目录下modules.dep等文件中),然后在init文件的while循环中、udevsettle语句之前加入:

  SYSFS_GPIO="/sys/class/gpio"
  while :; do
  echo "before modprobe"
  modprobe i2c_i801
  modprobe tca6416_nosh_low
  modprobe slotpower

  [ -d $SYSFS_GPIO ] && { \
  for gpio in `ls -d ${SYSFS_GPIO}/gpio[0-9]*`
  do
    echo 1 > ${gpio}/value
  done
  }

  注意:modprobe是通过modules.dep文件来获取加载驱动的位置的;用modprobe加载驱动只能写驱动的名字不能加.ko后缀,否则会提示找不到驱动;另外,modprobe不区分驱动文件名中的“-”和“_”;如上。

  保存init文件后打包压缩当前目录,生成initramfs文件,并替换系统/boot目录下相应的initramfs文件后重启:

  # find . | cpio -co | gzip -c > ../initramfs.cpio.gz

  # mv ../initramfs.cpio.gz /boot/initramfs-2.6.32-431.20.3.el6.x86_64.img

  # reboot

最新文章

  1. Matlab 绘制三维立体图(以地质异常体为例)
  2. day21
  3. OC 类簇与复合
  4. jsp考试的错题
  5. JavaScript-hash数组for in 函数
  6. JavaScript: Advanced
  7. php获取客户端浏览器以及操作系统信息的方法
  8. linux 系统优化
  9. 【英语】Bingo口语笔记(35) - 常见单词结尾发音
  10. Selenium用户扩展
  11. 了解OData(一)
  12. 一个部署了tomcat服务的linux服务器,运行一段时间后出现内存和空间不足的问题
  13. Configuring WS-Security UsernameToken and WS-SecureConversation (Symmetric Connection Creation)
  14. RHEL64 缺少ISO 9660图像 安装程序试图挂载映像#1,在硬盘上无法找到该映像
  15. springboot~configserver里对重要信息进行RSA加密
  16. expdp/impdp使用
  17. spring cloud分布式配置中心案例
  18. Android SQL数据库应用实践 “问题点”“疑难点”“解析”
  19. JSP是一种语言
  20. window下mysql创建库只读

热门文章

  1. Java简明教程 12.多线程(multithreading)
  2. css的fix高度缺失
  3. 汽车加油行驶(cogs 737)
  4. 页面get post等查看
  5. C# WebHTTPUtil工具类
  6. Eclipse配置关联Tomcat并运行项目
  7. 语法错误: 标识符“__RPC__out_xcount_part” 解决方法
  8. Scala 封装可break和continue的foreach循环
  9. 静态变量(static)的特点
  10. LeetCode OJ-- Add Binary