在thinkpad X200 上配置多payload 的libreboot 自由固件
Total Page:16
File Type:pdf, Size:1020Kb
在 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]>.