Most recent test was done with kernel v4.7-rc1 on 2016-06-01, it even has SD/MMC card support and all, pin control and GPIO started working.
I got this board from some Qualcomm guys at the Embedded Systems Conference "Design West" in San Jose in april 2012. Here is some idiomatic terminology you need:
- The SoC used is an APQ8060, it means this is a MSM8x60 variant without modem, because the DragonBoard doesn't do 3G data or voicecalls, no. So it's a so-called "application processor" only.
- The RS232 serial port is set at 115200 baud. USB-to-serial dongles didn't work for me, you might need a real serial port. Just open the console and play around. If you need to be root on the default software just hit su and play around. It's this quite restricted Android shell.
This board only talks the fastboot boot protocol. (No U-Boot or such.) So you need to get this tool. On Fedora, simply:
yum install android-tools
This will get you the command-line tool fastboot.
To get the board into fastboot mode so that a new kernel (or image, or whatever) can be uploaded to it, remove the battery connector and DC plug so that the board is completely unpowered, then press and hold down the 5 key on the keypad while inserting the DC plug. At this point the board is in the state where you can run the fastboot command line.
Split the supplied boot image and boot the parts
There are various tools for peeling apart the supplied boot.img into its constituents. The one that finally worked for me was named unpackbootimg, and produced a number of files, most notably the kernel zImage and the ramdisk. When you have these parts the following magic boots it:
fastboot -b 40200000 -c "console=ttyHSL0,115200,n8 androidboot.hardware=qcom" -p 2048 boot boot.img-zImage boot.img-ramdisk.gz
Boot a mainline Linux kernel
With some hands-on a mainline Linux kernel can actually boot to prompt on the Dragonboard since v3.14-rc1. Some bugs were introduced with the switch to mach-qcom in kernel v3.15 but should be fixed in kernel v3.17.
SOLVED IN v4.9-rc1 no more ugly fixes needed:
On my Dragonboard there was a problem with the ATAGs passed to the kernel:
these indicate that the first memory area is at 0x40200000-0x42dfffff
but Linux needs to boot from an even memory boundary, 0x40200000 will not
work. For this reason you need to apply this
ugly patch (older version for
mach-msm)that adjusts the first ATAG to claim memory
0x40000000-0x42dfffff instead. I don't know if newer little
kernels (the thing that runs fastboot) are fixed in this regard.
To compile a fresh APQ8060 DragonBoard kernel you first need a cross compiler such as the Linaro GCC toolchain. Then you can use my makefile and my rootfs CPIO image (in case you're interested that was generated using this script) in the main Linux source tree (with the mentioned patch) like this:
linux$ make -f apq8060.mak config && make -f apq8060.mak build
Here are pre-compiled images that you can use and test if you like:
So to boot a mainline kernel all you need is to replace the boot.img-zImage with something freshly compiled. However the TTY name is also changed in mainline from ttyHSL to ttyMSM so the parameter needs changing. Actually, with a mainline zImage kernel all you need is:
fastboot -b 40200000 -c "console=ttyMSM0,115200,n8" boot zImage
After this your board should boot to prompt on the serial port.
Kernel TODO list
The kernel efforts are based on the vendor tree, currently a v3.4 kernel. It is very unclear if Qualcomm will ever attempt to forward-port this kernel tree to newer kernels than v3.4, especially for APQ8060/MSM8660. You can clone the vendor tree like this:
git clone git://codeaurora.org/quic/la/kernel/msm linux-msm cd linux-msm git checkout -b android-msm-3.4 refs/heads/q3.4/android-msm-3.4
While that is happening or not happening, I am sometimes working with the upstream support for this chipset according to the TODO list:
- Main and CPU boards:
Create a proper DTS file (merged for v4.8) Enable pin controller in defconfig (patch merged for v4.8) Fix bug in RPM driver for APQ8060/MSM8660 (patch1 and patch2 sent, merged) Set up all regulators for the board (patch merged for v4.8) Set up the keypad from PM8058 (patch merged for v4.8) Add a LED driver for the PM8058 LEDs (patch v2 merged for v4.9) Add the LEDs for the PM8058 to the DT (patch merged for v4.9) Get the RPM driver to retrieve and enable message RAM clock (patch merged for v4.9)
- Make the SDC5 slot work (WTF?)
- Enable BAM DMA on the MMS/SD blocks
- Enable the EBI2 and SMSC Ethernet on top of it
Augment the TLMM pin controller to handle the EBI2 lines (patch merged for v4.8) Augment the GCC clock controller to handle the EBI2 clocks (2 of them, patch merged for v4.8) Define DT bindings for the EBI2 (patch, v6, merged for v4.9) Create an EBI2 driver in drivers/bus/ (patch, v5, merged for v4.9) Augment DT bindings for SMSC911x to account for RESET and PME lines (patch, v3, merged for v4.9) Add RESET GPIO handling to SMSC911x (patch, v3, merged for v4.9)
- Create Dragonboard DT entries for all the above (patch exists, target v4.10)
- Bonus: add PME interrupt handling to SMSC911 - requires working system suspend to be tested
- Enable slave USB HS on the Mini USB connector
- Enable audio on the Woolfson Micro codec WM8903
- Enable battery charging
- Sensor board:
Enable IIO driver for AK8975 magnetometer (patch merged for v4.8)
- Enable IIO driver for BMP085 pressure sensor (patch exists for v4.8)
Add VDDD and VDDA to the DT bindings (patch merged for v4.8) Support device tree initialization (patch merged for v4.8) Add RESET GPIO line handling (patch merged for v4.8) Add support for getting supply regulators (patch merged for v4.8) Split driver in logical parts (patch merged for v4.8) Split off an I2C Kconfig entry (patch merged for v4.8) Add an SPI interface driver (patch merged for v4.8) Add support for the optional BMP085 EOC interrupt (patch merged for v4.8)> Add power management (patch merged for v4.8) Read calibration data once (patch merged for v4.8) Fix my own bug introduced in the runtime PM hooks (damned, patch, merged for v4.8) DELETE the old misc driver for BMP085 (patch, merged for v4.9)
- Add triggered buffer handling
- Create IIO driver for MPU-3050 gyroscope sensor (new driver in IIO needed)
- Enable IIO driver for KXSD9 accelerometer sensor
Create DT bindings for KXSD9 (patch, merged for v4.8) Fix raw return bug (patch, merged for v4.8) Fix scaling bug (patch, merged for v4.9) Split out transport mechanism (patch, merged for v4.9) Split out a common .remove() function (patch, merged for v4.9) Split out SPI transport (patch, merged for v4.9) Do away with the write2 helper (patch, merged for v4.9) Convert to use regmap for transport (patch, merged for v4.9) Add I2C transport (patch, merged for v4.9) Drop the buffer lock (patch, merged for v4.9) Fix up offset and scaling (patch, merged for v4.9) Add triggered buffer handling (patch, merged for v4.9) Deploy proper register bit defines (patch, merged for v4.9) Fetch and handle regulators (patch, merged for v4.9) Replace "parent" with "dev" (patch, merged for v4.9) Deploy system and runtime PM (patch, merged for v4.9) Support reading a mounting matrix (patch, merged for v4.9)
- Create DragonBoard device tree entries for the KXSD9 (requires MPU-3050 driver gate to be merged first)
- Create IIO driver for CM3605 proximity and ALS sensor
- Connectivity Card:
- Enable Bluetooth chip
- Enable Wireless chip
- Display and camera:
- Enable MSM DRM driver
- Enable Freedreno GPU driver
- Enable display output
- Enable touchscreen input
- Enable HDMI output
- Enable front camera
- Enable back camera
Building all of Android or just the stock kernel
This is pretty painful.
- Install repo from Google
- Retrieve and sync the source code something like so, and wait for some hours until it's sync:ed out:
mkdir android cd android repo init -u git://codeaurora.org/platform/manifest.git -b ics_chocolate -m default.xml --repo-url=git://codeaurora.org/tools/repo.git repo sync
- yum install perl-Switch zip curl gcc gcc-c++ flex bison gperf glibc-devel zlib-devel ncurses-devel libX11-devel libstdc++ libsx-devel readline-devel libXrender libXrandr
- Install Make 3.81 locally somewhere, e.g.:
mkdir /var/android-build cd /var/android-build tar xvfz make-3.81.tar.gz cd make-3.81 ./configure ./build.sh
- Install Sun's (Oracle's) JDK
- export PATH=/usr/java/jdk1.6.0_32/bin:/var/android-build/make-3.81:$PATH
- export LD_LIBRARY_PATH=/usr/java/jdk1.6.0_32/lib
- source build/envsetup.sh
- choosecombo, choose release, msm8660_surf, eng using the figures
- make -j9 kernel (if you have 8 cores, like me, rule is # of cores +1)
- If you are lucky the whole shebang will build in due time and the build products stack up in out/target/product/msm8660_surf
- Note: I only got this to the point of building that kernel and boot.img
- Compile Android On Fedora 15/16 By Xoomdev
- Working with the Qualcomm APQ8060 DragonBoard development board by some guy called "follower" who tries to use the MacOS to develop for it, seems to be a rational thinking being, that's good...