在thinkpad X200 上配置多payload 的libreboot 自由固件

在thinkpad X200 上配置多payload 的libreboot 自由固件

在 ThinkPad X200 上配置多 Payload " Libreboot #$%& Configuring Multi-Payload Libreboot Free-as-in-Freedom Firmware on ThinkPad X200 1 | 34 Junde Yhi <[email protected]> Li)*eboo+ , Co*eboo+ "./ ● Li)*e)oo+– 0 -o*e)oo+ "123456 -o*eboo+ 7894: (i)*eboo+ ;<94 – (ibreboo+ 0=> Blobs " -o*eboo+ ● Blob @ABCD"EFGH& – IDJ%&JKK – L0MNO上操Q"0 -o*eboo+ ● RS ThinkVad W'00 XYZ[\]^B Blob _`"3a:bcde -o*eboo+ f g0#$" ● hijklm1n– (ibreboo+ opq: -o*eboo+ \ropq – sise ve*sa ' | 34 Junde Yhi <[email protected]> Li)eralized Co*e)oo+ ● -oreboo+– 012uvw"%&/x yz{|: -ore)oo+ ^}4~且仅}4)硬&初始w – {| -ore)oo+ ^把}4权交给 Vayload ● Vayload 02 E(F 可执行H& ● Sea?IOS (?IOS), Tiano-ore (UEFI), GRU?' (?), … – Vayload 再启8PQ/x或引导器 ● $S GRU?' Z身就是个引导器,所以可以搞¡PQ – ¢>£8器上¤¥"引导器 – F¦_§¤¨©:ª«¬­¨®_¯ – g0推荐"q² 3 | 34 Junde Yhi <[email protected]> Vayload ● (主)– Vayload 负责引导 1¶1次启8¸¹12~º»也可以通过别的组合实Á! Vayload ) ● SeaBIOS 012 1 à x8 ?IOS "yCNÁ – ÅÆS QEÈU / ÊsÈ ● TianoCore 012 UEFI "yCNÁ – 甚至可以在ZAB UEFI " ThinkPad W'00 上使用 UEFI ● GRU?' 0 GÏU 著名的一款PQ/x~?) – 与安装在硬盘上的 GRUB2 体验完全1n – 缺点: ● 配置文件也得被写在固件里 ● 可能要使用一些高超的配置技术[尽量减少未来的刷写·ë 4 | 34 Junde Yhi <[email protected]> Vayload ● Co*e)oo+ 还集成了些比较有趣" Vayload "支持 – Bayou 02 Vayload 选择器,可以在每次启8"时候选择需要" ~³) Vayload ● ùm"0X2 Vayload 好像已经不维护了,不工Q – LinuxBoot b接把 (inux 内核塞到%件里去 ● Î Uexec 引导 – 或者也可以直接指<12普¼内核~%&空间够大"话) – Open Firmware FILO iPXE , , , … ● SeaBIOS TianoCore 要使Î Windows "话:¹择 或 – 理论上应该是可以的~¼½一些I小"修改) – NO上我并AB成功启动过Mz器上的 Windows 7 5 | 34 Junde Yhi <[email protected]> Su)payload ● Subpayload 1般执行除了引导以外"任务 – nvramcui ÎS修改 -ÈOS 参ë供运4时调 Co*e)oo+ ● @ ?IOS ¹! – coreinfo ÎS"#z器$% ● -VU 参ëJ内&参ëJ%&$%' – memtest86+ ÎS()内& ● X2 Su)payload ¸能在 sG* Tex+ Mode +ÍÎ~,后再-) – tint 012./01v23~?) ● Subpayload 4 Vayload 所56调用 (chainloader) – SeaBIOS 启8时7 Esc 可89 Su)payload – GRUB2 ¼½配 H&或:;}4 Su)payload  | 34 Junde Yhi <[email protected]> Mq½"实验 ● < (i)*e)oo+ 给 -o*e)oo+ J SeaBIOS '=">?: Re)ase 到 mas+e* ● @– YA)配置, Vayload "¿合( 50B 次) 集成 SeaBIOS / #4de SeaBIOS – 集成 TianoCo*e / #4de TianoCo*e – 集成 GRU?' / #4de GRU?' ● M可r0ªñùm"– C2 M"z器在一些配 +^bc]ryz~DE]F) ● Ë至没G²=y调) – M"z器在任何配 +IJ启动K^Lz 7 | 34 Junde Yhi <[email protected]> 石牌村人民医院 MN(硬件) 本机会诊号 2019060114 ● ThinkVad– X200 1a W'00s , W'00+ O]1<(而且P得比较QR) – X0©rSú"1款支持 (i)*eboo+ 的机器了(TU还有 WÂ0 ) ● Intel -o*e ' Vuo (Venryn) @ '.'ÂGWz X '.ÂÂGWz, 3È? (' ● YZ[– dY器 \ 可以0y9]" SPI c^~ linux_spi ) – g可以是`ab大cdef~ ch341a_spi ) ● ghi– ~ SOI-jÄ 或 SOI-j16 ) 推(: ● k *ÈT ~lmn³8管理技术)的机器ÍÎ SOI-j1 pq~ ÄÈiB / Â4Èi) ) ● ]k *ÈT 的机器ÍÎ SOI-jÄ pq~ 4ÈiB / 3'Èi) ) \ V*or*amme* Ä | 34 Junde Yhi <[email protected]> MN~s件) ● Li)*e)oo+– CD1t (i)*eboo+ CD¸Buv/x,>?:NOwDKx上2 checUou+ – ~小声) (i)*eboo+ yz改F"uv/xB够难Î ● 6持– GÏ*T (G-- *da) "de器 ÎSde -oreboo+ "工|5~ G-- *da #}) – -oreboo+ ¸支持#~"工|5配置 ● g可以让 -o*eboo+ 在任意工|5上de:L0不推± – $S *OS- OS " G-- ]6持 *da :所以并]rÎ :) ● 可以 deboo+s+*ap 12 Vebian / U)un+u ● 完 s&依赖MB时间完善脚Z{|^放出[ ● flashrom 9 | 34 Junde Yhi <[email protected]> 更新 Embedded Cont*oller (EC) ● ThinkVad X200 出厂%&" E- 版Z号在 1.0 – 1.07 E- %&“修改了电池充电算²以3衡电池"充电,寿命” – E- ]yC:L0$S E- >了控GAB别的Î处:暂且\]o了 ● 更J E- ,官1 ?IOS "¤¥YZø要使Î Windows 1 à 环境 – 因此 Â4 à Windows ]r¤¥%&更J~]6持 1 Ã运4时) ● \算联想提供了 Â4 ä¥YZg0«此 ● ê写 -o*eboo+ {|\AB更J E- "渠¡了 – 因此在ê -o*e)oo+ {U¢得£更J E- 10 | 34 Junde Yhi <[email protected]> Nt原厂 BIOS ● N份原厂 BIOS r让¥ê¦{|§¨©ª ● flashrom -p <driver> -c MX25L6405D -r <file> – 以上操作执行«次,以¬dY器不稳定导致输出错误 ● 并算ú哈希值:³´1n ● 将Xt ?IOS ê¶z器就可以©复出厂%& – ·¸k" -ÈOS 配置和 RT- ^¹¦:]½无伤大雅 11 | 34 Junde Yhi <[email protected]> ½< Li)*eboo+ ● (ib*e)oo+ EFG59Æ其官网列出镜û – Á至ÂUSJ"版Z0 '01Â0907 – R ThinUVad W'00 ¸B GRU? 可供选择 ● CD – https://notabug.org/libreboot/libreboot.git ● (ib*e)oo+ ~J)的uv/x¬"{Î – ûÄÅyz#己改进了 Co*e)oo+ "uv16 – Xg04Æp (i)*e)oo+ "SJ版ZgÇÅÈ:ÄÅ希望在完 成uv/x改F之后再发行新版Z 1' | 34 Junde Yhi <[email protected]> MN环境 ● debootstrap <codename> <sysroot> <mirror> – ·N只要有k *da 6持的 G-- 就可以了 – 完 "依赖¿Ê还没 理出[ – chroot »| ● F` (ib*eboo+ Âh+ËCD – ./libreboot download coreboot – ./libreboot download ich9gen ~,|介绍) – ./libreboot download vboot – 以上!Â^被自8 checUou+ =>?:放在 sou*ces Âh¸ 13 | 34 Junde Yhi <[email protected]> £4de ● Î<"工|5 – cd sources/coreboot – make crossgcc-i386 ● «Ï要编译 Tiano-o*e :Cp amdÂ4 工具5g0ø要 make crossgcc-x64 的: – make iasl ~ *CPI d译器) – make CPUS=# 在 |ÍÎ =y并4de – make DEST=<path> 在 |ÍÎ ¤¥到指<Âh 14 | 34 Junde Yhi <[email protected]> £4de ● ich9gen – (i)*e)oo+ !Â:Ç -o*eboo+ ! – Ð成 ICW9 pq¿初始化需要的U 1' Êi? 字段 ● ROÈ 布局~%件)描述符 ● ]载网卡初始化wD – 根据 (i)*e)oo+ :X1段jZ上0空" ● 清空" Intel Èanarement Enrine (In+el ÈE) – ¼½在%&描述符¸=>X1区域q到 – 注意把板载网卡厂家指派" È*- 地址写到 projects/ich9gen/configs/macaddress H&¸ ● ã则板载网卡将kB (ib*e)oo+ 默认" È*- 地址 – 1¶情况+èé]大:L01êë1a交换z+Bha (i)*e)oo+ z器…K ● 1般在机器底部B白色标签写出:g可以使用其它PQ/x£#1# 15 | 34 Junde Yhi <[email protected]> ich9ren ● ./libreboot build ich9gen – X1½程将Ð成«2 1' KiB J«2 4 KiB "EFGH&: ● ich9fdgbe_{4,8,16}m.bin 12 KiB → ● ich9fdnogbe_{4,8,16}m.bin 4 KiB → – 根据芯qõ量大小:¹择合适"%&描述符 ● build/ich9gen 在 里 ● ich9fdgbe_8m.bin «M" W'00 ÍÎ SOI-j1 " ÄÈiB 闪存:O¹Î – k]Ë网卡" ThinUVad X200 ]rÍÎ nor)e 描述符 ● ø{\0]ryz ● nogbe 是给没有板载网卡" I-W9 机器用的 1 | 34 Junde Yhi <[email protected]> ùj (Rebase) ● $S (ib*eboo+ checUou+ "wDúºÈ:MÅ可能希望ÍÎS J" -o*eboo+ Q4jM ● ùjPQ¸B]è冲突,需要手8解决 ● Lib*e)oo+ ">?主要去除了@3a"ID'没有可审计CwD "部&:并且避¢ -o*eboo+ uv/x#8½< (ib*eboo+ 另4 Ve)lo) ½"! – »¦:$S ThinUVad X200 3a本身\]ø要 ?lo) 可以uv:X 1P作可能0!余"KK 17 | 34 Junde Yhi <[email protected]> 配置 (Liberalized) Co*e)oo+ ● cd sources/coreboot && make menuconfig – Êconfir ~, (inux 内核配 ÍÎúë"/x) ● Gene*al Se+up – CBFS prefix to use ● õ2 Vayload K&在 -?FS " <p*efix>/payload + ● 默认_Ë fall)ack/payload :L0X1²需要在 -MOS 运行时配置¸给 出,所以仅更改X1!会导致 -o*e)oo+ 找]到 Vayload ~MAB)½正 确地改8 p*efix ) – Add a bootsplash image 可以46持启8画面" Vayload _ `启动画面 ● Sea?IOS J Tiano-o*e , GRU?' K支持 1Ä | 34 Junde Yhi <[email protected]> 启动画面 (SeaBIOS) 19 | 34 Junde Yhi <[email protected]> 配置 (Liberalized) Co*e)oo+ ● Mainboard – Mainboard vendor Lenovo 选择 – Mainboard model ThinkPad X200 / X200t 选择 – ROM chip size 8 MB ¹择合适大小~M"0 ) – Size of CBFS filesystem in ROM: 0x7FD000 ● @ Ä ÈiB − 1' Êi? = Ä1Ä0 Êi? :最大w利Î空间 – Q4参考: Tiano-o*e 约占Î 1 j ' Èi? ● ich9ren 描述"%&布局中 ?IOS 区域\0Xp大,所以对应á这里也把 ?IOS 区域Î到Xp大 ● 0x200000 ¦ Co*e)oo+ 默认" (' Èi?) 0根据联想官方%&布局设<"~k In+el ÈE , Intel *ÈT :¹择不删>X些部&"情况下X2²ABèé:»¦ MÅ要把 ÈE =掉) '0 | 34 Junde Yhi <[email protected]> 配置 (Liberalized) Co*e)oo+ ● -hipse+ – Include CPU microcode in CBFS Do not 选择 ● ID更新B助S处理器的健康运4:L0KK ● è12构建依赖~日后也可以往镜像里添加) – Add Intel descriptor.bin file =开,然后在+面"¹!里填写 ich9gen ich9fdgbe_#m.bin 刚才 Ð成的 H& ● 这个操作实际上就是 – dd if=ich9fdgbe_8m.bin of=libreboot.rom bs=12k count=1 conv=notrunc – 完全可以手8PQ – Bootblock behaviour 控G -o*e)oo+ R Vayload 的选择 ● normal/payload Switch to normal if CMOS 假«&在 ,这里选择 says so :并且 -ÈOS 里选择了 p*efix 0 normal "话: -ore)oo+ 理论上就会 选择它(我没有成功过) '1 | 34 Junde Yhi <[email protected]> 配置 (Liberalized) Co*e)oo+ ● Vetices – Graphics initialization Use libgfxinit 选择 ● X012ÍÎ *da SV*RÊ 撰写的89初始化 ● MABÍ用别的选!成功启动½~KAB89) – Framebuffer mode Linear Visplay F`: 选择 "high-resolution" framebuffer ● Legacy VGA text mode \0!x" Ä0x25 :;:]r89!" 体内容~#q) ● 要使用启8画面"话:X1¹!$%¹¸ – &2 VCIe ¹!y.º' '' | 34 Junde Yhi <[email protected]> 配置 (Liberalized) Co*e)oo+ ● Vayload– *dd a payload 选择12 Vayload ● 这些 Vayload ^在uv时从网(上)< – Seconda*y Payloads ● coreinfo "#z器$% ● Èem+es+ÄÂB (试内& – 此 Su)payload 只能在 sG* Text Èode +正Å89 ● nvramcui 运4时配 ● +int ./01v '3 | 34 Junde Yhi <[email protected]> de (Liberalized) Co*e)oo+ ● 配置– ´&|:}4 maUe 即可 ]支持!*Y~^出èé) ● build/coreboot.rom 成+在 ● 一些 Co*e)oo+ 工|: – build/cbfstool ÎS修改%&H&内" -o*e)oo+ File Sys+em ~添_删> ROÈ 内H件) – build/ifwitool – build/rmodtool '4 | 34 Junde Yhi <[email protected]> Py电, ● ThinUVad– X200 " ?IOS 闪&ÃS-./+ 0+ V 面" 9 1Rf"23即可0+4®,./ SOICj16 ?IOS SPI Flash 56 (ICW9) '5 | 34 Junde Yhi <[email protected]> i7 8脚à 1 ' | 34 Junde Yhi <[email protected]> g写 ● flashrom -p ch341a_spi 9<ºU闪&:号 – -p linux_spi 或 :<决SÍÎ" SPI g写器 ● ®它 – flashrom -p <driver> -c <chip> -w <img> ● <chip> MX25L6405D 在M"电,上是 ● ;ash*om ^91· SVI Flash :»|Q<:¸将前|]ë"内容写入 ● 约 5 5=完成|\可以<掉dYiyz – Flash*om ^89 sERIFYING… OK. – 注意g写的时候S好不要通电~拔掉电池),更]要开机…… ● ãO机器^? '7 | 34 Junde Yhi <[email protected]> @Ï~ Li)*eboo+ E进制) 'Ä | 34 Junde Yhi <[email protected]> @Ï (SeaBIOS / VG* Tex+ Mode) '9 | 34 Junde Yhi <[email protected]> @Ï (SeaBIOS / VG* F*amebuAer) 30 | 34 Junde Yhi <[email protected]> @Ï (GRUB2) 31 | 34 Junde Yhi <[email protected]> @Ï (TianoCo*e) 3' | 34 Junde Yhi <[email protected]> 可能© ● (ib*e)oot– B GRUB' B Tiano-o*e (SeaBIOS as CSM) GRU?' 启动高安全要B" (inux PQ/x – TianoCore 补充 UEFI 3am© ● 配合 Sea?IOS Q4Cõ支持模块 (-SM) ½得 ?IOS 功r ● (ib*e)oo+ 4ÎD改FEF"ë时¹G了定制H – (ib*eboo+ 只给 W200 3a提供了`些m©供<G – 更复I的组合还是需要通½手8uv Coreboo+ J到 ● 暂时未能实现,可能我比较KL 33 | 34 Junde Yhi <[email protected]> Ask Me Anything! Ïex+ (14:15 j 15:00): PineÂ4, Its Wis+ory, and Èainlininr EAo*+s T( (im 34 | 34 Junde Yhi <[email protected]>.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    34 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us