|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <stdint.h> |
|
|
|
#include <fcntl.h> |
|
#include <sys/mount.h> |
|
#include <sys/stat.h> |
|
#include <sys/sysmacros.h> |
|
#include <linux/kd.h> |
|
#include <unistd.h> |
|
|
|
void fpwrite(const char *f, const char *s) { |
|
FILE *fi = fopen(f, "w"); |
|
if (!fi) { |
|
return; |
|
} |
|
fprintf(fi, "%s", s); |
|
fclose(fi); |
|
} |
|
|
|
int main() { |
|
mkdir("/dev", 0755); |
|
mkdir("/proc", 0755); |
|
mkdir("/sys", 0755); |
|
|
|
mount("devtmpfs", "/dev", "devtmpfs", MS_NOSUID, "mode=0755"); |
|
mount("proc", "/proc", "proc", 0, NULL); |
|
mount("sysfs", "/sys", "sysfs", 0, NULL); |
|
|
|
fpwrite("/sys/class/android_usb/android0/enable", "0"); |
|
fpwrite("/sys/class/android_usb/android0/idVendor", "18d1"); |
|
fpwrite("/sys/class/android_usb/android0/idProduct", "4ee2"); |
|
fpwrite("/sys/class/android_usb/android0/functions", "acm"); |
|
fpwrite("/sys/class/android_usb/android0/f_acm/instances", "1"); |
|
fpwrite("/sys/class/android_usb/android0/enable", "1"); |
|
fpwrite("/sys/class/android_usb/android0/iManufacturer", "Xiaomi"); |
|
fpwrite("/sys/class/android_usb/android0/iProduct", "Redmi"); |
|
fpwrite("/sys/class/android_usb/android0/iSerial", "0123456789ABCDEF"); |
|
|
|
{ |
|
mknod("/dev/ttyGS0", 0777 | S_IFCHR, makedev(233, 0)); |
|
int fd; |
|
if ((fd = open("/dev/ttyGS0", O_RDWR)) < 0) { |
|
fd = open("/dev/null", O_RDWR); |
|
} |
|
ioctl(fd, TIOCSCTTY, 0); |
|
dup2(fd, 0); |
|
dup2(fd, 1); |
|
dup2(fd, 2); |
|
} |
|
|
|
symlink("/dev/ttyGS0", "/dev/console"); |
|
|
|
setenv("LD_LIBRARY_PATH", "/lib:/usr/lib:/sbin", 1); |
|
setenv("PATH", "/usr/sbin:/usr/bin:/sbin:/bin", 1); |
|
|
|
execl("/sbin/sh", "/sbin/sh", NULL); |
|
} |