Initial commit
This commit is contained in:
commit
ebf1078b43
7 changed files with 259 additions and 0 deletions
50
0001-make-ektf3k-driver-report-non-MT-events-too.patch
Normal file
50
0001-make-ektf3k-driver-report-non-MT-events-too.patch
Normal file
|
@ -0,0 +1,50 @@
|
|||
From ad8725fb07407deb688813e075b05e790dac2878 Mon Sep 17 00:00:00 2001
|
||||
From: Seth Forshee <seth.forshee@canonical.com>
|
||||
Date: Tue, 18 Feb 2014 23:07:22 +1100
|
||||
Subject: [PATCH] make ektf3k driver report non-MT events too
|
||||
|
||||
Change-Id: Ia4f05b33f06d7a8fc74e65330f9c41df8a8ba7a9
|
||||
---
|
||||
drivers/input/touchscreen/ektf3k.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/ektf3k.c b/drivers/input/touchscreen/ektf3k.c
|
||||
index 4b6a7e7..28fee64 100755
|
||||
--- a/drivers/input/touchscreen/ektf3k.c
|
||||
+++ b/drivers/input/touchscreen/ektf3k.c
|
||||
@@ -967,6 +967,7 @@ static void elan_ktf3k_ts_report_data(struct i2c_client *client, uint8_t *buf)
|
||||
fbits = fbits >> 1;
|
||||
idx += 3;
|
||||
}
|
||||
+ input_mt_report_pointer_emulation(ts->input_dev, true);
|
||||
input_sync(idev);
|
||||
} // checksum
|
||||
else {
|
||||
@@ -1017,6 +1018,7 @@ static void elan_ktf3k_ts_report_data2(struct i2c_client *client, uint8_t *buf)
|
||||
fbits = fbits >> 1;
|
||||
idx += 3;
|
||||
}
|
||||
+ input_mt_report_pointer_emulation(ts->input_dev, true);
|
||||
input_sync(idev);
|
||||
} // checksum
|
||||
else {
|
||||
@@ -1542,11 +1544,15 @@ static int elan_ktf3k_ts_probe(struct i2c_client *client,
|
||||
}
|
||||
ts->input_dev->name = "elan-touchscreen";
|
||||
|
||||
- //set_bit(BTN_TOUCH, ts->input_dev->keybit);
|
||||
+ set_bit(BTN_TOUCH, ts->input_dev->keybit);
|
||||
ts->abs_x_max = pdata->abs_x_max;
|
||||
ts->abs_y_max = pdata->abs_y_max;
|
||||
touch_debug(DEBUG_INFO, "[Elan] Max X=%d, Max Y=%d\n", ts->abs_x_max, ts->abs_y_max);
|
||||
|
||||
+ input_set_abs_params(ts->input_dev, ABS_X, pdata->abs_y_min, pdata->abs_y_max, 0, 0); // for 800 * 1280
|
||||
+ input_set_abs_params(ts->input_dev, ABS_Y, pdata->abs_x_min, pdata->abs_x_max, 0, 0); // for 800 * 1280
|
||||
+ input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, MAX_FINGER_PRESSURE, 0, 0);
|
||||
+
|
||||
input_mt_init_slots(ts->input_dev, FINGER_NUM);
|
||||
input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, pdata->abs_y_min, pdata->abs_y_max, 0, 0); // for 800 * 1280
|
||||
input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, pdata->abs_x_min, pdata->abs_x_max, 0, 0);// for 800 * 1280
|
||||
--
|
||||
1.8.5.3
|
||||
|
107
README
Normal file
107
README
Normal file
|
@ -0,0 +1,107 @@
|
|||
# Arch Linux on Nexus 7 Flo Native
|
||||
|
||||
Here are my instructions on getting Arch Linux ARM natively booting on the
|
||||
Nexus 7 Flo. Ideally this would be booting from a usb stick or a dedicated
|
||||
partition on the mmc but this is working for me now. Once I get a bluetooth
|
||||
keyboard I will try to get it working from a usb stick.
|
||||
|
||||
## BUGS!!!
|
||||
There is no frambuffer console :(
|
||||
If you cannot get it booting you will need to
|
||||
reboot into recovery and check /proc/last_kmsg for the errors. Or try and build
|
||||
the UART cable (which I failed at)
|
||||
|
||||
There is only xf86-video-fbdev working and no DRM or anything fancy
|
||||
|
||||
The Software Refresher in the kernel does not work. You will need to run my
|
||||
refresher app or fix the kernel :)
|
||||
|
||||
1: I roughly followed the instructions form
|
||||
https://github.com/borh/nexus-7-2013-arch-scripts to get a working chroot
|
||||
first.
|
||||
|
||||
2: Edit the init script to point to your arch.img or partition
|
||||
|
||||
3: Edit and Run makebootimage.sh
|
||||
|
||||
4: fastboot boot newboot
|
||||
|
||||
5: ???
|
||||
|
||||
6: Profit
|
||||
|
||||
## To get WiFi Working
|
||||
|
||||
A normal Nexus 7 Flo boot will call /system/bin/conn_init which does a whole
|
||||
lot of verifying your mac address and then writes out a config with the mac
|
||||
address in it. Very annoying. To get around this you need a copy of the wifi
|
||||
configs and manually enable the wifi driver since it does not start on boot.
|
||||
The firmware.service is only needed since I do not load the firmware in the
|
||||
initramfs (which I am haven't done yet)
|
||||
|
||||
1: Copy /system/vendor/firmware [android] to /usr/lib/firmware [arch]
|
||||
2: rm /usr/lib/firmware/wlan/prima/{WCNSS_qcom_cfg.ini,WCNSS_qcom_wlan_nv.bin} <-- these are simlinks
|
||||
3: cp /data/misc/wifi/{WCNSS_qcom_cfg.ini,WCNSS_qcom_wlan_nv.bin} /usr/lib/firmware/wlan/prima/ <-- these are the files which conn_init writes your mac address to
|
||||
|
||||
4: Copy firmware.service to /etc/systemd/system/
|
||||
5: ln -s /etc/systemd/system/firmware.service /etc/systemd/system/multi-user.target.wants/firmware.service
|
||||
|
||||
6: Create a wpa_supplicant-nl80211@wlan0.service with your wpa_supplicant.conf
|
||||
details
|
||||
7: ln -s /etc/systemd/system/dhcpcd.service /etc/systemd/system/multi-user.target.wants/dhcpcd.service
|
||||
8: ln -s /etc/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/sshd.service
|
||||
|
||||
NOTE: The wifi drivers are really flakey. You might have better luck with a
|
||||
static ip. If anything fails reboot into recovery and check /proc/last_kmsg
|
||||
|
||||
## To get X working
|
||||
Since there is no framebuffer console you cannot start X manually (unless you
|
||||
are able to get ssh working, see above) Auto login is your friend.
|
||||
|
||||
Be sure to install a window manager or something first and then follow
|
||||
https://wiki.archlinux.org/index.php/Automatic_login_to_virtual_console and
|
||||
https://wiki.archlinux.org/index.php/Start_X_at_Login
|
||||
|
||||
Your .xinitrc should contain something like
|
||||
~/refresher &
|
||||
exec awesome
|
||||
|
||||
## Refreshing (refresher.c)
|
||||
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.
|
||||
|
||||
# Kernel stuff
|
||||
|
||||
## To get Touchscreen working
|
||||
Apply 0001-make-ektf3k-driver-report-non-MT-events-too.patch
|
||||
|
||||
## Kernel configs
|
||||
I used the following additional configs to get this working. Some might not be
|
||||
necessary but it helps with debugging
|
||||
|
||||
I havent figured out how to get fbdev working with RGBA8888 so use RGB565 for
|
||||
now
|
||||
|
||||
CONFIG_FB_MSM_DEFAULT_DEPTH_RGB565=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_IPC_NS=y
|
||||
CONFIG_USER_NS=y
|
||||
CONFIG_PID_NS=y
|
||||
CONFIG_NET_NS=y
|
||||
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
|
||||
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
|
||||
|
||||
## Build initramfs
|
||||
1: Edit makebootimage.sh with paths
|
||||
2: cd systemd-initramfs; find . | cpio -o -H newc | gzip > ../minimal.initramfs
|
||||
3: ./makebootimage.sh
|
6
makebootimage.sh
Executable file
6
makebootimage.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
KERNEL=~/android/system/out/target/product/flo/kernel
|
||||
INITRAMFS=minimal.initramfs
|
||||
|
||||
~/android/system/out/host/linux-x86/bin/mkbootimg --kernel $KERNEL --cmdline "console=ttyHSL0,115200,n8 console=tty1 androidboot.hardware=flo user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3 selinux=0" --base 0x80200000 --pagesize 2048 --ramdisk_offset 0x02000000 --ramdisk $INITRAMFS --output newboot
|
65
refresher.c
Normal file
65
refresher.c
Normal file
|
@ -0,0 +1,65 @@
|
|||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <getopt.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include <linux/fb.h>
|
||||
|
||||
struct fb_info{
|
||||
int fd;
|
||||
void *ptr;
|
||||
struct fb_var_screeninfo var;
|
||||
struct fb_fix_screeninfo fix;
|
||||
};
|
||||
|
||||
void fb_getinfo(struct fb_info *fb_info){
|
||||
printf("fb res %dx%d virtual %dx%d, line_len %d\n",
|
||||
fb_info->var.xres, fb_info->var.yres,
|
||||
fb_info->var.xres_virtual, fb_info->var.yres_virtual,
|
||||
fb_info->fix.line_length);
|
||||
printf("dim %dmm x %dmm\n", fb_info->var.width, fb_info->var.height);
|
||||
printf("xoffset %d yoffset %d\n", fb_info->var.xoffset, fb_info->var.yoffset);
|
||||
}
|
||||
int fb_open(struct fb_info *fb_info){
|
||||
|
||||
int fd = open("/dev/fb0", O_RDWR);
|
||||
|
||||
if(fd < 0){
|
||||
printf("Failed to open fb\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
fb_info->fd = fd;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void flip_buffer(struct fb_info *fb_info, int n){
|
||||
if( ioctl(fb_info->fd, FBIOPAN_DISPLAY, &fb_info->var) < 0 ){
|
||||
printf("Failed FBIOPAN_DISPLAY\n");
|
||||
}
|
||||
}
|
||||
int main(int argc, char *argv[]){
|
||||
|
||||
setpriority(PRIO_PROCESS, 0, -20);
|
||||
|
||||
struct fb_info fb_info;
|
||||
fb_open(&fb_info);
|
||||
|
||||
while(1){
|
||||
flip_buffer(&fb_info,0);
|
||||
usleep(16666);
|
||||
}
|
||||
return 0;
|
||||
}
|
1
systemd-initramfs/init
Symbolic link
1
systemd-initramfs/init
Symbolic link
|
@ -0,0 +1 @@
|
|||
sbin/init
|
BIN
systemd-initramfs/sbin/busybox1
Executable file
BIN
systemd-initramfs/sbin/busybox1
Executable file
Binary file not shown.
30
systemd-initramfs/sbin/init
Executable file
30
systemd-initramfs/sbin/init
Executable file
|
@ -0,0 +1,30 @@
|
|||
#!/sbin/busybox1 sh
|
||||
|
||||
_PATH="$PATH"
|
||||
export BB=/sbin/busybox1
|
||||
|
||||
cd /
|
||||
|
||||
$BB mount -t devtmpfs devtmpfs /dev -o mode=0755,nosuid
|
||||
|
||||
$BB mkdir /dev/pts
|
||||
$BB mkdir /dev/socket
|
||||
|
||||
$BB mount -t proc proc /proc -o nosuid,noexec,nodev
|
||||
$BB mount -t sysfs sys /sys -o nosuid,noexec,nodev
|
||||
|
||||
$BB mdev -s
|
||||
|
||||
$BB mount -t ext4 /dev/mmcblk0p30 /data
|
||||
|
||||
$BB mknod /dev/loop256 b 7 256
|
||||
$BB losetup /dev/loop256 /data/arch.img
|
||||
$BB mount -t ext4 -o rw,noatime /dev/loop256 /data/arch
|
||||
|
||||
$BB mkdir /cache
|
||||
$BB mount -t ext4 /dev/mmcblk0p23 /cache
|
||||
|
||||
export PATH="${_PATH}"
|
||||
|
||||
#exec /sbin/init2
|
||||
exec /sbin/busybox1 switch_root /data/arch /sbin/init
|
Loading…
Reference in a new issue