{"id":51,"date":"2013-08-11T17:18:34","date_gmt":"2013-08-11T17:18:34","guid":{"rendered":"http:\/\/blog.ignoranthack.me\/?p=51"},"modified":"2014-04-21T14:07:21","modified_gmt":"2014-04-21T14:07:21","slug":"allmost-there-intel-amt-on-my-thinkpad-t520","status":"publish","type":"post","link":"http:\/\/blog.ignoranthack.me\/?p=51","title":{"rendered":"AllMost There &#8212; Intel AMT on my ThinkPad T520"},"content":{"rendered":"<p>Spent some time this week screwing around with the &#8220;serial&#8221; port on my laptop.\u00a0 Serial consoles are one of those things that you seem to always need when doing o\/s development.\u00a0 Its the only reliable way to get debugging information and on PC architectures, its really the best way to find and resolve serious problems in the kernel or drivers.<\/p>\n<p>Laptops dropped their DB-9, RS-232 connection years ago and up until recently, you couldn&#8217;t really do much with debugging except take pictures of your laptop&#8217;s console when it had crashed.\u00a0 I discovered that my laptop has AMT features built into it and decided to see if I could make FreeBSD use it as a serial console for debugging and diagnostics.\u00a0 Turns out, its mostly functional and seems to do what I want.<\/p>\n<p>Turning AMT on is a bit goofy, mainly do to some fairly strict password requirements, but lets start from the beginning.\u00a0 I&#8217;m using my Lenovo T520 as an example, so your BIOS will vary based on your laptop vendor.<\/p>\n<p>Hit your &#8220;enter the bios key command&#8221; which on my ThinkPad is the blue &#8220;ThinkVantage&#8221; button, but for the rest of the universe is probably F10, DEL or some other normal key.\u00a0 This should bring up your bios selection menu and now enter your bios configuration menus.<\/p>\n<p style=\"text-align: center;\">Turn AMT on in BIOS<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS2.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-55 aligncenter\" alt=\"AMT_BIOS2\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS2-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS2-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS2-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS2-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> I left the values, more or less, at the defaults here.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS1.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-54 aligncenter\" alt=\"AMT_BIOS1\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS1-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS1-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS1-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_BIOS1-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Save, reboot.\u00a0 Now when you hit your bios configuration button:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-56 alignnone\" alt=\"AMT_Boot\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">Hit &lt;ctrl-P&gt; now to enter the AMT configuration screens.\u00a0 <a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot2.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-64 aligncenter\" alt=\"AMT_Boot2\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot2-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot2-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot2-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Boot2-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: left;\">The first time you do this, there will only be one option, so hit &#8220;1&#8221; to enter the AMT configuration screens.\u00a0 We&#8217;ll come back to this menu list later.<\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Main.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-57 aligncenter\" alt=\"AMT_Main\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Main-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Main-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Main-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Main-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>If this is your first time entering this machine&#8217;s AMT device, its going to force you to reset the password from &#8220;admin&#8221; to something else.\u00a0 The password requirements on the AMT device are pretty strict, but <a href=\"http:\/\/software.intel.com\/en-us\/blogs\/2007\/11\/08\/strong-amt-me-passwords-and-other-shades-of-gray\">this<\/a> should explain it for you.<\/p>\n<p style=\"text-align: left;\">You&#8217;ll need to adjust one or two settings and activate the AMT configuration&#8217;s IPv4 settings.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Timeout.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-58 aligncenter\" alt=\"AMT_Timeout\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Timeout-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Timeout-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Timeout-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Timeout-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Select SOL\/IDRR\/KVM.\u00a0 We&#8217;re going to activate Legacy Serial Redirection here<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf0.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-65 aligncenter\" alt=\"AMT_Conf0\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf0-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf0-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf0-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf0-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Select SOL<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf1.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-66 aligncenter\" alt=\"AMT_Conf1\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf1-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf1-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf1-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf1-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Obviously, Enable is what we want here.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf2.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-67 aligncenter\" alt=\"AMT_Conf2\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf2-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf2-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf2-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf2-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Select Legacy Redirection Mode, then select Enable<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf8.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-79 aligncenter\" alt=\"AMT_Conf8\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf8-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf8-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf8-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf8-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">Back to Main Menu and Select Network Setup<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf3.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-68 aligncenter\" alt=\"AMT_Conf3\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf3-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf3-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf3-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf3-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>TCP\/IP Settings and Setup Wired Lan IPv4 Configuration<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf4.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-69 aligncenter\" alt=\"AMT_Conf4\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf4-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf4-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf4-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf4-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>I&#8217;m going to set DHCP mode for this test.\u00a0 You can set static IP if you wish.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf5.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-70 aligncenter\" alt=\"AMT_Conf5\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf5-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf5-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf5-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf5-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Yet another Enable here.<\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf6.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-71 aligncenter\" alt=\"AMT_Conf6\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf6-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf6-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf6-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_Conf6-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>At this point, you&#8217;re ready to save\/exit\/reboot.\u00a0 To test that the DHCP settings are working, toggle your BIOS button again (F10\/DEL\/ThinkVantage) and hit &lt;ctrl-P&gt; to get the AMT menu again.<\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_DHCP.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-73 aligncenter\" alt=\"AMT_DHCP\" src=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_DHCP-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_DHCP-300x225.jpg 300w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_DHCP-1024x768.jpg 1024w, http:\/\/blog.ignoranthack.me\/wp-content\/uploads\/2013\/08\/AMT_DHCP-624x467.jpg 624w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Hit &#8220;2&#8221; to check that the AMT can indeed get an IP address.\u00a0 Note that this address is the same as your laptop IP, at least it should be.\u00a0 There is some magic going on here that allows the AMT device to share the MAC address and the IP address of your host.\u00a0 Its interesting but also causes odd things to happen that we&#8217;ll dig into a little bit later in the post.<\/p>\n<p>Now that you&#8217;ve gotten an IP address, you can boot normally into FreeBSD.\u00a0 We now need to modify FreeBSD to boot up onto a non-standard (COM1,2,3,4) and get the serial console working.\u00a0 This is pretty standard stuff, \/etc\/ttys, \/boot\/loader.conf, \/etc\/make.conf things.<\/p>\n<p>Determine what the pci bus address of the UART is in your system via:<br \/>\n<strong>pciconf -l | grep uart<\/strong><br \/>\n<strong>uart0@pci0:0:22:3: class=0x070002 card=0x21cf17aa chip=0x1c3d8086 rev=0x04 hdr=0x00<br \/>\n<\/strong>or<strong><br \/>\ndmesg | grep uart<br \/>\nuart0: &lt;Intel AMT &#8211; KT Controller&gt; port 0x6070-0x6077 mem 0xf522c000-0xf522cfff irq 19 at device 22.3 on pci0<br \/>\nuart0: console (115200,n,8,1)<br \/>\nuart0: fast interrupt<br \/>\n<\/strong><\/p>\n<p>make.conf:<br \/>\n<strong>BOOT_COMCONSOLE_SPEED=115200<\/strong><\/p>\n<p>loader.conf:<br \/>\n<strong>console=&#8221;comconsole&#8221;<\/strong><br \/>\n<strong> comconsole_speed=&#8221;115200&#8243;<\/strong><br \/>\n<strong> comconsole_pcidev=&#8221;0:22:3&#8243; #Determine this value from the pciconf -l <\/strong><\/p>\n<p>device.hints:<br \/>\nIf you have a device.hints file, comment out the hints for hw.uart settings.\u00a0 Leave only the setting for the flags:<br \/>\n<strong>#hint.uart.0.at=&#8221;isa&#8221;<\/strong><br \/>\n<strong> #hint.uart.0.port=&#8221;0x3F8&#8243;<\/strong><br \/>\n<strong> hint.uart.0.flags=&#8221;0x10&#8243;<\/strong><br \/>\n<strong> #hint.uart.0.irq=&#8221;4&#8243;<\/strong><br \/>\n<strong> #hint.uart.1.at=&#8221;isa&#8221;<\/strong><br \/>\n<strong> #hint.uart.1.port=&#8221;0x2F8&#8243;<\/strong><br \/>\n<strong> #hint.uart.1.irq=&#8221;3&#8243; <\/strong><\/p>\n<p>boot.config:<br \/>\nadd the <strong>-Dh<\/strong> for dual console support<\/p>\n<p>\/etc\/ttys:<br \/>\nEnable ttyu0<br \/>\n<strong>ttyu0 &#8220;\/usr\/libexec\/getty std.115200&#8221; vt100 on secure<\/strong><\/p>\n<p>Issue a <strong>kill -HUP 1 <\/strong>to let init fire up your getty instance.\u00a0 If all is well, you can now go to the computer you want to use to as a console device for this laptop.\u00a0 Using FreeBSD ports, install <strong>comms\/amtterm. <\/strong>In order to connect to your laptop and validate that its working correctly, issue the following command:<br \/>\n<strong>amtterm -p &lt;password you set in the AMT&gt; &lt;IP address of laptop&gt;<\/strong><\/p>\n<p>If you get a tty login, you&#8217;ve suceeded!<strong>amtterm: NONE -&gt; CONNECT (connection to host)<\/strong><br \/>\n<strong>ipv4 192.168.1.209 [192.168.1.209] 16994 open<\/strong><br \/>\n<strong>amtterm: CONNECT -&gt; INIT (redirection initialization)<\/strong><br \/>\n<strong>amtterm: INIT -&gt; AUTH (session authentication)<\/strong><br \/>\n<strong>amtterm: AUTH -&gt; INIT_SOL (serial-over-lan initialization)<\/strong><br \/>\n<strong>amtterm: INIT_SOL -&gt; RUN_SOL (serial-over-lan active)<\/strong><br \/>\n<strong>serial-over-lan redirection ok<\/strong><br \/>\n<strong>connected now, use ^] to escape<\/strong><\/p>\n<p><strong>FreeBSD\/amd64 (powernoodle) (ttyu0)<\/strong><\/p>\n<p><strong>login: <\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>The last steps are fairly trivial.\u00a0 You need to rebuild your kernel to pickup the changes to \/etc\/make.conf.\u00a0 If you do an installkernel and reboot, you&#8217;ll now be able to capture the boot up sequence (no boot0 support) once loader starts.\u00a0 You&#8217;ll get to see the beastie menu in all its glory.<\/p>\n<p>The machine I&#8217;m using uses a Intel Ethernet chipset via the em(4) driver, this has some very strange behavior that I will take a look at over the next couple of weeks.<\/p>\n<p>With AMT enabled, the ethernet connection only negotiates to 100Mbit.\u00a0 This is very amusing to me as it acts a lot like IPMI in this regard.\u00a0 When em(4) initializes it *will* drop your amtterm connection.\u00a0 Irritating, but em(4) hasn&#8217;t been taught enough logic to deal with the connection to the AMT device.<\/p>\n<p>Rebooting the laptop will disconnect your AMT session.\u00a0 AMT is not a server grade thing like IPMI, so there&#8217;s no garauntee of reliability at all.\u00a0 AMT is sniffing packets that are addressed to the laptop and snipping them out of the air.\u00a0 Its a very delicate hardware hack but it does to the trick.<\/p>\n<p>Since AMT presents itself as a non-standard COM port, I&#8217;m pretty sure that the boot0 and boot2 loaders can&#8217;t use AMT as a serial console.\u00a0 This means that things like gptzfsboot might have issues that you cannot debug.\u00a0 As far as I can tell however, this is the one of the most likely to work mechanisms for administration of your laptop and development for things like suspend\/resume support.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spent some time this week screwing around with the &#8220;serial&#8221; port on my laptop.\u00a0 Serial consoles are one of those things that you seem to always need when doing o\/s development.\u00a0 Its the only reliable way to get debugging information and on PC architectures, its really the best way to find and resolve serious problems [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_share_on_mastodon":"0"},"categories":[2],"tags":[],"share_on_mastodon":{"url":"","error":""},"_links":{"self":[{"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=\/wp\/v2\/posts\/51"}],"collection":[{"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=51"}],"version-history":[{"count":17,"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=\/wp\/v2\/posts\/51\/revisions"}],"predecessor-version":[{"id":91,"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=\/wp\/v2\/posts\/51\/revisions\/91"}],"wp:attachment":[{"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=51"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=51"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.ignoranthack.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}