# linux-scripts **Repository Path**: xunknown/linux-scripts ## Basic Information - **Project Name**: linux-scripts - **Description**: 提供脚本编译和运行Linux和BusyBox,主要目的是在源码目录外编译。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-05-05 - **Last Updated**: 2024-08-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: shell ## README 提供脚本编译和运行Linux和BusyBox,主要目的是在源码目录外编译。 准备工作: 1、安装交叉编译工具 2、安装qemu 3、下载Linux kernel源码并解压 4、下载Busybox源码并解压 以aarch64架构为例: 1、创建aarch64目录 2、将make-aarch64.sh,make-rootfs.sh,qemu-system-aarch64.sh脚本复制到aarch64目录 3、进入aarch64目录 4、配置Linux kernel编译选项 ./make-aarch64.sh -C -- defconfig 5、编译Linux kernel ./make-aarch64.sh -C -- all 这样就编译完成Linux kernel了。 6、配置Busybox编译选项 ./make-aarch64.sh -C -- menuconfig 在Busybox编译选项配置界面,配置静态链接选项。 或者使用LDFLAGS=-static选项也可以静态连接。 7、编译BusyBox ./make-aarch64.sh -C -- install ./make-aarch64.sh -C -- LDFLAGS=-static install 这样就编译完成BusyBox了。 8、创建根文件系统 ./make-rootfs.sh -s Busybox输出目录在当前目录可以找到。这样就创建一个名为rootfs.img的根文件系统文件。 9、运行验证一下效果 ./qemu-system-aarch64.sh -k Linux kernel输出目录在当前目录可以找到。 一切正常的话,qemu就会启动Linux,进入Busybox。 编译Linux module: ./make-aarch64.sh -C -M 正常情况下可以在ko源码目录找到编译好的ko文件。 mount根文件系统镜像文件,将该ko文件复制到根文件系统中,再次启动,可以测试ko。 也可以使用当前系统内核编译模块,注意需要加上无参数的-O选项: ./make-x86_64.sh -C -O 编译Linux工具,例如perf: /make-aarch64.sh -C ../../linux/linux-5.10.23/tools/perf/ -- LDFLAGS=-static 可以在--后面增加一些额外的编译选项,例如上面的静态链接选项。 使用u-boot启动arm: 1、参考https://www.jianshu.com/p/91baa4d140a2 2、安装tftp:sudo apt install tftp-hpa tftpd-hpa xinetd 默认tftp目录是/srv/tftp 3、编译u-boot: ./make-arm.sh -C ../../u-boot/u-boot-2021.01/ -- vexpress_ca9x4_defconfig ./make-arm.sh -C ../../u-boot/u-boot-2021.01/ 4、编译kernel uImage: ./make-arm.sh -C ~/Workspace/linux/linux-5.10.23 -- uImage LOADADDR=0x60003000 5、复制uImage和dtb文件到ftfp目录: sudo cp linux-5.10.23/arch/arm/boot/uImage /srv/tftp/ sudo cp linux-5.10.23/arch/arm/boot/dts/vexpress-v2p-ca9.dtb /srv/tftp/ 6、启动qemu,进入u-boot: qemu-system-arm -M vexpress-a9 -m 256 -kernel u-boot-2021.01/u-boot -nographic -net nic,macaddr=00:16:3e:00:00:01 -net tap -sd rootfs.img 注:如果命令失败,需要先配置qemu好网络,要用root用户执行命令。 su切换到root用户后,可以使用source /etc/profile命令重新配置环境变量。 7、在u-boot界面: 配置serverip和ipaddr: setenv serverip 192.168.3.2 setenv ipaddr 192.168.3.8 使用tftp加载uImage和dtb: tftp 0x60003000 uImage tftp 0x60500000 vexpress-v2p-ca9.dtb 配置启动参数,启动系统: setenv bootargs 'root=/dev/mmcblk0 console=ttyAMA0' bootm 0x60003000 - 0x60500000 正常情况下就可以进入shell了。 动态编译BusyBox: 1、使用默认config编译BusyBox: ./make-arm.sh -C ~/Workspace/busybox/busybox-1.32.1 -- defconfig ./make-arm.sh -C ~/Workspace/busybox/busybox-1.32.1 -- install 2、制作根文件系统时,需要复制对应gcc编译器的libc库: ./make-rootfs.sh -s busybox-1.32.1/ -lib /opt/gcc-linaro/arm-linux-guneabi/arm-linux-gnueabi/libc/lib/ 生成的rootfs.img可以正常使用。