build.sh
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
export KDIR=../../linux-5.17.5
export BOXDIR=../../busybox-1.35.0
set -e
build_kernel() {
make -C $KDIR vexpress_defconfig
make -C $KDIR zImage dtbs -j8
cp $KDIR/arch/arm/boot/zImage .
cp $KDIR/arch/arm/boot/dts/vexpress-v2p-ca9.dtb .
}
create_rootfs_ext2() {
dd if=/dev/zero of=rootfs.img bs=1024 count=10240
mkfs.ext2 rootfs.img
mount -o loop rootfs.img /mnt
cp -r $BOXDIR/_install/* /mnt
# 创建4个tty设备(c代表字符设备,4是主设备号,1~4分别是次设备号)
mkdir -p /mnt/dev
mknod /mnt/dev/tty1 c 4 1
mknod /mnt/dev/tty2 c 4 2
mknod /mnt/dev/tty3 c 4 3
mknod /mnt/dev/tty4 c 4 4
# 创建终端和回收站
mknod -m 666 /mnt/dev/console c 5 1
mknod -m 666 /mnt/dev/null c 1 3
umount /mnt
}
build_busybox() {
make -C $BOXDIR menuconfig
make -C $BOXDIR -j8
make -C $BOXDIR install
}
load_qemu() {
qemu-system-arm \
-M vexpress-a9 \
-m 256M \
-nographic \
-kernel zImage \
-dtb vexpress-v2p-ca9.dtb \
-sd rootfs.img \
-append "root=/dev/mmcblk0 rw console=ttyAMA0"
}
quick_test() {
echo "quick test"
}
if [ $1 = "1" ]; then
build_kernel
elif [ $1 = "2" ]; then
build_busybox
elif [ $1 = "3" ]; then
create_rootfs_ext2
elif [ $1 = "4" ]; then
load_qemu
elif [ $1 = "t" ]; then
quick_test
fi
创建自己的 defconfig
如果我们面对一个新的平台, 如何从头开始配置 menuconfig, 导出 defconfig 呢, 我们以 vexpress-v2p-ca9 为例子来创建一个可以运行的 defconfig 的配置吧
- 明确平台
kernel 的 menuconfig 运行前首先得确定平台架构, 因此
export ARCH=arm
make menuconfig
进去后可以看到
System Type --->
[*] MMU-based Paged Memory Management Support
ARM system type (Allow multiple platforms to be selected) --->
Multiple platform selection --->
默认选的是支持 MMU 的芯片的, 当去掉这个也就编译给那些不支持 MMU 的设备了, 去掉这个后, Multiple platform selection ---> 选择就没有了, 将显示
System Type --->
[ ] MMU-based Paged Memory Management Support
ARM system type (ARMv7-M based platforms (Cortex-M0/M3/M4)) --->
这时支持的是基于 ARMv7-M 平台的芯片, 无 MMU.
但现在主要看有 MMU 的平台芯片, 因此重新选择 MMU, 展开 Multiple platform selection --->
Multiple platform selection --->
*** CPU Core family selection **
[ ] ARMv6 based platforms (ARM11)
[*] ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)
默认是基于 ARMv7 的平台, 也是比较经典的 ARM 架构了.
进入
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make -j8 zImage dtbs
ls arch/arm/boot/dts/*.dtb
算了, 比较麻烦, 根据 make vexpress_defconfig
改就行了, 因为我们一般拿到厂家的 kernel 后也是这样改的.
make vexpress_defconfig
make menuconfig
# 进行一些修改后, 保存最简化版本
make savedefconfig
cp defconfig arch/arm/configs/board_new_defconfig
# 以后基于 board_new_defconfig 修改, 然后使用该配置
make board_new_defconfig
内核配置参考 这篇文章
-
make help
有很多有用的提示
比如提示可以使用 UI 界面来配置
make xconfig
依赖sudo apt-get install qttools5-dev
make gconfig
依赖sudo apt-get install libglade2-dev
https://www.cnblogs.com/CtripDBA/p/12290071.html
fuelgauge: ltc2944@64 {
compatible = "lltc,ltc2944";
reg = <0x64>;
lltc,resistor-sense = <15>;
lltc,prescaler-exponent = <5>; /* 2^(2*5) = 1024 */
};
网友评论