{"id":485,"date":"2023-07-07T06:06:26","date_gmt":"2023-07-06T22:06:26","guid":{"rendered":"https:\/\/vm1.go2see.me\/?p=485"},"modified":"2024-08-20T14:59:01","modified_gmt":"2024-08-20T06:59:01","slug":"485","status":"publish","type":"post","link":"https:\/\/vm1.go2see.me\/?p=485","title":{"rendered":"Build AOSP on ubuntu20.04 over ASUS Laptop"},"content":{"rendered":"<h1>Build AOSP on ubuntu20.04 over ASUS Laptop<\/h1>\n<h2>0. Prepare Ubuntu20.04 on laptop<\/h2>\n<p>Although Ubuntu 22.04 is better fitting in ASUS N7601 (2022) laptop, the building processes of AOSP on RISC-V are not suitable over it. I downgrade my Ubuntu to 20.04 for the building processes, and make a note here&#8230;<\/p>\n<h3>0.0. Prevent Ubuntu Black-screen on ASUS Laptop<\/h3>\n<ol>\n<li>\n<p>Boot up from USB dongle to install ubuntu 20.04,  use &#8216;Safe Graphic&#8217; Mode to prevent screen blanking&#8230;.<\/p>\n<\/li>\n<li>\n<p>Select minimal install, without 3rd party driver to speedup and prevent blanking&#8230;.<\/p>\n<\/li>\n<li>\n<p>After done, ubuntu will bootup with safe vga driver.<\/p>\n<\/li>\n<li>\n<p>run &quot;<strong>Software &amp; Updates<\/strong>&quot; app, choose &quot;<strong>Additional Drivers<\/strong>&quot; Tab, then we can select newest NVIDIA driver, but Nouveau driver is more compatible&#8230;<br \/>\n<img decoding=\"async\" src=\"https:\/\/dav2.go2see.co\/md-pics\/image-20230822134940759.png\" alt=\"image-20230822134940759\" \/><\/p>\n<\/li>\n<li>\n<p>Driver make video blank?  Press <code>Ctrl-Alt+F3<\/code> then <code>Ctrl-Alt+F1<\/code> to get GUI back&#8230;<\/p>\n<\/li>\n<\/ol>\n<h3>0.1. Turn on the Sound Card:<\/h3>\n<p>\u200b   My laptop speakers are connected on <code>\/dev\/snd\/hwC1D0<\/code> soundcard, while the common hwC0D0 is the HDMI audio device. Since the speaker setting not work under Ubuntu 20.04, a little hacking after each boot up is needed. <\/p>\n<p>\u200b   The sound card registers needs to be set after bootup (for a little seconds, say 10 seconds), thus the crontab tool was used to do such setting. Steps:  <\/p>\n<ol>\n<li>\n<p>install alsa-tools for sound card control:<\/p>\n<pre><code class=\"language-shell\">apt install alsa-tools<\/code><\/pre>\n<\/li>\n<li>\n<p>make a executable script with the following commands:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-shell\">echo \"sudo hda-verb \/dev\/snd\/hwC1D0 0x20 0x500 0xf\nsudo hda-verb \/dev\/snd\/hwC1D0 0x20 0x400 0x7774\nsudo hda-verb \/dev\/snd\/hwC1D0 0x20 0x500 0x45\nsudo hda-verb \/dev\/snd\/hwC1D0 0x20 0x400 0x5289\" |sudo tee \/usr\/local\/bin\/audioup\n\nsudo chmod 755 \/usr\/local\/bin\/audioup<\/code><\/pre>\n<ol start=\"3\">\n<li>use <code>crontab -e<\/code>  command to edit the cron script, add the line below to schedule the soundcard setting at 8 sec after bootup:<\/li>\n<\/ol>\n<pre><code class=\"language-shell\">@reboot sleep 8; \/usr\/local\/bin\/audioup<\/code><\/pre>\n<p>Then the audioup script will be execute after each boot up.<\/p>\n<h3>0.2. Other Settings<\/h3>\n<ol>\n<li>fstab ? ubuntu 20.04 &#8216;auto&#8217; type seems work, no need be changed<\/li>\n<\/ol>\n<pre><code class=\"language-shell\"># UUID=7CD2D855D2D814EC \/mnt\/c          ntfs    defaults,umask=007,gid=46 0  0\n\/dev\/disk\/by-uuid\/7CD2D855D2D814EC \/mnt\/c auto rw,uid=cyue,nosuid,nodev,nofail,x-gvfs-show 0 0<\/code><\/pre>\n<ol start=\"2\">\n<li>Links<\/li>\n<\/ol>\n<pre><code class=\"language-shell\">cd ~\n# \u6a19\u6e96\u76ee\u9304\u8a2d\u7f6e\nrm -rf Documents Downloads Music Pictures Favorites Videos\nln -s \/mnt\/c\/Users\/cyue1\/Documents ~\/Documents\nln -s \/mnt\/c\/Users\/cyue1\/Downloads ~\/Downloads\nln -s \/mnt\/c\/Users\/cyue1\/Music ~\/Music\nln -s \/mnt\/c\/Users\/cyue1\/Pictures ~\/Pictures\nln -s \/mnt\/c\/Users\/cyue1\/Favorites ~\/Favorites\nln -s \/mnt\/c\/Users\/cyue1\/Videos ~\/Videos\n\n# \u7e41\u9ad4\u4e2d\u6587\u6dfb\u52a0\u76ee\u9304\u8a2d\u7f6e\uff08optional)\nrm -rf \u4e0b\u8f09 \u5716\u7247 \u5f71\u7247 \u6587\u4ef6 \u97f3\u6a02\nln -s Documents \u6587\u4ef6\nln -s Downloads \u4e0b\u8f09\nln -s Music \u97f3\u6a02\nln -s Pictures \u5716\u7247\nln -s Videos \u5f71\u7247\n<\/code><\/pre>\n<h2>1. \u5de5\u5177\u74b0\u5883\uff1aAOSP Tools &amp; Envelopment Settings<\/h2>\n<h3>1.1 setup repo &amp; python<\/h3>\n<pre><code class=\"language-shell\">sudo wget https:\/\/storage.googleapis.com\/git-repo-downloads\/repo \nsudo mv repo \/usr\/local\/bin\/repo \nsudo chmod a+rx \/usr\/local\/bin\/repo\nsudo ln -s \/usr\/bin\/python3 \/usr\/local\/bin\/python<\/code><\/pre>\n<h3>1.2 get some tools<\/h3>\n<pre><code class=\"language-shell\"># get tools\nsudo apt install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig ninja-build python3-pip\n\n# usb control:\nsudo usermod -aG plugdev $LOGNAME\nsudo apt install android-sdk-platform-tools-common\n<\/code><\/pre>\n<h3>1.3 set git name &amp; email for android.googlesource.com<\/h3>\n<pre><code class=\"language-shell\">git config --global user.email \"cyue12@google.com\"\ngit config --global user.name \"cyue12\"  <\/code><\/pre>\n<h3>1.4  Gen. <code>android.googlesource.com<\/code> keys (optional)<\/h3>\n<ol>\n<li>browse &amp; login with your google account :<\/li>\n<\/ol>\n<pre><code>https:\/\/android.googlesource.com\/new-password<\/code><\/pre>\n<ol start=\"2\">\n<li>get and execute your password script generated from website:<\/li>\n<\/ol>\n<pre><code class=\"language-shell\">eval 'set +o history' 2>\/dev\/null || setopt HIST_IGNORE_SPACE 2>\/dev\/null\n touch ~\/.gitcookies\n chmod 0600 ~\/.gitcookies\n\n git config --global http.cookiefile ~\/.gitcookies\n\n tr , \\\\t <<\\__END__ >>~\/.gitcookies\nandroid.googlesource.com,FALSE,\/,TRUE,2147483647,o,git-cyue12.gmail.com=1\/\/0g_qocQb1SED6CgYIARAAGBASNwF-L9IrNF3Ig-VWzWAvMP_Ve8jstFG-B2VhmNf6QeotHF9uaw86IxkITTqsAe0L2v_wQtLxApo\nandroid-review.googlesource.com,FALSE,\/,TRUE,2147483647,o,git-cyue12.gmail.com=1\/\/0g_qocQb1SED6CgYIARAAGBASNwF-L9IrNF3Ig-VWzWAvMP_Ve8jstFG-B2VhmNf6QeotHF9uaw86IxkITTqsAe0L2v_wQtLxApo\n__END__\neval 'set -o history' 2>\/dev\/null || unsetopt HIST_IGNORE_SPACE 2>\/dev\/null\n<\/code><\/pre>\n<h2>2. \u53d6\u5f97 AOSP \u7684\u5009\u5eab\u8cc7\u6e90<\/h2>\n<p>make aosp path:<\/p>\n<pre><code class=\"language-shell\">mkdir aosp\ncd aosp<\/code><\/pre>\n<p><code>repo init<\/code> with <code>a<\/code> path for your account, then sync paralleling<\/p>\n<pre><code class=\"language-shell\">#repo init -u https:\/\/android.googlesource.com\/a\/platform\/manifest\nrepo init -u https:\/\/android.googlesource.com\/a\/platform\/manifest -c -b master\nrepo sync -c -j20<\/code><\/pre>\n<blockquote>\n<ul>\n<li>\n<p>fail on repo? try <code>-j1 --fail-fast<\/code> again&#8230;:<\/p>\n<pre><code class=\"language-shell\">repo sync -c -j1 --fail-fast<\/code><\/pre>\n<\/li>\n<li>\n<p>hint: normal repo without keys from 1.4<\/p>\n<pre><code class=\"language-shell\">repo init -u https:\/\/android.googlesource.com\/platform\/manifest -c -b master\nrepo sync -c -j20<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/blockquote>\n<h2>3. \u9078\u64c7RiscV\u5957\u9910\u5efa\u7acb\u5de5\u7a0b<\/h2>\n<pre><code class=\"language-shell\"># 1. AOSP \u74b0\u5883\u53c3\u6578\u8a2d\u7f6e\ncd ~\/aosp\n. build\/envsetup.sh\n\n# 2. \u9078\u64c7 cuttlefish riscv64 \u5957\u9910\nlunch 10\n\n# 3. \u5148\u5168\u901f\uff0c\u5931\u6557\u518d\u7528\u7cfb\u7d71\u53ef\u7a69\u5b9a\u904b\u884c\u901f\u5ea6\u7de8\u8b6f\n#m -j all\nm -j14 all<\/code><\/pre>\n<h2>4. \u70ba RiscV64\u7684Cuttlefish\u5efa\u69cb\u6700\u65b0QEMU<\/h2>\n<blockquote>\n<ul>\n<li>\u8981\u8db3\u5920\u65b0\u7684QEMU\u624d\u80fd\u9032\u884c RiscV64\u7684\u6a21\u64ec\uff0c\u9019\u88e1\u9078 8.0.4\u3002<\/li>\n<li>\u81ea\u884c\u7de8\u8b6f\u5b89\u88dd\u7684QEMU\u5728\u904b\u884c Cuttlefish\u6642\uff0c\u8981\u6307\u5b9aqemu\u5b89\u88dd\u4f4d\u7f6e\u53c3\u6578\u3002\u5982\u9810\u8a2d\u7684\u5b89\u88dd\u4f4d\u7f6e\uff1a<br \/>\n<code>-qemu_binary_dir=\/usr\/local\/bin<\/code><\/li>\n<\/ul>\n<\/blockquote>\n<ol>\n<li>\n<p>software &amp; update app: on &quot;Ubuntu Software&quot; tab, check &quot;Source code&quot; item.<br \/>\n<img decoding=\"async\" src=\"https:\/\/dav2.go2see.co\/md-pics\/image-20230822141654937.png\" alt=\"image-20230822141654937\" \/><\/p>\n<\/li>\n<li>\n<p>then add qemu dependencies: <\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-shell\">sudo apt build-dep qemu -y<\/code><\/pre>\n<ol start=\"3\">\n<li>(optional) add more supporting lib for qemu:<\/li>\n<\/ol>\n<pre><code class=\"language-shell\">sudo apt install libusb-dev libsdl2-dev libsdl2-image-dev libjpeg-dev libpng-dev pulseaudio alsa virgl-server libsasl2-dev libopengl-dev  iasl indent flex bison<\/code><\/pre>\n<ol start=\"4\">\n<li>download \/ build \/ install QEMU:<\/li>\n<\/ol>\n<pre><code class=\"language-shell\">wget https:\/\/download.qemu.org\/qemu-9.0.2.tar.xz\ntar -xvf qemu-9.0.2.tar.xz\n\ncd qemu-9.0.2\/\nmkdir build\ncd build\n\n..\/configure\nmake -j\nsudo make install\n<\/code><\/pre>\n<ol start=\"5\">\n<li>The default install path is \/usr\/local, thus the <strong>qemu_binary_dir<\/strong> parament of cuttlefish willbe &#8216;<strong>\/usr\/local\/bin<\/strong>&#8216;.<\/li>\n<\/ol>\n<h2>5. \u5b89\u88dd CuttleFish<\/h2>\n<ol>\n<li>\u5728\u7ec8\u7aef\u7a97\u53e3\u4e2d\uff0c\u4e0b\u8f7d\u3001\u6784\u5efa\u548c\u5b89\u88c5\u4e3b\u673a Debian \u8f6f\u4ef6\u5305\uff1a<\/li>\n<\/ol>\n<pre><code class=\"language-shell\">cd ~\n  ## 1. prepare tools\n  sudo apt install -y git devscripts config-package-dev debhelper-compat golang curl ssh\n\n  ## 2. get git\n  git clone https:\/\/github.com\/google\/android-cuttlefish\n\n  ## 3. build deb\n  cd android-cuttlefish\n  ## cyue add line, skip '@v1.31':\n  sed -i 's\/protoc-gen-go@v1.31\/protoc-gen-go\/g' frontend\/debian\/rules\n  for dir in base frontend; do\n    cd $dir\n    debuild -i -us -uc -b -d\n    cd ..\n  done\n\n  ## 4. install deb, *-orchestration conflicts with *-user, remark it...\n  sudo dpkg -i .\/cuttlefish-base_*_*64.deb || sudo apt-get install -f -y\n  sudo dpkg -i .\/cuttlefish-user_*_*64.deb || sudo apt-get install -f -y\n  sudo dpkg -i .\/cuttlefish-common_*_*64.deb || sudo apt-get install -f -y\n  sudo dpkg -i .\/cuttlefish-integration_*_*64.deb || sudo apt-get install -f -y\n  #sudo dpkg -i .\/cuttlefish-orchestration_*_*64.deb || sudo apt-get install -f -y\n\n  ## 5. set cvd w\/ kvm, then reboot to enable\n  sudo usermod -aG kvm,cvdnetwork,render $USER\n  sudo reboot\n<\/code><\/pre>\n<p>cuttlefish-integration \u6703\u5b89\u88dd qemu\uff0c\u4f46\u7cfb\u7d71\u7684qemu\u592a\u8001\u4e86\uff0c\u9700\u8981\u81ea\u884c\u7de8\u8b6f\u6700\u65b0\u7684qemu\u624d\u80fd\u8dd1riscv64\u3002\u5be6\u6e2c qemu 8.0.4 OK\u3002  <\/p>\n<p>\u91cd\u542f\u4f1a\u89e6\u53d1\u5b89\u88c5\u989d\u5916\u7684\u5185\u6838\u6a21\u5757\u5e76\u5e94\u7528<code>udev<\/code>\u89c4\u5219\u3002<\/p>\n<p>RISCV64\u7684 cultterfish \u672a\u5b8c\u6210\uff0c\u8a31\u591a\u529f\u80fd\u4e0d\u53ef\u884c\uff0c\u4f46\u53ef\u4ee5\u7528VNC\u9023\u63a5\u986f\u793a\u3002<\/p>\n<h2>6. \u904b\u884c Cuttlefish\u6a21\u64ec\u74b0\u5883\uff0c\u4e26\u900f\u904eVNC\u63a7\u5236\u6a21\u64ec<\/h2>\n<ol>\n<li>launch cuttlefish emulator<\/li>\n<\/ol>\n<pre><code class=\"language-shell\">cd ~\/aosp\n. build\/envsetup.sh\nlunch 10\n\nlaunch_cvd -cpus=8 --memory_mb=8192 --gpu_mode=drm_virgl \\\n-qemu_binary_dir=\/usr\/local\/bin \\\n--display=width=1366,height=768 \\\n--start-webrtc=true<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p>VNC screen. TigerVnc: connect to: <strong>locallhost:6444<\/strong><br \/>\n<img decoding=\"async\" src=\"https:\/\/dav2.go2see.co\/md-pics\/image-20230822012909849.png\" alt=\"image-20230822012909849\" \/> <\/p>\n<\/li>\n<li>\n<p>about 5 minutes&#8230;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/dav2.go2see.co\/md-pics\/image-20230822013040433.png\" alt=\"image-20230822013040433\" \/><\/p>\n<\/li>\n<\/ol>\n<hr \/>\n<hr \/>\n<h2>Ref:  gpg &#8211;import key<\/h2>\n<p>call:<\/p>\n<pre><code class=\"language-shell\">gpg --import<\/code><\/pre>\n<p>then cut-n-copy following to the program and press <code>^D<\/code> to setup GPG<br \/>\nkey<\/p>\n<pre><code class=\"language-shell\">-----BEGIN PGP PUBLIC KEY BLOCK-----\nVersion: GnuPG v1.4.2.2 (GNU\/Linux)\n\nmQGiBEnnWD4RBACt9\/h4v9xnnGDou13y3dvOx6\/t43LPPIxeJ8eX9WB+8LLuROSV\nlFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66\/TZmPewS4m782ndtw7\n8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD\nu4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z\nwNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq\n\/HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9\/I1S5\njU5SA\/9WwIps4SC84ielIXiGWEqq6i6\/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4\nMGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l\/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9\nb\/aF\/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv\naWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k\ncm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX\ngAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI\n2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV\/0Bo9WiByJ9WJ5swMN36\/vAl\nQN4mWRhfzDOk\/Rosdb0csAO\/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up\nhisyEmmHv6U8gUb\/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L\/KvP5x+oCJIDbk\nC2b1TvVk9PryzmE4BPIQL\/NtgR1oLWm\/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX\nLWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+\nOgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf\/8AAwUIAJPWsB\/M\npK+KMs\/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s\nKZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c\/KsjADtAuKW9\/d8phb\nN8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA\nvUXRwm\/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo\nG1S8fXgE0Lq3cdDM\/GJ4QXP\/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ\nhN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l\nEXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=\n=Wi5D\n-----END PGP PUBLIC KEY BLOCK-----\n<\/code><\/pre>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>Build AOSP on ubuntu20.04 over ASUS Laptop 0. Prepare U&#8230; &raquo; <a class=\"read-more-link\" href=\"https:\/\/vm1.go2see.me\/?p=485\">\u95b1\u8b80\u5168\u6587<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,10,11,18],"tags":[],"class_list":["post-485","post","type-post","status-publish","format-standard","hentry","category-android","category-embedded","category-linux","category-risc-v"],"_links":{"self":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts\/485","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485"}],"version-history":[{"count":25,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts\/485\/revisions"}],"predecessor-version":[{"id":490,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts\/485\/revisions\/490"}],"wp:attachment":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}