2022-06-23

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 */
};

你可能感兴趣的:(2022-06-23)