返回> 网站首页 

licheepi-nano(荔枝派) - Linux编译

yoours2022-07-16 17:08:03 嵌入式 阅读 2457

简介一边听听音乐,一边写写文章。

一、编译环境

    1. 系统:ubuntu_22.04x64

    2. 编译源码

        a) uboot_2022.04

        b) linux_5.18

        c) buildroot_2022.05

    3. 部分配置文件

        arch/arm/Kconfig

        configs/licheepi_nano_defconfig

        arch/arm/dts/suniv-f1c100s-licheepi-nano.dts

    4. 交叉编译工具

        a) 工具地址

        https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads

        https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz

        b) 下载编译工具

        wget https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz

        tar -vxJf gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz

        sudo cp -r ./gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf /opt/

        c) 配置编译工具

        sudo vi /etc/bash.bashrc

        PATH="$PATH:/opt/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf/bin"

        d) 使路径生效

        source /etc/bash.bashrc

        e) 查看gcc版本

        arm-none-linux-gnueabihf-gcc -v

    5. 编译工具依赖

        sudo apt-get install git

        sudo apt-get install make

        sudo apt-get install gcc

        sudo apt-get install bison

        sudo apt-get install flex

        sudo apt-get install python3-distutils

        sudo apt-get install swig

        sudo apt-get install libpython3-dev

        sudo apt-get install libssl-dev

        sudo apt-get install libncurses-dev

        sudo apt-get install pkg-config

        sudo apt-get install build-essential

        sudo apt-get install cmake rsync unzip  bc

二、编译uboot

    1. g源码

        git clone https://github.com/u-boot/u-boot.git

        cd u-boot

    2. 查看分支

        git branch -a

    3. 切换到 v2022.04 分支

        git checkout v2022.04

    4. 编译命令

        make distclean  // 彻底清除工程之前编译的中间和配置文件

       make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- licheepi_nano_defconfig

       make ARCH=arm menuconfig  // 图形配置

       make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j8

    5. uboot参数

        a) 新建 uboot.cmd 文件,并写入以下内容:

            setenv bootargs console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw

            load mmc 0:1 0x80800000 zImage

            load mmc 0:1 0x80D00000 suniv-f1c100s-licheepi-nano.dtb

            bootz 0x80800000 - 0x80D00000

        b) 生成 boot.scr

            uboot --> tools -->mkimage ,通过该程序生成boot.scr

            mkimage -C none -A arm -T script -d boot.cmd boot.scr

            最后将其放入第一分区

        c) 手动启动方法

            fatload mmc 0:1 ${scriptaddr} boot.scr; source ${scriptaddr}

        d) 修改头文件配置方法

            vi include/configs/suniv.h

            // 添加以下代码(mmc 0为TF卡,1是第一分区,文件系统为fat32,把zImage和dtb文件拷入DRAM)

            #define CONFIG_BOOTCOMMAND "fatload mmc 0:1 0x80800000 zImage; "  \

                            "fatload mmc 0:1 0x80D00000 suniv-f1c100s-licheepi-nano.dtb; " \

                            "bootz 0x80800000 - 0x80D00000;"

 

            // linux将使用uart0进行交互,等待5s重启,根文件系统在mmc0(tf卡)第二分区(EXT4),等待 mmc 设备初始化完成以后再挂载,开启读写权限

            #define CONFIG_BOOTARGS   "console=ttyS0,115200 panic=5 root=/dev/mmcblk0p2 rootwait rw"

             // 回到命令行

            make ARCH=arm menuconfig

            取消勾选 [] Enable a default value for bootcmd

            勾选 [v] Enable boot arguments;

        e) uboot命令下执行方法

        setenv bootcmd 'fatload mmc 0:1 0x80800000 zImage;fatload mmc 0:1 0x80D00000 suniv-f1c100s-licheepi-nano.dtb;bootz 0x80800000 - 0x80D00000;'

        saveenv

        f) uboot下查看环境变量信息

       printenv


三、sunxi-tools

    1. 下载安装

        sudo apt-get install libusb-1.0-0-dev

        git clone -b f1c100s-spiflash https://github.com/Icenowy/sunxi-tools.git

        cd sunxi-tools

        make && sudo make install

    2. 不插卡上电

        新到的一片 Nano ,基本上是上电无反应的,LCD亮但无内容。

        此时 Nano 自动进入fel下载模式,可以通过命令 sudo sunxi-fel ver 来确认有无成功进入fel模式。

        a)以 uboot file-with-spl形式进行(单次运行,调试用)

            sunxi-fel uboot /your/path/to/u-boot-sunxi-with-spl.bin 

        b)烧进 spi-flash (开机自启)

            sunxi-fel -p spiflash-write 0 /your/path/to/u-boot-sunxi-with-spl.bin

    3. fel模式进入方法

        为了不擦除之前烧录的u-boot固件,这里只能使用短接spi flash的1、4引脚后上电的方法。

四、linux

    1. git下载

        git clone -b v5.18 https://github.com/torvalds/linux.git

    2.配置

        /arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts

        /arch/arm/configs/f1c100s_nano_linux_defconfig

        make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- f1c100s_nano_linux_defconfig

        make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- menuconfig

    3.编译

        make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j8

        make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j8 INSTALL_MOD_PATH=out modules

        make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j8 INSTALL_MOD_PATH=out modules_install

    4. 编译设备树

        make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- dtbs

    5. 单独编译设备树

 ./scripts/dtc/dtc -I dts -O dtb -o suniv-f1c100s-licheepi-nano.dtb arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts

    6. 编译成功后,生成文件所在位置:

        内核img文件:./arch/arm/boot/zImage

        设备树dtb文件:./arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb

        modules文件夹:./out/lib/modules

    7. 备份配置文件

          make savedefconfig

          mv defconfig arch/arm/configs/xxx_defconfig


五、文件系统

    1. Buildroot下载

        wget https://buildroot.org/downloads/buildroot-2022.05.tar.gz

        tar xvf buildroot-2022.05.tar.gz

        cd buildroot-2022.05

    2.Buildroot安装依赖

        sudo apt-get install linux-headers-$(uname -r)

    3. Buildroot编译

        make menuconfig

    4. Buildroot配置

- Target options

  - Target Architecture (ARM (little endian))

  - Target Variant arm926t

- Toolchain

  - C library (musl) # 使用musl减小最终体积

- System configuration

  - Use syslinks to /usr .... # 启用/bin, /sbin, /lib的链接

  - Enable root login # 启用root登录

  - Run a getty after boot # 启用登录密码输入窗口

make

六、自定义ko驱动编译

1. Makefile

KERN_DIR =/root/2022/linux-6.0/


obj-m += testled.o


all:

make -C $(KERN_DIR) M=`pwd` modules


clean:

make -C $(KERN_DIR) M=`pwd` modules clean

#rm -rf modules.order


2. 编译和使用

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf-

insmod testled.ko

lsmod

rmmod

cat /proc/devices

cat /proc/modules


微信小程序扫码登陆

文章评论

2457人参与,0条评论