Начало работы со встроенным Linux 4-1. Litchi pie nano использует TF-карту для запуска Linux.

Следующее содержание — это лишь некоторые заметки, которые мне нужны, обратитесь к официальной документации Lichee pie для получения более подробной информации: http://nano.lichee.pro/get_started/first_eat.html

[Легко] Используйте сценарий в один клик для сборки системы на TF-карту

  1. Перейдите по следующему адресу, чтобы загрузить все содержимое папки Lichee Nano: https://pan.baidu.com/s/1smzuGS9.

  2. Перейдите в Lichee Nano/Mirror/Найдите нужную вам прошивку, Nano_pub_V4.zip я использую здесь

  3. Разархивируйте, введите под ним файл образа, чтобы найти нужный образ, здесь я использую Nano_tf_800480.dd

  4. Подключите TF-карту, используйте команду dd, чтобы скопировать образ на TF-карту (пользователи Windows используют программное обеспечение Win32DiskImager для записи)

    sudo dd of=tf卡路径 if=镜像文件路径
    

Готово, если это просто для простого использования, то не смотрите на следующий процесс.С этим методом есть проблема, то есть доступное пространство корневого каталога меньше 200M, а все пространство TF-карты использовать нельзя, но для простых приложений тоже годится.Достаточно, официальная документация тоже дает решение этой проблемы, см. главу "Запись пакета образа в один клик".

[Сложно] Вручную создайте систему на TF-карте Litchi Pie.

Хост-машина, которую я использовал для компиляции, — ubuntu20.04.

1. Устанавливаем цепочку кросс-компиляции

# 此处为获取7.2.1版本,您可获取其他版本或者通过链接直接下载
wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz

tar -vxJf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
sudo cp -r ./gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi /opt/

sudo vi /etc/bash.bashrc

# 在文件末尾 添加以下内容
PATH="$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin"
# 添加完毕

# 使路径生效
source /etc/bash.bashrc

#查询版本进行测试,如果成功会打印版本信息
arm-linux-gnueabi-gcc -v

2. Получите и скомпилируйте u-boot

  1. получить u-boot

    sudo apt-get install git
    git clone https://github.com/Lichee-Pi/u-boot.git
    cd u-boot
    
    # 查看分支
    git branch -a
    # 切换到 Nano 分支
    git checkout nano-v2018.01
    
  2. скомпилировать u-boot

    # 此处告知make采用arm-linux-gnueabi下的所有交叉编译工具,目标架构为Arm,设定各项默认配置为 nano 的spiflash支持版
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_spiflash_defconfig
    
    # 若不带spi-flash的板子,请换成 licheepi_nano_defconfig
    
    # 进行可视化配置,我没有配置,直接按默认就行了
    make ARCH=arm menuconfig
    
    # 开始编译
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
    

    После завершения компиляции найдите файл u-boot-sunxi-with-spl.bin в каталоге u-boot, который является записываемым файлом.

    Прикрепите некоторые неправильные решения (все, с чем я столкнулся)

    # 如果在可视化配置时提示 <command-line>: fatal error: curses.h: No such file or directory,进行如下一步来安装支持环境
    sudo apt-get install libncurses5-dev libncursesw5-dev
    
    # 如果在编译时提示/bin/sh: 1: python: not found,安装python即可
    sudo apt-get install python
    
    # 如果编译时提示unable to execute 'swig': No such file or directory,安装swig即可
    sudo apt-get install swig
    
    # 如果编译时提示fatal error: Python.h: No such file or directory,安装python-dev
    sudo apt-get install python-dev
    

  3. Allwinner F1C100s используется для записи u-boot Litchi Pi Nano, а официальный предоставляет инструмент для записи sunxi-tools, который используется для программирования чипа в режиме fel.
    Сначала вам нужно получить, скомпилировать и установить инструмент для записи:

    # 如果提示缺少libusb.h,要先安装libusb库
    sudo apt-get install libusb-1.0-0-dev
    
    # 如果提示缺少zlib.h,要先安装libusb库
    sudo apt-get install zlib1g-dev libssl-dev
    
    # 获取并编译安装sunxi-tools
    git clone -b f1c100s-spiflash https://github.com/Icenowy/sunxi-tools.git
    cd sunxi-tools
    make && sudo make install
    

    Потяните вниз контакт cs периферийного устройства spi1 на плате, а затем подключите USB, чтобы войти в режим fel , В это время выполните следующий процесс, чтобы записать u-boot:

    # 2.烧进 spi-flash (开机自启)
    sudo sunxi-fel -p spiflash-write 0 u-boot-sunxi-with-spl.bin所在路径
    

    После успешного программирования взаимодействуйте с командной строкой u-boot через контакты последовательного порта U0RX и U0TX основной платы.Скорость передачи данных по умолчанию составляет 115200 бод.

3. Создайте системный раздел TF-карты

Нужно построить два раздела на TF-карте

Раздел 1 используется для хранения файлов запуска системы и файлов, связанных с ядром, отформатированных как FAT, обычно требуется только 32 МБ места.

  • boot.scr (файл, который указывает u-boot для загрузки ядра)
  • zImage (системное ядро)
  • suniv-f1c100s-licheepi-nano.dtb (файл дерева устройств)

Раздел 2 используется для хранения корневой файловой системы, отформатированной как ext4, и выделяет все оставшееся пространство.

Используйте инструмент fdisk для форматирования

sudo fdisk -l     # 首先查看电脑上已插入的TF卡的设备号
sudo umount /dev/sdXx # 若自动挂载了TF设备,请先卸载
sudo fdisk /dev/sdX   # 进行分区操作
# 若已存分区即按 d 删除各个分区
# 通过 n 新建分区,第一分区暂且申请为32M(足够大了...),剩下的空间都给第二分区
# w 保存写入并退出
sudo mkfs.vfat /dev/sdX1 # 将第一分区格式化成FAT
sudo mkfs.ext4 /dev/sdX2 # 将第一分区格式化成EXT4

Используйте команду parted для просмотра отформатированных результатов

sudo parted -l

В-четвертых, настройте сценарий запуска u-boot.

Заранее откройте последовательный порт, соответствующий выходной командной строке u-boot платы nano, нажмите клавишу ввода, чтобы войти в командную строку u-boot, когда плата включена, а затем введите команду printenv для просмотра переменной среды. информация.Информация, которую я отображаю, выглядит следующим образом.После номера # мой Добавлено разъяснение ключевой информации:

arch=arm                              # 板子的架构
baudrate=115200                       # 命令行串口波特率
board=sunxi
board_name=sunxi
#略去中间大段信息
boot_scripts=boot.scr.uimg boot.scr   # 启动时寻找名为boot.scr.uimg或boot.scr的启动脚本
boot_targets=fel mmc0 usb0 pxe dhcp   # 启动介质的优先级优先从排在前面的介质引导系统
bootcmd=run distro_bootcmd            # 启动时要执行的指令?唔。。。不太明白
#略去后面信息

По переменной boot_scripts мы знаем, что нам нужно написать скрипт запуска с именем boot.scr, а затем положить этот скрипт в первый раздел (раздел FAT) TF-карты, при запуске u-boot найдет этот скрипт и выполнить его.

Помните исходный код u-boot, который мы получили при компиляции u-boot? В каталоге tools под ним находится инструмент mkimage, который можно использовать для генерации boot.scr. Для того, чтобы сгенерировать boot.scr, сначала нужно написать сценарий boot.cmd для создания Instruct mkimage, содержание сценария выглядит следующим образом:

setenv bootargs console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 rw
load mmc 0:1 0x80C00000 suniv-f1c100s-licheepi-nano.dtb
load mmc 0:1 0x80008000 zImage
bootz 0x80008000 - 0x80C00000

Первая строка команды setenv устанавливает переменные bootargs (параметры загрузки) следующим образом: выводить загрузочную информацию через последовательные порты tty0 и ttyS0; перезапустить через 5 секунд, если загрузка не удалась, а корневой файл находится во втором разделе TF-карта, которую можно читать и писать;

Во второй строке указывается место для загрузки dtb-файла дерева устройств по адресу 0x80C00000 из TF (адрес относится к официальному SDK)

Третья строка указывает, куда загрузить сжатое ядро ​​zImage по адресу 0x80008000.

Четвертая строка — команда запуска ядра с адреса загрузки

Затем вы можете сгенерировать файл boot.scr, войти в каталог, где находится mkimage, и выполнить следующую команду:

mkimage -C none -A arm -T script -d <boot.cmd路径> <boot.scr输出路径>

Результат выглядит следующим образом:

изображение-20220324204508595

Скопируйте сгенерированный boot.scr в раздел FAT TF-карты.

5. Скомпилируйте ядро ​​Linux

  1. Загрузите исходный код Linux

    Полная команда загрузки:

    git clone https://github.com/Icenowy/linux.git
    

    Git pull иногда работает очень медленно, рекомендуется выполнить следующую настройку:

    sudo vim /etc/hosts
    # 添加下面两行
    192.30.253.112  github.com
    151.101.73.194 github.global.ssl.fastly.net
    # 添加完成
    # 可自行通过dns检测网站检测github.global.ssl.fastly.net,更换为更快的ip地址
    

    Полный пул linux чрезвычайно велик, рекомендуется тянуть только одноуровневую ветку, чтобы сократить время ожидания:

    git clone --depth=1 -b f1c100s-480272lcd-test https://github.com/Icenowy/linux.git
    

    Я тянул сюда только однослойную ветку

  2. Настроить исходный код

    wget dl.sipeed.com/LICHEE/Nano/SDK/config # 下载配置文件
    mv config /linux源码目录/.config           # 移动到linux源码主目录并重命名为.config
    
    # 也可以使用以下指令进行进一步的配置
    make ARCH=arm menuconfig
    
  3. Скомпилируйте исходный код.
    После входа в основной каталог исходного кода Linux выполните следующие операции.

    #配置架构,然后使用可视化配置工具对源码进行配置
    make ARCH=arm menuconfig # 这里可以直接退出配置界面,我们用默认配置就行了
    
    #配置编译用的工具链前缀
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4 #请自行修改编译线程数
    
  4. Записи о проблемах, возникших во время компиляции

    1. В процессе компиляции выдается запрос на включение определенных конфигураций.Это
      потому что в конфигурационном файле нет соответствующих пунктов конфигурации.Выбирайте по ситуации.Я всегда выбираю n,и они не нужны.

    2. 提示 фатальная ошибка: openssl/bio.h: нет такого файла или каталога

      sudo apt install libssl-dev # 缺少这个库
      

Компиляция может занять много времени, в зависимости от производительности машины. После успешной компиляции отображается следующая информация:

Примечание 2022-03-24 221435

В настоящее время вы можете найти образ ядра zImage в каталоге arch/arm/boot/ в каталоге исходного кода Linux и скопировать его в первый раздел FAT TF-карты.

Шесть, настроить дерево устройств

Глава «Добавление узлов в дерево устройств» в официальном документе имеет подробное введение, и вы можете проверить его самостоятельно, если вам это нужно. Поскольку я использую только основную плату, мне не нужно настраивать файл dts, просто скомпилируйте и сгенерируйте dtb напрямую.

Файл dts, соответствующий Licheepi Nano, находится в папке arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts в основном каталоге исходного кода Linux.

Войдите в основной каталог исходного кода Linux, а затем выполните следующие команды, чтобы скомпилировать файл dtb:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs -j4

После успешной компиляции вы можете найти файл suniv-f1c100s-licheepi-nano.dtb в папке arch/arm/boot/dts/ в основном каталоге исходного кода Linux (имя этого файла такое же, как у этого файла). установить в boot.cmd, когда ранее был сгенерирован boot.scr.Имя файла такое же), скопируйте его в первый раздел FAT TF-карты.

Семь, создайте корневую файловую систему

Используйте buildroot для сборки корневой файловой системы, процесс выглядит следующим образом:

  1. Загрузить и установить

    # 获取所需的头文件
    sudo apt install linux-headers-$(uname -r) #uname -r用于获取内核版本号
    
    # 下载、解压、进入目录(这个国外链接下载有点慢)
    wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz
    tar xvf buildroot-2017.08.tar.gz
    cd buildroot-2017.08/
    
  2. Настройте инструмент buildroot

    # 进入配置界面
    make menuconfig
    
    以下选项为基础配置:
    
    - 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 # 启用登录密码输入窗口
      - (licheepi) Root password # 默认账户为root 密码为licheepi
    另可自行添加或删除指定的软件包
    
  3. компилировать

    make
    

    Из-за необходимости загружать программные пакеты в процессе компиляции и не поддерживает многопоточную компиляцию, компиляция занимает много времени (забудьте о компиляции ночью, когда проснетесь, все будет нормально), а скомпилированный файл выводится /images/rootfs в каталоге buildroot.tar

    советы:

    Если buildroot слишком медленно загружает программный пакет во время компиляции, загрузите dl.zip и распакуйте в нем программный пакет в каталог dl buildroot (решение официального документа);

    Или вы также можете рассмотреть возможность использования vi для открытия файла .config в buildroot и переключения соответствующей конфигурации на следующий контент, чтобы переключиться на внутреннюю зеркальную станцию ​​для загрузки (лично рекомендую этот метод):

    BR2_BACKUP_SITE="http://sources.buildroot.net"
    BR2_KERNEL_MIRROR="https://mirror.bjtu.edu.cn/kernel/"
    BR2_GNU_MIRROR="http://mirrors.nju.edu.cn/gnu/"
    BR2_LUAROCKS_MIRROR="https://luarocks.cn"
    BR2_CPAN_MIRROR="http://mirrors.nju.edu.cn/CPAN/"
    
  4. Запись решения проблемы во время компиляции

    1. ошибка «Пожалуйста, портируйте gnulib freadahead.c на свою платформу! Подобные ошибки

      # 进入buildroot下的如下目录
      cd output/build/host-m4-1.4.18/
      
      # 执行如下指令(查了半天,没搞懂是干嘛的)
      sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
      
      # 在lib/stdio-impl.h文件最后新增一行#define _IO_IN_BACKUP 0x100
      echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
      
      # 之后返回buildroot主目录执行make继续编译
      
      # stackoverflow上一位老哥说了出现这个问题的原因,不知道是不是对的
      # This was an interoperability problem between GNU m4 1.4.18 and 
      # newer glibc header files.
      # It is fixed in GNU m4 1.4.19, available from 
      # https://ftp.gnu.org/gnu/m4/ and the GNU mirrors.
      
      

После компиляции файл output/images/rootfs.tar находится под buildroot, копируете его во второй ext4 раздел TF карты и распаковываете.

советы!!!

В официальном документе говорится, что вам нужно добавить следующий оператор в файл etc/inittab в подготовленной корневой файловой системе, чтобы разрешить вход через последовательный порт.

ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL

Я проверил это здесь и обнаружил, что после его добавления это приведет к зависанию входа в систему. Если вы не добавите его, это не повлияет на обычный вход в последовательный порт. Вы можете проверить это самостоятельно в соответствии с реальной ситуацией.

8. Проверка

Вставьте TF-карту в Litchi Pi nano, используйте модуль USB-TTL для подключения последовательных портов U0TX и U0RX Litchi Pi, и он должен нормально включиться и войти в интерфейс входа в систему.

изображение-20220325004013332

Используйте имя пользователя root и пароль liceepi для входа в систему.

Используя команду fdisk, корневая файловая система уже может распознать все свободное место на TF-карте.

изображение-20220325010019140

Supongo que te gusta

Origin blog.csdn.net/lczdk/article/details/123747892
Recomendado
Clasificación