「稻草」Strawing

对方拒绝了你的代码并向你抛了一个异常

« FreeBSD折腾小记在Android手机上运行ROS驱动机器人 »

利用树莓派SPI刷BIOS Flash(W25Q64)

某同学的笔记本(ASUS K56CM),BIOS里面Restore Default以后保存退出
然后就不亮了
不亮了

玩了这么多年电脑,折腾过这么多主板,还真没见过BIOS Restore Default会死的
莫非这个BIOS自带炸弹? (逃
于是乎开始寻思怎么刷BIOS
首先主板上找到这BIOS的Flash是Winbond W25Q64
Google之,这芯片支持SPI协议读写
小时候刷过BIOS,玩过编程器
可是编程器在家里,没带来学校,我也很无奈啊
上淘宝?
淘宝得3天,也就是说3天没电脑用。
他可等不急。
咦不就是SPI嘛,瞄向身边的东西
单片机?算了吧,折腾太辛苦,速度太慢。
咦树莓派不是有SPI吗?
随手Google(这个网站不存在的)百度了一下Raspberry Pi W25Q64
沃!德!天!有!人!写!了!驱!动!https://github.com/nopnop2002/Raspberry-W25Q64
看到了希望,焊上线。直接飞线,连把芯片吹下来都省了。

测试了一下驱动,能读能写,没毛病
于是Google了一下ASUS K56CM BIOS,下到了一个完整的8MB的BIOS镜像(感谢提供的那位大哥)
然后呢根据那个驱动提供的涵数,YY写了一个读入8MB BINARY文件并写进去的程序。(大概就是写了三个FOR,只做了一点微小的贡献,谢谢大家)

  FILE *fp;
  int  nVal;
  fp = fopen("/home/pi/K56CM.BIN", "r");
  int shanqui = 1;
  int alli = 1;
  for(alli = 1;alli<=2048;alli++){
      n = W25Q64_eraseSector(alli-1,true);
      printf("Erase Sector(%d): n=%d\n",alli-1,n);




    for(shanqui = 1;shanqui<=32;shanqui++){
  int fuckingi = 1;
  for(fuckingi = 1;fuckingi <= 128;fuckingi++){
      nVal = 0;
      fread(&nVal, 1, 1, fp);
            fseek(fp,(((alli*4096)+(shanqui*128)-128)-4096)+fuckingi,SEEK_SET);
            wdata[fuckingi-1]=nVal;
      printf("%02X", wdata[fuckingi-1]);
        }
        n =  W25Q64_pageWrite(alli-1, (shanqui*128)-128, wdata, 128);
        printf("page_write(%d,%d,d,128): n=%d\n",alli-1,(shanqui*128)-128,n);

程序写得乱且不太文明 (逃,各位小妹妹写程序时不要学我这个怪叔叔
走起

看着 Konsole Console 一行行地跳动 简直爽过吸大麻(说得好像我吸过一样)
爽过XXO%^#%^!#%~$#$#%^(*&(*^.....
噢对了提醒下各位小伙伴,华硕K56CM这个BIOS序列号在偏移00230000(十六进制)处,如图

拆线上电

屏幕亮的一瞬间真的爽过吸大麻

改过的程序(写入8MB Binary)放到Github上了,大家只要git clone就能用了
https://github.com/liyafe1997/Raspberry-W25Q64-Write-Binary

本文地址:https://www.liyanfeng.com/post/118.html(如转载,需注明本原文地址)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索

网站分类

最近发表

推广内容

标签(Tags)

最新评论及回复

文章归档

Powered By Z-Blog 1.8 Walle Build 100427 Designed by Han'space

Blog by Yanfeng Lee(liyafe1997)@Daocao .[Archiver].

本博客采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可,转载本站内容即代表您同意了本协议,必须署名-非商业使用-禁止演绎。