Merge branch 'willcast-master'

This commit is contained in:
crondog 2014-07-17 09:58:04 +10:00
commit 17be5e12fc
7 changed files with 180 additions and 7 deletions

View File

@ -33,6 +33,29 @@ first.
6: Profit
## Booting with MultiROM
You will need to follow the guide at http://forum.xda-developers.com/showthread.php?t=2457063 first.
1: The initcpio hooks have been modified to support this, so if you were using the old ones, you have to replace them with the new. You currently can't boot the same installation via both fastboot and MultiROM.
2: Boot the Nexus into Android recovery mode. Make sure /data is mounted. /data/media/0/multirom cannot be seen from normal Android.
3: Create a ROM folder for ArchLinuxARM.
adb shell mkdir /data/media/0/multirom/roms/ArchLinuxARM
4: Push the included rom_info.txt file. (it's a plaintext config file documented at https://github.com/Tasssadar/multirom/wiki/Add-support-for-new-ROM-type)
adb push rom_info.txt /data/media/0/multirom/roms/ArchLinuxARM/
5: Move your root image to /data/media/0/multirom/roms/ArchLinuxARM/root.img
6: Make sure you have the kernel and ramdisk in /data/media/0/multirom/roms/ArchLinuxARM/boot/vmlinuz and /data/media/0/multirom/roms/ArchLinuxARM/boot/initrd.img.
6a: Mount the image, and copy them (with the same name) to /boot/ in it.
## To get WiFi Working
A normal Nexus 7 Flo boot will call /system/bin/conn_init which does a whole
@ -55,7 +78,22 @@ initramfs (which I am haven't done yet)
Note: Disable the wpa_supplicant hook in /etc/dhcpcd.conf
## To get fbterm console
# Setting up shared Wi-Fi configuration between Arch and Android
1: Make sure /data is mounted at boot:
mkdir /data
echo '/dev/disk/by-partlabel/userdata /data ext4 errors=remount-ro 0 0' >> /etc/fstab
mount /data
2: Forcibly symlink the Android wpa_supplicant.conf to the Linux location.
ln -fs /data/misc/wifi/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-nl80211-wlan0.conf
3: Create a name for the Android wifi group
groupadd -g $(stat -c '%g' /data/misc/wifi) -r android_wifi
4: Add your main user to said group, so you can access the control sockets. You will need to manually their path if you want to edit the WiFi network configureation.
## To get fbterm console
Copy fbterm/getty@.service to /etc/systemd/system/ and fbterm/fbterm-login to
/opt/fbterm-login and then systemctl enable getty@tty1.service
@ -75,6 +113,18 @@ exec awesome
Since the MSMFB_SW_REFRESHER does not seem to be working i wrote this instead.
Just compile and put in you ~/ or whereever so xinit can run it.
You can also use the included systemd unit file for the refresher.
## Enabling ADB and RNDIS (reverse USB tethering)
1: Create this link for ADB to be able to find the shell, etc.
ln -s / /system
2: Add the included systemd-tmpfiles config files. They go in /etc/tmpfiles.d, and require a reboot to apply them.
ADB shell works, but you will need to set the size ($COLUMNS and $LINES) and terminal type ($TERM) manually.
To use RNDIS, plug the Nexus into a computer and bridge the virtual ethernet adapter with your local network. Then, bring up the link and get an address as usual. The interface name should be 'usb0'.
# Kernel stuff
You can use the kernel from here https://github.com/crondog/kernel_msm
@ -93,7 +143,21 @@ messages is still a no go as the device is registered too late to work
I used the following additional configs to get this working. Some might not be
necessary but it helps with debugging
Required for display/graphics:
CONFIG_FB_MSM_DEFAULT_DEPTH_BGRA8888 (with RGBA patch from robclark)
CONFIG_DRM=y
CONFIG_MSM_KGSL_DRM=y
Required for Wi-Fi/network:
CONFIG_ANDROID_PARANOID_NETWORK=n
CONFIG_MODULES=y
CONFIG_PRIMA_WLAN=y
CONFIG_WCNSS_CORE=y
Required to boot:
CONFIG_FHANDLE=y
CONFIG_DEVTMPFS=y
CONFIG_UTS_NS=y
@ -104,13 +168,20 @@ CONFIG_NET_NS=y
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
Debugging:
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_ATOMIC_SLEEP=y
CONFIG_STACKTRACE=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_LOG_BUF_SHIFT=21
CONFIG_PANIC_TIMEOUT=0
If you use the kernel at https://github.com/crondog/kernel_msm, there is a default configuration named flo_defconfig which contains most of the needed options.
## Build initramfs (Manually)
1: Edit makebootimage.sh with paths
@ -129,6 +200,9 @@ CONFIG_SECURITY_SELINUX_BOOTPARAM=y
# Whats Working
Wifi
ADB
USB Reverse Tethering/RNDIS (guest)
USB OTG (host)
fb0
Audio -- Need to setup Pulse Audio as systemwide. Not sure why it does not work as a normal user
You will also need the alsaucm files from libasound2-data_1.0.27.2-1ubuntu6_all.deb

View File

@ -1,13 +1,43 @@
#!/usr/bin/ash
# You can set these variables manually inside their respective functions if
# you do not wish to boot using MultiROM:
#
# To boot using a loop-mounted image stored in /data as the root FS:
# loop=/path/to/arch.img
# loopfstype=ext4
#
# To boot using a bind-mounted subdirectory of /data as the root FS:
# rootsubdir=/local/arch
#
# loop= and rootsubdir= are relative to /data on Android, not /.
run_hook () {
mount_handler="img_mount_handler"
if [ -z "$rootsubdir" ]; then
if [ -z "$loop" ]; then
error "no loop= or rootsubdir= provided on cmdline"
return 1
else
msg "root is an image at: $loop"
mount_handler="img_mount_handler"
fi
else
msg "root is a subdirectory at: $rootsubdir"
mount_handler="dir_mount_handler"
fi
}
img_mount_handler() {
mkdir /data
mount -t ext4 /dev/mmcblk0p30 /data
mkdir /host
mount -t $rootfstype $root /host
mknod /dev/loop256 b 7 256
losetup /dev/loop256 /data/arch.img
mount -t ext4 -o rw,noatime /dev/loop256 /new_root
losetup /dev/loop256 /host/$loop
mount -t $loopfstype -o rw,noatime /dev/loop256 /new_root
}
dir_mount_handler() {
mkdir /host
mount -t $rootfstype $root /host
mount --bind /host/$rootsubdir /new_root
}

45
rom_info.txt Normal file
View File

@ -0,0 +1,45 @@
# This file contains info about ROMs capabilites and boot process.
# It should be placed in ROM's folder (eg. /media/multirom/roms/*rom_name*)
# and must be named "rom_info.txt".
# Make sure you got the syntax correct, as the parser is probably pretty
# dumb. Lines with comments must start with #. Beware the whitespaces.
# If you need to use " character in string, just use it, no need to escape it
# MultiROM searches for first and last " on the line.
# These comments should not be deleted.
# So far, the only supported ROM type for these files is kexec-based linux
type="kexec"
# Paths to root of the ROM.
# Both image and folder can be specified at one time, MultiROM will use
# the one which it can find. If both are present, folder is used.
# Must _not_ contain spaces.
# Path is from root of the root partition, but you will usually want
# to use following alias:
# - %m - ROM's folder (eg. /media/multirom/roms/*rom_name*)
root_dir="%m/root"
root_img="%m/root.img"
root_img_fs="ext4"
# Path to kernel and initrd. Kernel path _must_ be specified.
# Paths are relative to the folder in which is this file
# Those can be outside the root folder/image, or use %r if it is in there:
# kernel_path="%r/boot/vmlinuz"
# If ROM is in images, it will mount the image and load it from there.
# You can use * _at the end of the filename_ as wildcard character.
kernel_path="%r/boot/vmlinuz"
initrd_path="%r/boot/initrd.img"
# Set up the cmdline
# img_cmdline and dir_cmdline are appended to base_cmdline.
# Several aliases are used:
# - %b - base command line from bootloader. You want this as first thing in cmdline.
# - %d - root device. is either "UUID=..." (USB drive) or "/dev/mmcblk0p9" or "/dev/mmcblk0p10"
# - %r - root fs type
# - %s - root directory, from root of the root device
# - %i - root image, from root of the root device
# - %f - fs of the root image
base_cmdline="%b root=%d rootfstype=%r rw console=tty0 rootflags=defaults,noatime,nodiratime"
img_cmdline="loop=%i loopfstype=%f"
dir_cmdline="rootsubdir=%s"

11
system/adbd.service Normal file
View File

@ -0,0 +1,11 @@
[Unit]
Description=ADB Daemon
After=systemd-tmpfiles-setup.service
[Service]
Type=simple
ExecStart=/bin/bash -c '/sbin/adbd 2> /var/log/adbd.err 1> /var/log/adbd.out'
[Install]
WantedBy=basic.target
Before=network.service

10
system/refresher.service Normal file
View File

@ -0,0 +1,10 @@
[Unit]
Before=graphical.target
[Service]
Type=simple
ExecStart=/bin/refresher
[Install]
WantedBy=multi-user.target

3
tmpfiles.d/adbd.conf Normal file
View File

@ -0,0 +1,3 @@
w /sys/class/android_usb/android0/functions - - - - adb,rndis
w /sys/class/android_usb/android0/enable - - - - 1