1, Preliminary preparation for environmental construction
-
1.1
Download the Ubuntu 20.iso installation image
Download VMware 15 virtual machine management software -
1.2
Install Ubuntu 20 environment, 8core, 16G memory, 500G hard disk
Install common tools
sudo apt-get update
sudo apt-get install vim net-tools openssh-server
2, Download the source code of android 9
This paper adopts the method of domestic Tsinghua source
The process is as follows:
- Configure environment variables
#Install GIT and configure your git account sudo apt-get install git curl git config --global user.email "xxxx@xx.com" git config --global user.name "xxxx" #Configure PATH environment variable mkdir ~/bin echo "PATH=~/bin:\$PATH" >> ~/.bashrc source ~/.bashrc
- Download repo
PATH=~/bin:$PATH curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo chmod a+x ~/bin/repo
- Download AOSP-8 source code
#Create and initialize the aosp warehouse directory mkdir aosp cd aosp repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r1 --repo-url=https://gerrit-googlesource.lug.ustc.edu.cn/git-repo #Synchronization code repo sync
Error 1 reported in the process:
robot@ubuntu:~/aosp$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r1 --repo-url=https://gerrit-googlesource.lug.ustc.edu.cn/git-repo Downloading Repo source from https://gerrit-googlesource.lug.ustc.edu.cn/git-repo fatal: unable to access 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo/': server certificate verification failed. CAfile: none CRLfile: none repo: error: "git" failed with exit status 128 cwd: /home/robot/aosp/.repo/repo cmd: ['git', 'fetch', '--quiet', '--progress', 'origin', '+refs/heads/*:refs/remotes/origin/*', '+refs/tags/*:refs/tags/*'] fatal: cloning the git-repo repository failed, will remove '.repo/repo'
terms of settlement
robot@ubuntu:~/aosp$ git config --global http.sslverify false robot@ubuntu:~/aosp$ git config --global https.sslverify false
Error 2 in process:
robot@ubuntu:~/aosp81$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.5.0_r1 --repo-url=https://gerrit-googlesource.lug.ustc.edu.cn/git-repo /usr/bin/env: 'python': No such file or directory
terms of settlement:
Install python 2.7 and set the default choice of python version
sudo apt install python2.7 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2 //Ubuntu 20 is the python version installed by default
After resolving the error:
robot@ubuntu:~/aosp81$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r1 --repo-url=https://gerrit-googlesource.lug.ustc.edu.cn/git-repo Downloading manifest from https://aosp.tuna.tsinghua.edu.cn/platform/manifest remote: Enumerating objects: 6434, done. remote: Counting objects: 100% (6434/6434), done. remote: Compressing objects: 100% (2445/2445), done. remote: Total 91787 (delta 3304), reused 6049 (delta 3074) Receiving objects: 100% (91787/91787), 21.52 MiB | 47.90 MiB/s, done. Resolving deltas: 100% (34756/34756), done. Your identity is: dtltljb <ljb@lqtech.com> If you want to change this, please re-run 'repo init' with --config-name Testing colorized output (for 'repo diff', 'repo status'): black red green yellow blue magenta cyan white Enable color display in this user account (y/N)? y repo has been initialized in /home/robot/aosp81
- Synchronization source code error 1
error: Unable to fully sync the tree. error: Downloading network changes failed. Try re-running with "-j1 --fail-fast" to exit at the first error.
- Solution 1
robot@ubuntu:~/aosp81$ repo sync -j1 --fail-fast Fetching: 26% (156/592) platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9
4, Install dependent packages and update installation sources
- Update the Tsinghua source of the installation source to improve the speed of subsequent installation of dependent packages
sudo vim /etc/apt/source.list
Append the following to the end of the file.
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
Then execute the following command
source /etc/apt/source.list
sudo apt-get update
sudo apt-get upgrade
- Install and compile dependent packages
sudo apt-get install -y libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 sudo apt-get install -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 sudo apt-get install -y git-core gnupg flex bison gperf build-essential sudo apt-get install -y zip curl zlib1g-dev gcc-multilib g++-multilib sudo apt-get install -y libc6-dev-i386 sudo apt-get install -y lib32ncurses5-dev x11proto-core-dev libx11-dev sudo apt-get install -y libgl1-mesa-dev libxml2-utils xsltproc unzip m4 sudo apt-get install -y lib32z-dev ccache sudo apt-get install -y libssl-dev sudo apt-get install -y libncurses5 ## Install all libraries at once sudo apt-get install -y libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib flex bison gperf build-essential libncurses5-dev:i386 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libgl1-mesa-dev libxml2-utils xsltproc unzip m4 lib32z-dev ccache libncurses5
- Install openjdk1.8
sudo apt install openjdk-8-jdk
5, Compiling aosp-8 source code
- Initialize compilation environment variables
source build/envsetup.sh luanch
Select 6 to compile AOSP_ x86_ 64 eng is the android image of x86-64 environment.
Set the compilation target through the lunch instruction, that is, what kind of device the generated image will run on. The simulator is an X86 platform and will run faster. You can also use the compilation target name here, such as lunch AOSP_ x86_ 64 eng, because the compilation target names and sequence numbers of different versions are different.
Format of compilation target: BUILD-BUILDTYPE, such as AOSP above_ x86_ The BUILD of 64 eng is aosp_x86_64. BUILDTYPE is Eng. BUILD refers to the specific name of the combination of specific functions, which indicates the environment in which the compiled image can run. aosp(Android Open Source Project) represents Android open source project; Arm means that the system is running on the processor of arm architecture, arm64 means 64 bit arm architecture processor, and x86 means x86 architecture processor. BUILD TYPE refers to the compilation type. There are usually three types:
-user: This means that the compiled system image is a version that can be officially released to the market, and its permission is limited (for example, no) root Permission, cannot dedug Etc.) -userdebug: stay user Version based on the open root Permissions and debug jurisdiction. -eng: representative engineer,That is, the version of the so-called development engineer has the greatest authority( root And so on), in addition, there are many attached debug Tools.
- compile
make -j8
#This parameter is related to the number of computer cpu cores. It is usually determined according to the core of your machine's cup: core*2.
- Compilation error 1:
[ 0% 75/89253] Ensuring Jack server is installed and started FAILED: setup-jack-server /bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar 2>&1 || (exit 0) ) && (JACK_SERVER_VM_ARGUMENTS=\"-Dfile.encoding=UTF-8 -XX:+TieredCompilation\" prebuilts/sdk/tools/jack-admin start-server 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update server prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar 4.11.ALPHA 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools/jacks/jack-4.32.CANDIDATE.jar 4.32.CANDIDATE || exit 47 )" Jack server already installed in "/home/robot/.jack-server" Launching Jack server java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/robot/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log SSL error when connecting to the Jack server. Try 'jack-diagnose' SSL error when connecting to the Jack server. Try 'jack-diagnose' ninja: build stopped: subcommand failed. 22:29:09 ninja failed with: exit status 1 #### failed to build some targets (05:31 (mm:ss)) ####
- Solution 1:
Two modifications are made here. One is SSL error when connecting to the Jack server. Try 'Jack diagnose', and the other is an error
I may forget the record.
Modify the jack server port address as follows:
(1) robot@ubuntu:~$ cat .jack-settings # Server settings SERVER_HOST=localhost SERVER_PORT_SERVICE=27755 ## Port number here SERVER_PORT_ADMIN=27765 # Internal, do not touch SETTING_VERSION=4 (2) robot@ubuntu:~$ cat .jack-server/config.properties # #Fri Oct 15 22:18:39 PDT 2021 jack.server.idle=180 jack.server.max-service.by-mem=1\=2147483648\:2\=3221225472\:3\=4294967296 jack.server.shutdown=21600 jack.server.time-out=7200 jack.server.max-jars-size=104857600 jack.server.service.port=27755 ## Port number here jack.server.admin.port=27765 jack.server.config.version=4 jack.server.max-service=4 jack.server.deep-idle=900
Amend the second paragraph to read as follows:
The file path is as follows:
prebuilts/sdk/tools/jack-admin
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx8000M -cp $LAUNCHER_JAR $LAUNCHER_NAME" A: prebuilts/sdk/tools/jack-admin File, in JACK_SERVER_COMMAND="...... -cp ......" -cp Add before-Xmx8000m(8000m About half of the memory size, depending on the host configuration used) B: By viewing files $HOME/.jack-server/logs/jack-server-*.log
JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096M}"
Common commands for testing Jack server
jack-admin kill-server/start-server Command, look start-server Whether it can run successfully.
- Compilation error 2:
File "build/tools/merge-event-log-tags.py", line 51 except getopt.GetoptError, err: ^ SyntaxError: invalid syntax
-
Solution 2:
Set the version of Python 2.7 as the default version -
Compilation error 3:
[ 0% 54/87502] Lex: applypatch <= bootable/recovery/edify/lexer.ll FAILED: out/target/product/generic_x86_64/obj/STATIC_LIBRARIES/libedify_intermediates/lexer.cpp /bin/bash -c "prebuilts/misc/linux-x86/flex/flex-2.5.39 -oout/target/product/generic_x86_64/obj/STATIC_LIBRARIES/libedify_intermediates/lexer.cpp bootable/recovery/edify/lexer.ll" flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed. Aborted (core dumped) [ 0% 61/87502] build out/target/common/obj/JAVA_LIBRARIES/sdk_v21_intermediates/classes.jack ninja: build stopped: subcommand failed. 02:14:44 ninja failed with: exit status 1
- Solution 3:
Add export LC at the end of ~ /. bashrc_ ALL=C
Compilation success result record
warning: no entries written for string/next_action (0x7f0902d7) warning: no entries written for string/done_action (0x7f0902d8) warning: no entries written for string/account_folder_list_summary_starred (0x7f0902d9) warning: no entries written for string/account_folder_list_summary_drafts (0x7f0902da) warning: no entries written for string/account_folder_list_summary_outbox (0x7f0902db) warning: no entries written for string/exchange_name (0x7f0902dc) warning: no entries written for plurals/message_view_attachment_bytes (0x7f110015) warning: no entries written for plurals/message_view_attachment_kilobytes (0x7f110016) warning: no entries written for plurals/message_view_attachment_megabytes (0x7f110017) warning: no entries written for plurals/message_view_attachment_gigabytes (0x7f110018) [ 90% 79449/87443] target Strip (mini debug info): mdnsd (out/target/product/generic_x86_64/obj/EXECUTABLES/mdnsd_intermediates/mdnsd) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/system/bin/mdnsd: no symbols [ 90% 79491/87443] target Strip (mini debug info): micro_bench_static (out/target/product/generic_x86_64/obj/EXECUTABLES/micro_bench_static_intermediates/micro_bench_static64) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/system/xbin/micro_bench_static64: no symbols [ 91% 79593/87443] target Strip (mini debug info): mke2fs_static (out/target/product/generic_x86_64/obj/EXECUTABLES/mke2fs_static_intermediates/mke2fs_static) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/recovery/root/sbin/mke2fs_static: no symbols [ 91% 79594/87443] target Strip (mini debug info): e2fsdroid_static (out/target/product/generic_x86_64/obj/EXECUTABLES/e2fsdroid_static_intermediates/e2fsdroid_static) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/recovery/root/sbin/e2fsdroid_static: no symbols [ 91% 79719/87443] target Strip (mini debug info): charger (out/target/product/generic_x86_64/obj/EXECUTABLES/charger_intermediates/charger) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/sbin/charger: no symbols [ 91% 79886/87443] target Strip (mini debug info): init (out/target/product/generic_x86_64/obj/EXECUTABLES/init_intermediates/init) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/init: no symbols [ 91% 79910/87443] target Strip (mini debug info): recovery (out/target/product/generic_x86_64/obj/EXECUTABLES/recovery_intermediates/recovery) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/recovery/root/sbin/recovery: no symbols [ 91% 80087/87443] target Strip (mini debug info): micro_bench_static_32 (out/target/product/generic_x86_64/obj_x86/EXECUTABLES/micro_bench_static_intermediates/micro_bench_static) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/system/xbin/micro_bench_static: no symbols [ 94% 82281/87443] target Strip (mini debug info): simpleperf (out/target/product/generic_x86_64/obj/EXECUTABLES/simpleperf_intermediates/simpleperf) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/system/xbin/simpleperf: no symbols [ 94% 82332/87443] target Strip (mini debug info): simpleperf_32 (out/target/product/generic_x86_64/obj_x86/EXECUTABLES/simpleperf_intermediates/simpleperf32) prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-nm: out/target/product/generic_x86_64/symbols/system/xbin/simpleperf32: no symbols [ 94% 82721/87443] //hardware/interfaces/neuralnetworks/1.0:android.hardware.neuralnetworks@1.0 header-abi-diff android.hardware.neuralnetworks@1.0.so.abidiff ****************************************************** VNDK Abi broken: Please check compatiblity report at : out/soong/.intermediates/hardware/interfaces/neuralnetworks/1.0/android.hardware.neuralnetworks@1.0/android_x86_64_shared_core/android.hardware.neuralnetworks@1.0.so.abidiff ***************************************************** [ 96% 84379/87443] //hardware/interfaces/neuralnetworks/1.0:android.hardware.neuralnetworks@1.0 header-abi-diff android.hardware.neuralnetworks@1.0.so.abidiff [x86] ****************************************************** VNDK Abi broken: Please check compatiblity report at : out/soong/.intermediates/hardware/interfaces/neuralnetworks/1.0/android.hardware.neuralnetworks@1.0/android_x86_x86_64_shared_core/android.hardware.neuralnetworks@1.0.so.abidiff ***************************************************** [ 97% 85659/87443] //frameworks/av/media/libstagefright/codecs/mpeg2dec:libstagefright_soft_mpeg2dec header-abi-diff libstagefright_soft_mpeg2dec.so.abidiff [x86] ****************************************************** VNDK Abi broken: Please check compatiblity report at : out/soong/.intermediates/frameworks/av/media/libstagefright/codecs/mpeg2dec/libstagefright_soft_mpeg2dec/android_x86_x86_64_shared_core/libstagefright_soft_mpeg2dec.so.abidiff ***************************************************** [ 98% 86114/87443] Target userdata fs image: out/target/product/generic_x86_64/userdata.img Running: mkuserimg.sh out/target/product/generic_x86_64/data out/target/product/generic_x86_64/userdata.img ext4 data 576716800 -D out/target/product/generic_x86_64/system -L data out/target/product/generic_x86_64/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin make_ext4fs -T -1 -S out/target/product/generic_x86_64/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin -L data -l 576716800 -a data out/target/product/generic_x86_64/userdata.img out/target/product/generic_x86_64/data out/target/product/generic_x86_64/system Creating filesystem with parameters: Size: 576716800 Block size: 4096 Blocks per group: 32768 Inodes per group: 7040 Inode size: 256 Journal blocks: 2200 Label: data Blocks: 140800 Block groups: 5 Reserved block group size: 39 Created filesystem with 89/35200 inodes and 12365/140800 blocks out/target/product/generic_x86_64/userdata.img maxsize=588791808 blocksize=2112 total=576716800 reserve=5947392 [ 99% 87431/87443] build out/target/product/generic_x86_64/obj/NOTICE.xml Combining NOTICE files into text Combining NOTICE files into XML [ 99% 87434/87443] build out/target/product/generic_x86_64/obj/NOTICE_VENDOR.xml Combining NOTICE files into text Combining NOTICE files into XML [ 99% 87438/87443] Target vendor fs image: out/target/product/generic_x86_64/vendor.img Running: mkuserimg.sh out/target/product/generic_x86_64/vendor out/target/product/generic_x86_64/vendor.img ext4 vendor 100000000 -D out/target/product/generic_x86_64/system -L vendor out/target/product/generic_x86_64/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin make_ext4fs -T -1 -S out/target/product/generic_x86_64/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin -L vendor -l 100000000 -a vendor out/target/product/generic_x86_64/vendor.img out/target/product/generic_x86_64/vendor out/target/product/generic_x86_64/system Creating filesystem with parameters: Size: 99999744 Block size: 4096 Blocks per group: 32768 Inodes per group: 6112 Inode size: 256 Journal blocks: 1024 Label: vendor Blocks: 24414 Block groups: 1 Reserved block group size: 7 Created filesystem with 371/6112 inodes and 5567/24414 blocks out/target/product/generic_x86_64/vendor.img maxsize=102091968 blocksize=2112 total=99999744 reserve=1032768 [ 99% 87439/87443] Create vendor-qemu.img 1+0 records in 2048+0 records out 1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00485287 s, 216 MB/s 95+1 records in 96+0 records out 100663296 bytes (101 MB, 96 MiB) copied, 0.0745038 s, 1.4 GB/s 1048576+0 records in 1048576+0 records out 1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.714193 s, 1.5 MB/s Creating new GPT entries. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot. The operation has completed successfully. Setting name! partNum is 0 REALLY setting name! Warning: The kernel is still using the old partition table. The new table will be used at the next reboot. The operation has completed successfully. [ 99% 87441/87443] Target system fs image: out/target/product/generic_x86_64/obj/PACKAGING/systemimage_intermediates/system.img Running: mkuserimg.sh out/target/product/generic_x86_64/system out/target/product/generic_x86_64/obj/PACKAGING/systemimage_intermediates/system.img ext4 system 2684354560 -D out/target/product/generic_x86_64/system -L system out/target/product/generic_x86_64/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin make_ext4fs -T -1 -S out/target/product/generic_x86_64/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin -L system -l 2684354560 -a system out/target/product/generic_x86_64/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/generic_x86_64/system out/target/product/generic_x86_64/system Creating filesystem with parameters: Size: 2684354560 Block size: 4096 Blocks per group: 32768 Inodes per group: 8192 Inode size: 256 Journal blocks: 10240 Label: system Blocks: 655360 Block groups: 20 Reserved block group size: 159 Created filesystem with 2634/163840 inodes and 301781/655360 blocks [ 99% 87442/87443] Install system fs image: out/target/product/generic_x86_64/system.img out/target/product/generic_x86_64/system.img+ maxsize=2740556544 blocksize=2112 total=2684354560 reserve=27684096 [100% 87443/87443] Create system-qemu.img 1+0 records in 2048+0 records out 1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00495976 s, 211 MB/s 2560+0 records in 2560+0 records out 2684354560 bytes (2.7 GB, 2.5 GiB) copied, 15.0664 s, 178 MB/s 1048576+0 records in 1048576+0 records out 1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.709724 s, 1.5 MB/s Creating new GPT entries. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot. The operation has completed successfully. Setting name! partNum is 0 REALLY setting name! Warning: The kernel is still using the old partition table. The new table will be used at the next reboot. The operation has completed successfully. #### build completed successfully (01:25:40 (hh:mm:ss)) #### robot@ubuntu:~/aosp81$
6, Verify compilation results
- Run simulator
source build/envsetup.sh lunch 6 emulator
So far, the kernel development environment of Android 8.1 compiled by ourselves has been built.
Reference link:
https://harmonyos.51cto.com/posts/7977,
Thank you very much for your efforts.