{"id":519,"date":"2021-09-17T02:22:32","date_gmt":"2021-09-16T18:22:32","guid":{"rendered":"https:\/\/blog.cauchyschwarz.com\/?p=519"},"modified":"2021-09-17T02:22:35","modified_gmt":"2021-09-16T18:22:35","slug":"debug-kernel-with-qemu-and-gdb","status":"publish","type":"post","link":"https:\/\/blog.cauchyschwarz.com\/?p=519","title":{"rendered":"Debug Kernel With QEMU and GDB"},"content":{"rendered":"\n<p>\u60f3\u5230\u81ea\u5df1\u641e\u4e86\u8fd9\u4e48\u4e45\u5185\u6838\u5c45\u7136\u8fd8\u4e0d\u4f1a\u5355\u6b65\u8c03\u8bd5\uff0c\u5fc3\u91cc\u611f\u5230\u7279\u522b\u60ed\u6127\u548c\u65e0\u80fd\u3002\u505a\u4e2a\u7b14\u8bb0\u8bb0\u5f55\u4e00\u4e0b\u5982\u4f55\u4f7f\u7528QEMU\u548cGDB\u6765\u5355\u6b65\u8c03\u8bd5\u5185\u6838\u3002\u672c\u6765\u60f3\u5148\u7814\u7a76\u4e0b\u7528VirtualBox\u52a0\u4e32\u53e3\u6765\u8c03\u8bd5\u7684\uff0c\u5948\u4f55\u53d1\u73b0\u81ea\u5df1\u7684\u952e\u76d8\u6ca1\u6709SysRq\u952e\uff0c\u4e0d\u60f3\u91cd\u65b0\u6620\u5c04\u952e\u76d8\uff0c\u4e5f\u6709\u70b9\u62c5\u5fc3\u6700\u540e\u7684\u6548\u679c\u53ef\u80fd\u771f\u7684\u6ca1\u6709QEMU\u6548\u679c\u597d\uff0c\u6240\u4ee5\u6682\u65f6\u5148\u5f04QEMU\u597d\u4e86\u3002\u4e3a\u4ec0\u4e48VirtualBox\u8c03\u8bd5\u7684\u65f6\u5019\u9700\u8981SysRq\u952e\u5462\uff0c\u56e0\u4e3a\u6211\u7528\u5bbf\u4e3b\u673a\u7684GDB\u901a\u8fc7\u4e32\u53e3\u8fdeVirtualBox\u91cc\u7684\u865a\u62df\u673a\u65f6\uff0c\u5c45\u7136\u65e0\u6cd5\u901a\u8fc7GDB\u7684<code>Ctrl+C<\/code>\u4e2d\u65ad\u6b63\u5728\u6267\u884c\u7684\u865a\u62df\u673a\u91cc\u7684Linux\uff0c\u53ea\u80fd\u5728\u865a\u62df\u673a\u91cc\u901a\u8fc7\u5f80<code>\/proc\/sysrq-trigger<\/code>\u91cc\u5199<code>g<\/code>\u547d\u4ee4\u6765\u6682\u505c\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\uff0c\u53ef\u662f\u8fd9\u4e48\u505a\u6839\u672c\u6ca1\u6709\u610f\u4e49\uff0c\u56e0\u4e3a\u6211\u7528GDB\u5355\u6b65\u8c03\u8bd5\u5185\u6838\u7684\u76ee\u6807\u573a\u666f\u5c31\u662f\u7cfb\u7edf\u51fa\u73b0\u6545\u969c\u65e0\u6cd5\u54cd\u5e94\u7684\u65f6\u5019\uff0c\u901a\u8fc7GDB\u770b\u4e0b\u5f53\u524d\u5806\u6808\u4fe1\u606f\uff0c\u627e\u51fa\u662f\u54ea\u91cc\u51fa\u4e86\u9519\uff0c\u8fd9\u4e2a\u76ee\u6807\u573a\u666f\u4e0b\u6839\u672c\u5c31\u6ca1\u6709shell\u53ef\u7528\u3002\u8fd9\u4e2a<code>g<\/code>\u547d\u4ee4\u672c\u6765\u662f\u53ef\u7528<code>Alt+SysRq+g<\/code>\u7ec4\u5408\u952e\u5b9e\u73b0\u7684\uff0c\u53ef\u662f\u6211\u7684\u952e\u76d8\u628aSysRq\u952e\u6620\u5c04\u6210\u4e86PrintScreen\u952e\uff0c\u4e8e\u662f\u8fd9\u4e2a\u7ec4\u5408\u952e\u5c31\u6682\u65f6\u7528\u4e0d\u4e86\uff0c\u9700\u8981\u81ea\u5df1\u624b\u52a8\u53bb\u4fee\u6539\u952e\u76d8\u6620\u5c04\u3002\u5185\u6838\u6587\u6863\u91cc\u6709\u5199SysRq\u952e\u88ab\u6620\u5c04\u4e3aPrintScreen\u952e\u4e4b\u540e\u600e\u4e48\u6539\u56de\u6765\u7684\u8bf4\u660e\uff0c\u53ef\u662f\u6211\u6682\u65f6\u6ca1\u5f04\u61c2\u8fd9\u4e2a\u6539\u952e\u539f\u7406\uff0c\u5c31\u5148\u6682\u65f6\u6401\u7f6e\u7b97\u4e86\u3002<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-right counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69fc45849fbfd\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69fc45849fbfd\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E6%A6%82%E8%BF%B0\" >\u6982\u8ff0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E5%8A%A8%E6%89%8B%E5%AE%9E%E9%AA%8C\" >\u52a8\u624b\u5b9e\u9a8c<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E5%87%86%E5%A4%87rootfs\" >\u51c6\u5907rootfs<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#1%E5%87%86%E5%A4%87%E4%B8%80%E4%B8%AA%E8%99%9A%E6%8B%9F%E7%A1%AC%E7%9B%98\" >1.\u51c6\u5907\u4e00\u4e2a\u865a\u62df\u786c\u76d8<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#2%E6%8C%82%E8%BD%BD%E8%99%9A%E6%8B%9F%E7%A1%AC%E7%9B%98\" >2.\u6302\u8f7d\u865a\u62df\u786c\u76d8<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#3%E5%BE%80%E8%99%9A%E6%8B%9F%E7%A1%AC%E7%9B%98%E9%87%8C%E8%A3%85%E5%BF%85%E8%A6%81%E7%9A%84%E4%B8%9C%E8%A5%BF\" >3.\u5f80\u865a\u62df\u786c\u76d8\u91cc\u88c5\u5fc5\u8981\u7684\u4e1c\u897f<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E8%A3%85%E4%B8%80%E4%B8%AA%E5%9F%BA%E6%9C%AC%E7%9A%84Debian%E7%B3%BB%E7%BB%9F\" >\u88c5\u4e00\u4e2a\u57fa\u672c\u7684Debian\u7cfb\u7edf<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E8%A3%85%E4%B8%80%E4%B8%AAUbuntu%E7%9A%84%E7%B3%BB%E7%BB%9F\" >\u88c5\u4e00\u4e2aUbuntu\u7684\u7cfb\u7edf<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E7%9B%B4%E6%8E%A5%E8%A3%85%E4%B8%80%E4%B8%AA%E5%AE%8C%E6%95%B4%E7%9A%84%E5%8F%91%E8%A1%8C%E7%89%88\" >\u76f4\u63a5\u88c5\u4e00\u4e2a\u5b8c\u6574\u7684\u53d1\u884c\u7248<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E4%B8%80%E4%B8%AA%E7%96%91%E9%97%AE\" >\u4e00\u4e2a\u7591\u95ee<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#4%E5%8D%B8%E8%BD%BD%E8%99%9A%E6%8B%9F%E7%A1%AC%E7%9B%98\" >4.\u5378\u8f7d\u865a\u62df\u786c\u76d8<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E7%BC%96%E8%AF%91kernel\" >\u7f16\u8bd1kernel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E5%90%AF%E5%8A%A8QEMU\" >\u542f\u52a8QEMU<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E4%BD%BF%E7%94%A8GDB%E8%BF%9E%E6%8E%A5%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%86%85%E6%A0%B8\" >\u4f7f\u7528GDB\u8fde\u63a5\u6b63\u5728\u8fd0\u884c\u7684\u5185\u6838<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E8%B5%84%E6%96%99\" >\u8d44\u6599<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=519\/#%E6%97%A7%E7%89%88%E6%9C%ACUbuntu%E9%95%9C%E5%83%8F%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80\" >\u65e7\u7248\u672cUbuntu\u955c\u50cf\u4e0b\u8f7d\u5730\u5740<\/a><\/li><\/ul><\/nav><\/div>\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%A6%82%E8%BF%B0\"><\/span>\u6982\u8ff0<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>\u60f3\u8981\u8fbe\u6210\u4f7f\u7528QEMU\u8c03\u8bd5\u5185\u6838\u4ee3\u7801\u7684\u76ee\u6807\uff0c\u9700\u8981\u505a\u5230\u4ee5\u4e0b\u51e0\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u51c6\u5907rootfs<br>\u53ea\u6709\u4e00\u4e2a\u5185\u6838\u7684\u8bdd\u6ca1\u5565\u53ef\u8c03\u7684(\u81f3\u5c11\u5bf9\u672c\u83dc\u9e1f\u662f\u8fd9\u6837)\uff0c\u6240\u4ee5\u6211\u4eec\u5e0c\u671bQEMU\u8fd0\u884c\u7684\u6700\u597d\u662f\u4e00\u4e2a\u65e5\u5e38\u4f7f\u7528\u7684Linux\u53d1\u884c\u7248\u4e00\u6837\u7684\u4e1c\u897f\uff0c\u6709\u5e10\u53f7\u7ba1\u7406\uff0c\u6709\u5404\u79cd\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u6211\u4eec\u5728\u8fd9\u4e2a\u7cfb\u7edf\u91cc\u9762\u91cd\u73b0\u51faBug\u7684\u573a\u666f\uff0c\u7136\u540e\u901a\u8fc7\u5bbf\u4e3b\u673a\u7684GDB\u8fde\u4e0a\u8fd9\u4e2a\u7cfb\u7edf\u7684\u5185\u6838\uff0c\u5f00\u59cb\u8bca\u65ad\u95ee\u9898\u3002\u8fd9\u4e2a\u51c6\u5907rootfs\u7684\u5de5\u4f5c\u5c31\u76f8\u5f53\u4e8e\u5b9a\u5236\u6211\u4eec\u81ea\u5df1\u7684\u53d1\u884c\u7248\u4e86\uff1a<\/li><li>\u5236\u4f5c\u4e00\u4e2a\u865a\u62df\u786c\u76d8\uff1b<\/li><li>\u628a\u6211\u4eec\u60f3\u8981\u7684\u8f6f\u4ef6\u90fd\u88c5\u8fdb\u53bb\uff1b<\/li><li>\u5185\u6838\u7684\u8bdd\uff0c\u770b\u60c5\u51b5\u6211\u4eec\u6709\u4e09\u79cd\u9009\u62e9\uff1a\u4f7f\u7528\u5404\u79cd\u5b98\u65b9\u53d1\u884c\u7248\u91cc\u9762\u81ea\u5e26\u7684\u5185\u6838\uff1b\u5b89\u88c5\u81ea\u5df1\u7f16\u8bd1\u6216\u8005\u4ece\u5176\u4ed6\u5730\u65b9\u641e\u8fc7\u6765\u7684\u5185\u6838\u5230\u865a\u62df\u786c\u76d8\u91cc\uff1b\u4e0d\u5b89\u88c5\u5185\u6838\uff0c\u5728QEMU\u7684\u542f\u52a8\u9009\u9879\u91cc\u6307\u5b9a\u5185\u6838\u6587\u4ef6\u7684\u4f4d\u7f6e\uff1b \u5982\u679c\u6709\u7cbe\u529b\u7684\u8bdd\uff0c\u53ef\u4ee5\u53bb\u770bLinux From Scratch\u8fd9\u672c\u4e66\uff0c\u5bf9\u5236\u4f5cLinux\u53d1\u884c\u7248\u5c06\u4f1a\u6709\u66f4\u6df1\u523b\u548c\u5168\u9762\u7684\u7406\u89e3\u3002<\/li><li>\u7f16\u8bd1kernel<\/li><li>\u542f\u52a8QEMU<\/li><li>\u4f7f\u7528GDB\u8fde\u63a5\u6b63\u5728\u8fd0\u884c\u7684\u5185\u6838<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%8A%A8%E6%89%8B%E5%AE%9E%E9%AA%8C\"><\/span>\u52a8\u624b\u5b9e\u9a8c<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>\u53ea\u6709\u901a\u8fc7\u52a8\u624b\u5b9e\u9a8c\u624d\u80fd\u8bb0\u5fc6\u7684\u66f4\u6df1\u523b\uff0c\u624d\u6709\u673a\u4f1a\u53d1\u73b0\u5404\u79cd\u610f\u60f3\u4e0d\u5230\u7684\u95ee\u9898\u3002\u4e0b\u9762\u8bb0\u5f55\u4e00\u4e0b\u6211\u7684\u5b9e\u9a8c\u8fc7\u7a0b\uff0c\u57fa\u672c\u662f\u6309\u7167\u540e\u9762\u5217\u7684\u522b\u4eba\u7684\u535a\u5ba2\u6765\u8d70\u7684\uff0c\u52a0\u4e0a\u4e00\u70b9\u70b9\u81ea\u5df1\u7684\u7591\u95ee\u548c\u601d\u8003\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%87%86%E5%A4%87rootfs\"><\/span>\u51c6\u5907rootfs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1%E5%87%86%E5%A4%87%E4%B8%80%E4%B8%AA%E8%99%9A%E6%8B%9F%E7%A1%AC%E7%9B%98\"><\/span>1.\u51c6\u5907\u4e00\u4e2a\u865a\u62df\u786c\u76d8<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>   qemu-img create debian-stretch-image.img 4g\n   mkfs.ext2 debian-stretch-image.img<\/code><\/pre>\n\n\n\n<p>\u6839\u636e\u81ea\u5df1\u9884\u4f30\u7684\u8981\u5f80rootfs\u91cc\u88c5\u7684\u8f6f\u4ef6\u5927\u5c0f\uff0c\u53ef\u4ee5\u5c06\u786c\u76d8\u7684\u5927\u5c0f\u8bbe\u4e3a\u9002\u5f53\u7684\u5bb9\u91cf\uff1b\u6587\u4ef6\u7cfb\u7edf\u4e5f\u53ef\u4ee5\u7528\u5176\u4ed6\u7684\uff0c\u6bd4\u5982ext4\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2%E6%8C%82%E8%BD%BD%E8%99%9A%E6%8B%9F%E7%A1%AC%E7%9B%98\"><\/span>2.\u6302\u8f7d\u865a\u62df\u786c\u76d8<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u521b\u5efa\u6302\u8f7d\u70b9\n   mkdir mp\n   sudo mount -o loop debian-stretch-image.img mp<\/code><\/pre>\n\n\n\n<p><code>loop<\/code>\u9009\u9879\u7684\u8bf4\u660e\u770bmount\u7684manual\u5427\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3%E5%BE%80%E8%99%9A%E6%8B%9F%E7%A1%AC%E7%9B%98%E9%87%8C%E8%A3%85%E5%BF%85%E8%A6%81%E7%9A%84%E4%B8%9C%E8%A5%BF\"><\/span>3.\u5f80\u865a\u62df\u786c\u76d8\u91cc\u88c5\u5fc5\u8981\u7684\u4e1c\u897f<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%A3%85%E4%B8%80%E4%B8%AA%E5%9F%BA%E6%9C%AC%E7%9A%84Debian%E7%B3%BB%E7%BB%9F\"><\/span>\u88c5\u4e00\u4e2a\u57fa\u672c\u7684Debian\u7cfb\u7edf <span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo debootstrap --arch amd64 jessie mp <\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u9009\u7684\u662fjessie\u7684\u8bdd\uff0c\u90a3\u4e48\u540e\u9762\u542f\u52a8\u7684\u65f6\u5019\u662f\u76f4\u63a5root\u5e10\u53f7\u767b\u5f55\u7684\uff0c\u5982\u679c\u9009\u7684\u662fstretch\u7684\u8bdd\uff0c\u90a3\u4e48\u9700\u8981\u5148\u5728rootfs\u91cc\u521b\u5efa\u7528\u6237\u5e10\u53f7\u548c\u8bbe\u7f6eroot\u5bc6\u7801\u624d\u884c\u3002<br>\u521b\u5efa\u8d26\u6237\u548c\u8bbe\u7f6eroot\u5bc6\u7801\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo chroot mp \npasswd root \n# \u8bbe\u7f6eroot\u5bc6\u7801 \nuseradd -s '\/bin\/bash' -m -G adm,sudo myusername \npasswd myusername \n# \u8bbe\u7f6emyusername\u8d26\u6237\u5bc6\u7801 \nexit <\/code><\/pre>\n\n\n\n<p>\u5728\u6267\u884cdebootstrap\u4e00\u6b65\u540e\uff0c\u6211\u4eec\u7684\u865a\u62df\u786c\u76d8\u91cc\u9762\u5c31\u5df2\u7ecf\u6709\u4e00\u4e2a\u6bd4\u8f83\u5b8c\u6574\u7684\u7cfb\u7edfdebian\u7cfb\u7edf\u4e86\uff0c\u6211\u4eec\u751a\u81f3\u53ef\u4ee5\u5728\u91cc\u9762\u4f7f\u7528apt\u547d\u4ee4\u88c5\u8f6f\u4ef6\u3002\u65b9\u6cd5\u5c31\u662f\u5728chroot\u4e4b\u524d\u628adns\u89e3\u6790\u914d\u7f6e\u62f7\u8d1d\u4e00\u4efd\u8fdb\u53bb\uff0c\u7136\u540e\u5728chroot\u8fdb\u53bb\u6267\u884capt\u547d\u4ee4\u5b89\u88c5\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp -b \/etc\/resolv.conf temp\/etc\/resolv.conf \nsudo chroot mp \napt update \n# \u7231\u88c5\u5565\u88c5\u5565 \nexit <\/code><\/pre>\n\n\n\n<p>\u4f60\u8981\u662f\u60f3\u5728\u91cc\u9762\u88c5\u4e00\u4e2a\u5185\u6838\u800c\u4e0d\u662f\u4f7f\u7528\u81ea\u5df1\u53e6\u5916\u7f16\u8bd1\u597d\u7684\u5185\u6838\u7684\u8bdd\uff0c\u90a3\u4e48\u5c31\u5728chroot\u4e4b\u540e\u5b89\u88c5\u4e00\u4e0b<code>linux-image-xxx<\/code>\u4e4b\u7c7b\u7684\u5305\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%A3%85%E4%B8%80%E4%B8%AAUbuntu%E7%9A%84%E7%B3%BB%E7%BB%9F\"><\/span>\u88c5\u4e00\u4e2aUbuntu\u7684\u7cfb\u7edf<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>\u5b89\u88c5Ubuntu Base\u7684\u5305\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget http:\/\/cdimage.ubuntu.com\/ubuntu-base\/releases\/16.04\/release\/ubuntu-base-16.04-core-amd64.tar.gz\ntar xf ubuntu-base-16.04-core-amd64.tar.gz -C mp\/ <\/code><\/pre>\n\n\n\n<p><br>\u5269\u4e0b\u7684\u6b65\u9aa4\u548c\u88c5debian\u7684\u5c31\u5b8c\u5168\u4e00\u6837\u4e86\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E7%9B%B4%E6%8E%A5%E8%A3%85%E4%B8%80%E4%B8%AA%E5%AE%8C%E6%95%B4%E7%9A%84%E5%8F%91%E8%A1%8C%E7%89%88\"><\/span>\u76f4\u63a5\u88c5\u4e00\u4e2a\u5b8c\u6574\u7684\u53d1\u884c\u7248<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%B8%80%E4%B8%AA%E7%96%91%E9%97%AE\"><\/span>\u4e00\u4e2a\u7591\u95ee<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p><br>\u6211\u770b<a href=\"http:\/\/kernel-notes.gbittencourt.net\/ubuntu-base-with-qemu\/\">\u8fd9\u7bc7\u535a\u5ba2<\/a>\u5728chroot\u4e4b\u524d\u91cd\u65b0\u6302\u8f7d\u4e86<code>\/sys<\/code>\uff0c<code>\/proc<\/code>\uff0c<code>\/dev<\/code>\u7b49\u76ee\u5f55\uff0c\u53ef\u662f\u50cf<a href=\"http:\/\/wiki.t-firefly.com\/en\/ROC-RK3399-PC\/linux_build_ubuntu_rootfs.html\">\u8fd9\u7bc7\u535a\u5ba2<\/a>\u53c8\u6ca1\u6709\u505a\u8fd9\u4e2a\u64cd\u4f5c\uff0c\u6211\u81ea\u5df1\u5b9e\u9a8c\u7684\u65f6\u5019\u4e5f\u6ca1\u6709\u8fd9\u4e48\u505a\uff0c\u5e76\u4e0d\u6e05\u695a\u8fd9\u4e2a\u6b65\u9aa4\u7684\u5fc5\u8981\u6027\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mount --rbind \/sys \/mnt\/sys \nmount --rbind \/proc \/mnt\/proc \nmount --rbind \/dev \/mnt\/dev \nchroot &lt;your-mount-point><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4%E5%8D%B8%E8%BD%BD%E8%99%9A%E6%8B%9F%E7%A1%AC%E7%9B%98\"><\/span>4.\u5378\u8f7d\u865a\u62df\u786c\u76d8<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo umount mp<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E7%BC%96%E8%AF%91kernel\"><\/span>\u7f16\u8bd1kernel<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u6211\u4e0d\u662f\u4e0d\u4f1a\u7f16\u8bd1\u5185\u6838\uff0c\u53ef\u662f<a href=\"https:\/\/www.collabora.com\/news-and-blog\/blog\/2017\/01\/16\/setting-up-qemu-kvm-for-kernel-development\/\">\u4eba\u5bb6\u7684\u603b\u7ed3<\/a>\u786e\u5b9e\u5f88\u7b80\u7ec3\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone --depth=1 git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/torvalds\/linux.git\ncd linux\nmake x86_64_defconfig\nmake kvmconfig\nmake -j 8<\/code><\/pre>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6211\u4eec\u4e3a\u4e86\u987a\u5229\u8fbe\u6210GDB\u7684\u8c03\u8bd5\u76ee\u7684\uff0c\u90a3\u4e48\u5728<code>make x86_64_defconfig<\/code>\u8fd9\u6b65\u4e4b\u540e\uff0c\u53bb\u6539\u4e0b\u8fd9\u4e2a\u751f\u6210\u7684<code>.config<\/code>\u6587\u4ef6\uff0c\u91cc\u9762\u6dfb\u52a0\u6216\u8005\u4fee\u6539\u4e00\u53e5<code>CONFIG_DEBUG_INFO=y<\/code>\uff0c\u518d\u63a5\u7740\u6267\u884c\u540e\u9762\u7684\u7f16\u8bd1\u6b65\u9aa4\u3002<br>\u7f16\u8bd1\u5b8c\u6210\u4e4b\u540e\uff0c\u7ed9QEMU\u8fd0\u884c\u7684\u662f<code>bzImage<\/code>\u6587\u4ef6\uff0c\u7ed9GDB\u8c03\u8bd5\u7684\u662f<code>vmlinux<\/code>\u6587\u4ef6\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%90%AF%E5%8A%A8QEMU\"><\/span>\u542f\u52a8QEMU<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u7ec8\u4e8e\u53ef\u4ee5\u8fd0\u884c\u81ea\u5df1\u7684kernel\u4e86\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo qemu-system-x86_64 -kernel &lt;path-to-bzImage&gt; -hda debian-stretch-image.img -append \"root=\/dev\/sda\"<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>QEMU\u9009\u9879\u91cc\u52a0\u4e0a<code>-s<\/code>\u9009\u9879\uff0c\u4ee5\u63d0\u4f9b\u4e32\u53e3\u901a\u4fe1\uff0c\u8fd9\u6837\u624d\u80fd\u7528GDB\u8c03\u8bd5\u8fd9\u4e2a\u6b63\u5728\u8fd0\u884c\u7684kernel\uff1b<br>\u5acc\u7528\u4e32\u53e3\u9ebb\u70e6\u7684\u8bdd\uff0c\u76f4\u63a5\u8fdeQEMU\u76d1\u542c\u76841234\u7684TCP\u7aef\u53e3\u5c31\u53ef\u4ee5\u4e86\uff0c\u53ea\u8981\u5f00\u542f\u4e86<code>-s<\/code>\u9009\u9879\uff0cQEMU\u5c31\u9ed8\u8ba4\u63d0\u4f9bTCP\u901a\u4fe1\uff1b<\/li><li>append\u9009\u9879\u540e\u9762\u8ddf\u7684\u5b57\u7b26\u4e32\u662f\u63d0\u4f9b\u7ed9\u5185\u6838\u4f5c\u4e3a\u542f\u52a8\u53c2\u6570\u7684\uff1b\u4e3a\u4e86\u9632\u6b62\u5185\u6838KASLR\u7ed9GDB\u5e26\u6765\u7684\u8c03\u8bd5\u56f0\u96be\uff0c\u5728\u5185\u6838\u7684\u542f\u52a8\u9009\u9879\u91cc\u52a0\u4e0a<code>nokaslr<\/code>\u9009\u9879\uff1b<\/li><li>\u4e3a\u4e86\u907f\u514dQEMU\u5bf9\u865a\u62df\u786c\u76d8\u683c\u5f0f\u7684warning\uff0c\u628a<code>-hda debian-stretch-image.img<\/code>\u6362\u6210<code>-drive file=debian-stretch-image.img,index=0,media=disk,format=raw<\/code>\uff1b<\/li><\/ul>\n\n\n\n<p>\u6240\u4ee5\uff0c\u6700\u7ec8\u7248\u672c\u7684QEMU\u8fd0\u884c\u547d\u4ee4\u662f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo qemu-system-x86_64 -kernel linux\/arch\/x86_64\/boot\/bzImage -drive file=debian-stretch-image.img,index=0,media=disk,format=raw -append \"root=\/dev\/sda nokaslr\" -s<\/code><\/pre>\n\n\n\n<p>\u5176\u5b9e\u8fd8\u6709\u5f88\u591a\u53ef\u4ee5\u8c03\u7684\u9009\u9879\uff0c\u6bd4\u5982\u5f00\u542fkvm\u7684<code>--enable-kvm<\/code>\uff0c\u4f46\u8fd9\u4e9b\u7b97\u662fQEMU\u7684\u8fdb\u9636\u77e5\u8bc6\uff0c\u4e0b\u6b21\u518d\u603b\u7ed3\u5427\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%BD%BF%E7%94%A8GDB%E8%BF%9E%E6%8E%A5%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%86%85%E6%A0%B8\"><\/span>\u4f7f\u7528GDB\u8fde\u63a5\u6b63\u5728\u8fd0\u884c\u7684\u5185\u6838<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>gdb vmlinux\ntarget remote localhost:1234<\/code><\/pre>\n\n\n\n<p>\u7136\u540e\u5c31\u53ef\u4ee5\u50cf\u8c03\u8bd5\u5e94\u7528\u7a0b\u5e8f\u4e00\u6837\u8c03\u8bd5\u8fd9\u4e2a\u5185\u6838\u4e86\u3002\u4e3a\u4e86GDB\u8c03\u8bd5\u7684\u65f6\u5019\u7528\u7684\u723d\uff0c\u53ef\u4ee5\u8003\u8651\u50cf<a href=\"https:\/\/linux-kernel-labs.github.io\/refs\/heads\/master\/labs\/introduction.html#debugging\">linux-kernel-labs<\/a>\u4e00\u6837\uff0c\u4e0b\u8f7d\u4e2aGDB\u7684\u914d\u7f6e\u6587\u4ef6\uff1a<code>wget -P ~ git.io\/.gdbinit<\/code>\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%B5%84%E6%96%99\"><\/span>\u8d44\u6599<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/wiki.debian.org\/QEMU\">Debian QEMU\u6559\u7a0b<\/a>\uff0c\u8bb2\u8ff0\u4e86\u5982\u4f55\u7528qemu\u542f\u52a8\u5e73\u5e38\u4e0b\u8f7d\u7684\u53d1\u884c\u7248iso\u6587\u4ef6\uff1b<\/li><li><a href=\"https:\/\/www.collabora.com\/news-and-blog\/blog\/2017\/01\/16\/setting-up-qemu-kvm-for-kernel-development\/\">\u4e00\u7bc7\u535a\u5ba2<\/a>,\u8bb2\u8ff0\u4e86\u5982\u4f55\u7528qemu\u542f\u52a8\u81ea\u5df1\u7f16\u8bd1\u7684\u5185\u6838\uff1b<\/li><li><a href=\"https:\/\/www.collabora.com\/news-and-blog\/blog\/2019\/03\/20\/bootstraping-a-minimal-arch-linux-image\/\">\u4e00\u7bc7\u7c7b\u4f3c\u7684\u535a\u5ba2<\/a>\uff0c\u53ea\u4e0d\u8fc7\u662f\u4ee5arch\u4e3a\u4f8b\u5b50\uff1b<\/li><li><a href=\"https:\/\/www.collabora.com\/news-and-blog\/blog\/2017\/03\/13\/kernel-debugging-with-qemu-overview-tools-available\/\">\u4f7f\u7528GDB\u8c03\u8bd5QEMU\u542f\u52a8\u7684\u5185\u6838<\/a>\uff1b<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%97%A7%E7%89%88%E6%9C%ACUbuntu%E9%95%9C%E5%83%8F%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80\"><\/span><a href=\"https:\/\/askubuntu.com\/questions\/67001\/what-commands-are-needed-to-install-ubuntu-core\/70139#70139\">\u65e7\u7248\u672cUbuntu\u955c\u50cf\u4e0b\u8f7d\u5730\u5740<\/a><span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>\u8fd9\u4e2a\u94fe\u63a5\u8fd8\u771f\u662f\u4e0d\u592a\u597d\u627e\uff0c\u5c31\u50cf\u5b98\u65b9\u4e0d\u60f3\u8ba9\u4f60\u77e5\u9053\u53ea\u60f3\u8ba9\u4f60\u4f7f\u7528\u6700\u65b0\u7248\u4e00\u6837\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u60f3\u5230\u81ea\u5df1\u641e\u4e86\u8fd9\u4e48\u4e45\u5185\u6838\u5c45\u7136\u8fd8\u4e0d\u4f1a\u5355\u6b65\u8c03\u8bd5\uff0c\u5fc3\u91cc\u611f\u5230\u7279\u522b\u60ed\u6127\u548c\u65e0\u80fd\u3002\u505a\u4e2a\u7b14\u8bb0\u8bb0\u5f55\u4e00\u4e0b\u5982\u4f55\u4f7f\u7528QEMU\u548cGDB\u6765\u5355\u6b65\u8c03\u8bd5\u5185\u6838\u3002\u672c\u6765\u60f3\u5148\u7814\u7a76\u4e0b\u7528VirtualBox\u52a0\u4e32\u53e3\u6765\u8c03\u8bd5\u7684\uff0c\u5948\u4f55\u53d1\u73b0\u81ea\u5df1\u7684\u952e\u76d8\u6ca1\u6709Sy&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[37],"class_list":["post-519","post","type-post","status-publish","format-standard","hentry","category-10","tag-kernel"],"_links":{"self":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts\/519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=519"}],"version-history":[{"count":1,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts\/519\/revisions"}],"predecessor-version":[{"id":520,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts\/519\/revisions\/520"}],"wp:attachment":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}