下载
编译
- kernel
Kernel hacking --->
[*] Kernel debugging
Compile-time checks and compiler options --->
[*] Compile the kernel with debug info
[*] Provide GDB scripts for kernel debugging
Processor type and features ---->
[] Randomize the address of the kernel image (KASLR)
- busybox
Settings --->
[*] Build static binary (no shared libs)
make -j 8 && make install
- 打包ramdisk
# 进入Busybox源码的父目录
cd ..
mkdir ramdisk
cd ramdisk
# 注意最后的"."
cp -r ../busy-1.25.0/_install/* .
ln -s bin/busybox init
mkdir -pv {bin,sbin,etc,proc,sys,usr/{bin,sbin},dev}
cd etc
vim inittab
chmod +x inittab
将以下内容填入inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
创建rcS
mkdir init.d
cd init.d
vim rcS
chmod +x rcS
将以下内容填入rcS
#!/bin/sh
mount proc
mount -o remount,rw /
mount -a
clear
echo "My Tiny Linux Start :D ......"
创建etc/fstab,内容如下
# /etc/fstab
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devtmpfs /dev devtmpfs defaults 0 0
生产ramdisk
cd ramdisk
find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs.img
运行qemu
qemu-system-x86_64 -kernel linux-5.3.7/arch/x86_64/boot/bzImage -boot c -m 1024 -initrd initramfs.img -append "root=/dev/sda rw console=ttyS0, 115200 acpi=off nokaslr" -serial stdio -display none -s -S
adnroid emulator编译方法
https://www.owalle.com/2020/05/11/android-emulator/
https://www.codeinsideout.com/blog/android/build-aosp/#include-custom-kernel
kernel下载:
repo init -u https://android.googlesource.com/kernel/manifest -b q-goldfish-android-goldfish-4.14-dev --depth=1
kernel编译:
BUILD_CONFIG=goldfish/build.config.goldfish.x86_64 LTO=none build/build.sh
调试:
emulator -kernel ~/code/kernels/android-kernel/goldfish/arch/x86/boot/bzImage -verbose -no-snapshot -qemu -s -S
.gdbinit
add-auto-load-safe-path vmlinux-gdb.py
效果
avc_audit_pre_callback(struct audit_buffer * ab, void * a) (\home\w00456713\code\kernels\android-kernel\goldfish\security\selinux\avc.c:710)
common_lsm_audit(struct common_audit_data * a, void (*)(struct audit_buffer *, void *) pre_audit, void (*)(struct audit_buffer *, void *) post_audit) (\home\w00456713\code\kernels\android-kernel\goldfish\security\lsm_audit.c:459)
slow_avc_audit(u32 ssid, u32 tsid, u16 tclass, u32 requested, u32 audited, u32 denied, int result, struct common_audit_data * a, unsigned int flags) (\home\w00456713\code\kernels\android-kernel\goldfish\security\selinux\avc.c:771)
audit_inode_permission(struct inode * inode, u32 perms, u32 audited, u32 denied, int result, unsigned int flags) (\home\w00456713\code\kernels\android-kernel\goldfish\security\selinux\include\objsec.h:48)
selinux_inode_permission(struct inode * inode, int mask) (\home\w00456713\code\kernels\android-kernel\goldfish\security\selinux\hooks.c:3130)
security_inode_permission(struct inode * inode, int mask) (\home\w00456713\code\kernels\android-kernel\goldfish\security\security.c:700)
__inode_permission2(struct vfsmount * mnt, struct inode * inode, int mask) (\home\w00456713\code\kernels\android-kernel\goldfish\fs\namei.c:436)
inode_permission2(struct vfsmount * mnt, struct inode * inode, int mask) (\home\w00456713\code\kernels\android-kernel\goldfish\fs\namei.c:485)
inode_permission(struct inode * inode, int mask) (\home\w00456713\code\kernels\android-kernel\goldfish\fs\namei.c:491)
unix_find_other(struct net * net, struct sockaddr_un * sunname, int len, int type, unsigned int hash, int * error) (\home\w00456713\code\kernels\android-kernel\goldfish\net\unix\af_unix.c:932)
unix_stream_connect(struct socket * sock, struct sockaddr * uaddr, int addr_len, int flags) (\home\w00456713\code\kernels\android-kernel\goldfish\net\unix\af_unix.c:1264)
SYSC_connect(int fd, struct sockaddr * uservaddr, int addrlen) (\home\w00456713\code\kernels\android-kernel\goldfish\net\socket.c:1655)
SyS_connect(long fd, long uservaddr, long addrlen) (\home\w00456713\code\kernels\android-kernel\goldfish\net\socket.c:1636)
do_syscall_64(struct pt_regs * regs) (\home\w00456713\code\kernels\android-kernel\goldfish\arch\x86\entry\common.c:292)
entry_SYSCALL_64() (\home\w00456713\code\kernels\android-kernel\goldfish\arch\x86\entry\entry_64.S:233)
[Unknown/Just-In-Time compiled code] (未知源:0)