这里写目录标题
- [1. 检测ubuntu中相关服务是否安装配置OK](#1. 检测ubuntu中相关服务是否安装配置OK)
- [2. 将 ubuntu中/tftpboot 和 /opt 两个目录设置共享目录](#2. 将 ubuntu中/tftpboot 和 /opt 两个目录设置共享目录)
- [3. 将内核镜像和设备树文件拷贝到 ubuntu 中](#3. 将内核镜像和设备树文件拷贝到 ubuntu 中)
- [4. 将文件系统rootfs拷贝到ubuntu中](#4. 将文件系统rootfs拷贝到ubuntu中)
- [5. 连接并启动开发板](#5. 连接并启动开发板)
-
- [5.1 连接开发板](#5.1 连接开发板)
- [5.2 重启开发板](#5.2 重启开发板)
- [5.3 设置uboot参数](#5.3 设置uboot参数)
- [5.4 重启开发板,观察结果](#5.4 重启开发板,观察结果)
- [6. 配置(安装)交叉编译器](#6. 配置(安装)交叉编译器)
-
- [6.1 在ubuntu中创建相关目录](#6.1 在ubuntu中创建相关目录)
- [6.2 将交叉工具链拷贝到tools中](#6.2 将交叉工具链拷贝到tools中)
- [6.3 解压上面的交叉工具链](#6.3 解压上面的交叉工具链)
- [6.4 进入解压后的目录,安装交叉工具链](#6.4 进入解压后的目录,安装交叉工具链)
- [6.5 测试交叉工具链是否安装OK](#6.5 测试交叉工具链是否安装OK)
- [6.6 交叉编译c程序,并在开发板运行](#6.6 交叉编译c程序,并在开发板运行)
- [7. 内核移植(编译)](#7. 内核移植(编译))
-
- [7.1 获取内核源码](#7.1 获取内核源码)
- [7.2 移植linux内核源码](#7.2 移植linux内核源码)
-
- [7.2.1 将内核源码拷贝到ubuntu中,并解压](#7.2.1 将内核源码拷贝到ubuntu中,并解压)
- [7.2.2 打补丁](#7.2.2 打补丁)
- [7.2.3 生成标准板配置文件](#7.2.3 生成标准板配置文件)
- [7.2.4 配置内核](#7.2.4 配置内核)
- [7.2.5 编译linux内核源码](#7.2.5 编译linux内核源码)
- [8. 编译设备树文件](#8. 编译设备树文件)
-
- [8.1 将fsmp157的设备树文件拷贝到linux内核源码中](#8.1 将fsmp157的设备树文件拷贝到linux内核源码中)
- [8.2 修改 `arch/arm/boot/dts/Makefile`](#8.2 修改
arch/arm/boot/dts/Makefile) - [8.3 编译设备树文件](#8.3 编译设备树文件)
- [8.4 更新`/tftpboot`中的设备树文件](#8.4 更新
/tftpboot中的设备树文件)
- [9. 制作根文件系统---buildroot](#9. 制作根文件系统---buildroot)
-
- [9.1 概念及获取](#9.1 概念及获取)
- [9.2 将buildroot和交叉编译器拷贝到ubuntu,并解压](#9.2 将buildroot和交叉编译器拷贝到ubuntu,并解压)
- [9.3 配置 buildroot](#9.3 配置 buildroot)
- [9.4 编译buildroot](#9.4 编译buildroot)
- [10. 在开发板中测试新创建的文件系统](#10. 在开发板中测试新创建的文件系统)
-
- [10.1 将文件系统路径配置到nfs中](#10.1 将文件系统路径配置到nfs中)
- [10.2 修改uboot参数](#10.2 修改uboot参数)
- [10.3 取消rootfs登录账号和密码](#10.3 取消rootfs登录账号和密码)
- [10.4 设置用户名和主机名](#10.4 设置用户名和主机名)
1. 检测ubuntu中相关服务是否安装配置OK
1,
samba服务 ---- //如果没安装,参考:ubuntu18.04服务配置_v2.pdf2,
tftp服务 ------ //如果没安装,参考:ubuntu18.04服务配置_v2.pdf3,
nfs服务 -------- //如果没安装,参考:ubuntu18.04服务配置_v2.pdf
2. 将 ubuntu中/tftpboot 和 /opt 两个目录设置共享目录
1,打开samba配置文件
bash
sudo vim /etc/samba/smb.conf
2, 在文件末尾添加下面内容
bash
[tftpboot]
path = /tftpboot
browseable = yes
public = yes
available = yes
writable = yes
[opt]
path = /opt
browseable = yes
public = yes
available = yes
writable = yes
3, 重启samba服务
bash
sudo /etc/init.d/smbd restart
3. 将内核镜像和设备树文件拷贝到 ubuntu 中
bash
1,进入 "初级驱动\源码\编译好的文件"
2,找到内核镜像文件和设备树文件
uImage //内核镜像文件
stm32mp157a-fsmp1a.dtb //设备树文件
3,将上面两个文件拷贝到 ubuntu的 /tftpboot
farsight@ubuntu:~$ ls /tftpboot/ //检测/tftpboot中是否拷贝成功
1.txt stm32mp157a-fsmp1a.dtb uImage
farsight@ubuntu:~$
4. 将文件系统rootfs拷贝到ubuntu中
1,拷贝rootfs到ubuntu的/opt
bash
D:\xxx\yyy\zzz\源码\编译好的文件\rootfs.tar.xz ----》 /opt
//如果提示没有权限---》解决方法:sudo chmod 777 /opt/
2, 在ubuntu中,进入/opt, 解压rootfs
bash
cd /opt/
tar -xvf rootfs.tar.xz
3,打开nfs服务配置文件
bash
sudo vim /etc/exports
4,在文件末尾添加
bash
/opt/rootfs *(rw,sync,no_root_squash,no_subtree_check)
5, 重启nfs服务
bash
sudo /etc/init.d/nfs-kernel-server restart
5. 连接并启动开发板
5.1 连接开发板

5.2 重启开发板
bash
INFO: SP_MIN: Initializing runtime services
INFO: SP_MIN: Preparing exit to normal world
U-Boot 2020.01-stm32mp-r1 (Feb 11 2022 - 06:35:11 +0000)
CPU: STM32MP157AAA Rev.Z
Model: HQYJ STM32MP157 FSMP1A EXTENDED Discovery Board
Board: stm32mp1 in trusted mode (st,stm32mp157a-fsmp1a-extended)
DRAM: 512 MiB
Clocks:
- MPU : 650 MHz
- MCU : 208.878 MHz
- AXI : 266.500 MHz
- PER : 24 MHz
- DDR : 533 MHz
WDT: Started with servicing (32s timeout)
NAND: 0 MiB
MMC: STM32 SD/MMC: 0, STM32 SD/MMC: 1
Loading Environment from MMC... OK
In: serial
Out: serial
Err: serial
Net: eth0: ethernet@5800a000
Hit any key to stop autoboot: 0
STM32MP>
STM32MP>
重启开发板后,快速按回车键,进入uboot的命令行,如下图:

5.3 设置uboot参数
bash
STM32MP> setenv serverip 192.168.40.5 //ubuntu的ip
STM32MP> setenv ipaddr 192.168.40.7 //开发板的ip
STM32MP> setenv gatewayip 192.168.40.1
STM32MP> setenv bootcmd tftp 0xc2000000 uImage\;tftp 0xc1000000 stm32mp157a-fsmp1a.dtb \;bootm 0xc2000000 - 0xc1000000
STM32MP> setenv bootargs root=/dev/nfs nfsroot=192.168.40.5:/opt/rootfs ip=192.168.40.7 rootwait rw earlyprintk console=ttySTM0,115200 init=/linuxrc
STM32MP> saveenv
5.4 重启开发板,观察结果
bash
重启开发板,观察:
[ 3.274957] stm32-dwmac 5800a000.ethernet eth0: registered PTP clock
[ 3.280990] stm32-dwmac 5800a000.ethernet eth0: configuring for phy/rgmii-id link mode
[ 6.407835] stm32-dwmac 5800a000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[ 6.466048] IP-Config: Guessing netmask 255.255.255.0
[ 6.469632] IP-Config: Complete:
[ 6.472860] device=eth0, hwaddr=00:80:e1:42:60:10, ipaddr=192.168.70.7, mask=255.255.255.0, gw=255.255.255.255
[ 6.483341] host=192.168.70.7, domain=, nis-domain=(none)
[ 6.489198] bootserver=255.255.255.255, rootserver=192.168.70.5, rootpath=
[ 6.497837] ALSA device list:
[ 6.499397] #0: STM32MP1-FSMP1A
[ 7.553058] VFS: Mounted root (nfs filesystem) on device 0:17.
[ 7.558124] devtmpfs: mounted
[ 7.562726] Freeing unused kernel memory: 1024K
[ 7.606428] Run /linuxrc as init process
[root@HQYJ ]#
[root@HQYJ ]#
[root@HQYJ ]# ls
bin lib media proc sbin usr
dev lib32 mnt root sys var
etc linuxrc opt run tmp
6. 配置(安装)交叉编译器
6.1 在ubuntu中创建相关目录
bash
farsight@ubuntu:~$ mkdir mp157
farsight@ubuntu:~$ cd mp157/
farsight@ubuntu:~/mp157$ mkdir kernel driver tools
6.2 将交叉工具链拷贝到tools中
bash
初级驱动\工具\en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz
6.3 解压上面的交叉工具链
bash
tar -xvf en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz
6.4 进入解压后的目录,安装交叉工具链
bash
1,进入解压后的目录
farsight@ubuntu:~/mp157/tools$ cd stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sdk/
farsight@ubuntu:~/mp157/tools/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sdk$ ls
st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.host.manifest
st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.license
st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24-license_content.html
st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh
st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.target.manifest
st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.testdata.json
2,执行安装程序
1》创建安装交叉工具链的目录
mkdir /opt/sdk
2》执行安装程序
./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh
安装过程如下:
ST OpenSTLinux - Weston - (A Yocto Project Based Distro) SDK installer version 3.1-openstlinux-5.4-dunfell-mp1-20-06-24
=======================================================================================================================
Enter target directory for SDK (default: /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24): /opt/sdk //指定要安装的位置: /opt/sdk
You are about to install the SDK to "/opt/sdk". Proceed [Y/n]? y
Extracting SDK...............................................
.................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . /opt/sdk/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
6.5 测试交叉工具链是否安装OK
bash
1,导入交叉工具链 ----当打开一个新的终端时需要导入,当执行make之前导入
farsight@ubuntu:~$ source /opt/sdk/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
2,查看版本
farsight@ubuntu:~$ $CC --version
arm-ostl-linux-gnueabi-gcc (GCC) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//能够查看到版本信息,则说明安装成功
6.6 交叉编译c程序,并在开发板运行
bash
1,自己编写一个程序:a.c,并交叉编译:
farsight@ubuntu:~$ $CC -o a a.c
2,查看可执行程序的属性
farsight@ubuntu:~$ file a
a: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=d08029fba6614d6218a76f40ee7975755ed5b72f, for GNU/Linux 3.2.0, with debug_info, not stripped
3,将编译的a拷贝到 /opt/rootfs
cp a /opt/rootfs
4,在开发板中运行
[root@fsmp1a ]# ./a
hello world
7. 内核移植(编译)
7.1 获取内核源码
bash
1》从官网获取
https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ -----原厂工程师
2》从芯片原厂
三星,高通,MTK,海思,RK,全志,ST等 ------产品工程师
7.2 移植linux内核源码
7.2.1 将内核源码拷贝到ubuntu中,并解压
1》解压
bash
tar -xvf en.SOURCES-stm32mp1-openstlinux-5-4-dunfell-mp1-20-06-24.tar.xz
2》进入linux-stm32mp-5.4.31-r0,解压标准的内核源码
bash
cd stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0
tar -xvf linux-5.4.31.tar.xz //解压标准内核源码
7.2.2 打补丁
1》进入内核源码目录
bash
cd linux-5.4.31/
2》打补丁
bash
for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
7.2.3 生成标准板配置文件
先导入交叉工具链
bash
source /opt/sdk/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
1》生成 multi_v7_defconfig 默认配置
bash
make ARCH=arm multi_v7_defconfig "fragment*.config"
2》在默认 multi_v7_defconfig 配置中加入 ST 官方提供的 fragment config
bash
for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
yes '' | make ARCH=arm oldconfig
3》生成自己的默认配置文件
bash
cp .config arch/arm/configs/stm32_fsmp1a_defconfig
4》取消 git 中的 SHA1
bash
echo "" > .scmversion
5》在 arch/arm/configs 可以查看到开发板要使用的内核配置文件
bash
peter@ubuntu:~/fs-mp1a/linux/fsmp1a-linux-5.4.31$ ls arch/arm/configs/stm32*
arch/arm/configs/stm32_defconfig arch/arm/configs/stm32_fsmp1a_defconfig
//标准版基本配置已经配置好,在编译前如果需要编译额外的功能或者驱动,可以使用 meunconfig 来对内核进行配置,
6》将配置好的内核源码拷贝到 ~/mp157/kernel
bash
cp -af linux-5.4.31 ~/mp157/kernel/
7》返回到内核目录 ~/mp157/kernel/ ,并删除其他文件
bash
cd ~/mp157/kernel/
rm -r en.SOURCES-stm32mp1-openstlinux-5-4-dunfell-mp1-20-06-24.tar.xz stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/
7.2.4 配置内核
1》安装相关的工具(库):
bash
sudo apt-get install -y gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping
sudo apt-get install -y libsdl1.2-dev xterm make xsltproc docbook-utils fop dblatex xmlto python-git-doc ncurses-dev libncurses5-dev libncursesw5-dev lib32ncurses5 libssl-dev linux-headers-generic u-boot-tools device-tree-compiler bison flex g++ libyaml-dev
sudo apt-get install -y coreutils bsdmainutils sed curl bc lrzsz corkscrew cvs subversion mercurial nfs-common nfs-kernel-server libarchive-zip-perl dos2unix texi2html diffstat libxml2-utils
2》配置内核,
由于内核源码默认配置已经支持 eMMC和网卡,在此列出主要选项,如下:
bash
linux@ubuntu:$ make ARCH=arm menuconfig
bash
Device Drivers --->
Generic Driver Options --->
[*] Support for uevent helper //支持热插拔,在/proc下生成/proc/sys/kernel/hotplug
Device Drivers --->
<*> MMC/SD/SDIO card support --->
[*] STMicroelectronics STM32 SDMMC Controller
Device Drivers --->
[*] Network device support --->
[*] Ethernet driver support --->
<*> STMicroelectronics Multi-Gigabit Ethernet driver
<*> STMMAC Platform bus support
<*> Support for snps,dwc-qos-ethernet.txt DT binding.
<*> Generic driver for DWMAC
<*> STM32 DWMAC support
7.2.5 编译linux内核源码
1》编译内核源码
bash
make ARCH=arm -j4 uImage LOADADDR=0xC2000040
//编译后生成文件uImage,如下:
bash
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-5.4.31
Created: Tue Sep 19 03:15:30 2023
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 7312584 Bytes = 7141.20 KiB = 6.97 MiB
Load Address: c2000040
Entry Point: c2000040
Kernel: arch/arm/boot/uImage is ready
2》将 uImage 拷贝到 /tftpboot/
bash
cp arch/arm/boot/uImage /tftpboot/ //将新编译的uImage拷贝到/tftpboot中
8. 编译设备树文件
在linux内核源码中,设备树文件一般在: arch/arm/boot/dts/
8.1 将fsmp157的设备树文件拷贝到linux内核源码中
bash
将 D:\xxx\yyy\zzz\源码\设备树文件\ 目录中下面的所有文件
stm32mp151.dtsi
stm32mp157a-fsmp1a.dts
stm32mp15-pinctrl.dtsi
stm32mp15xx-dkx.dtsi
stm32mp15xx-fsmp1x.dtsi
拷贝到: linux内核源码的 arch/arm/boot/dts/ 目录中
8.2 修改 arch/arm/boot/dts/Makefile
1> 打开Makefile
bash
vim arch/arm/boot/dts/Makefile
2> 添加下面一行
bash
992 stm32mp157a-fsmp1a.dtb\
8.3 编译设备树文件
1》指定编译某个设备树文件:
bash
make ARCH=arm -j4 stm32mp157a-fsmp1a.dtb LOADADDR=0xC2000040
或
2》编译 arch/arm/boot/dts/ 中所有的设备树文件
bash
make ARCH=arm -j4 dtbs LOADADDR=0xC2000040
8.4 更新/tftpboot中的设备树文件
bash
cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb /tftpboot/ //将新编译的设备树文件拷贝到/tftpboot中
9. 制作根文件系统---buildroot
9.1 概念及获取
在 linux 文件系统制作中,使用 busybox 可以生成 linux 的系统命令,但是系统需要的 c库 和 第三方库,需要自己单独获取,这种原始的制作根文件系统的方法比较麻烦,而且制作的根文件系统默认是没有账号和密码
buildroot 工具集成了 busybox,而且还集成各种常见的软件和第三方库,在制作根文件系统时,就不需要自己在单独获取其他库,为制作根文件系统带来了很大的方便。
获取buildroot ---- 官网: https://buildroot.org/download.html
//使用buildroot制作根文件系统需要用到:
bash
buildroot-2021.02.1.tar.xz //源码
arm-fsmp1x-linux-gnueabihf_sdk-buildroot.tar.gz //交叉工具链
9.2 将buildroot和交叉编译器拷贝到ubuntu,并解压
1》创建文件系统的目录
bash
farsight@ubuntu:~$ mkdir mp157/rootfs
1》解压buildroot源码
bash
farsight@ubuntu:~/mp157/rootfs$ tar xvf buildroot-2021.02.1.tar.xz
2》解压交叉工具链
bash
farsight@ubuntu:~/mp157/rootfs$ tar -xvf arm-fsmp1x-linux-gnueabihf_sdk-buildroot.tar.gz
9.3 配置 buildroot
//导入交叉工具链
bash
source /opt/sdk/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
//进入到 buildroot 源码目录下,
bash
cd buildroot-2021.02.1/
//执行: make menuconfig
1》配置目标选项
bash
Target options --->
Target Architecture (ARM (little endian)) --->
Target Binary Format (ELF) --->
Target Architecture Variant (cortex-A7) --->
Target ABI (EABIhf) --->
Floating point strategy (NEON/VFPv4) --->
ARM instruction set (ARM) --->
2》配置交叉工具链
bash
Toolchain --->
Toolchain type (External toolchain) --->
Toolchain (Custom toolchain) ---> //使用自己的交叉编译器
Toolchain origin (Pre-installed toolchain) ---> //预装的编译器
(/home/farsight/mp157/rootfs/arm-fsmp1x-linux-gnueabihf_sdk-buildroot) Toolchain path
($(ARCH)-fsmp1x-linux-gnueabihf) Toolchain prefix //交叉编译器的前缀
External toolchain gcc version (9.x) --->
External toolchain kernel headers series (5.4.x) ---> //交叉编译器Linux版本号
External toolchain C library (glibc/eglibc) --->
[*] Toolchain has SSP support?
[ ] Toolchain has RPC support? //取消勾选
[*] Toolchain has C++ support?
[*] Enable MMU support
3》系统配置
bash
System configuration --->
(farsight) System hostname //主机名,自定义
(Welcome to farsight STM32MP157a) System banner //欢迎语
Init system (BusyBox) --->
/dev management (Dynamic using devtmpfs + mdev) --->
[*] Enable root login with password //使能登录密码
(123) Root password //设置登录密码
4》 配置文件系统镜像 --- filesystem image
bash
Filesystem images --->
[*] ext2/3/4 root filesystem
ext2/3/4 variant (ext4) --->
(1G) exact size //ext4 根文件系统
5》禁止内核和 u-boot 编译
bash
Kernel --->
[ ] Linux Kernel //不能选择该选项
Bootloaders --->
[ ] U-Boot //不能选择该选项
6》配置目标包
bash
Target packages --->
System tools --->
[*] kmod //使能内核模块相关命令
Libraries --->
Graphics --->
[*] libdrm --->
[*] Install test programs
Networking applications --->
[*] openssh //使能openssh
sudo make busybox-menuconfig
Linux Module Utilities --->
[*] depmod (27 kb) //使能depmod
9.4 编译buildroot
bash
sudo make
//生成文件:ls output/images/
rootfs.ext2 rootfs.ext4 rootfs.tar
//在/opt中创建根文件系统目录rootfs,将生成的根文件系统解包到:myrootfs
mkdir /opt/rootfs
tar -xvf output/images/rootfs.tar -C /opt/myrootfs
10. 在开发板中测试新创建的文件系统
10.1 将文件系统路径配置到nfs中
1》打开 nfs 配置文件
bash
sudo vim /etc/exports
2》在文件末尾添加下面一行
bash
/opt/myrootfs *(rw,sync,no_root_squash,no_subtree_check)
3》重启nfs服务
bash
sudo /etc/init.d/nfs-kernel-server restart
10.2 修改uboot参数
重启开发板,进入uboot命令行
bash
STM32MP> setenv bootargs root=/dev/nfs nfsroot=192.168.60.3:/opt/myrootfs ip=192.168.60.7 rootwait rw earlyprintk console=ttySTM0,115200 init=/linuxrc
STM32MP> saveenv
重启开发板,观察结果:
bash
[ 6.469756] IP-Config: Complete:
[ 6.472980] device=eth0, hwaddr=00:80:e1:42:60:10, ipaddr=192.168.60.7, mask=255.255.255.0, gw=255.255.255.255
[ 6.483512] host=192.168.60.7, domain=, nis-domain=(none)
[ 6.489332] bootserver=255.255.255.255, rootserver=192.168.60.3, rootpath=
[ 6.497809] ALSA device list:
[ 6.499481] #0: STM32MP1-FSMP1A
[ 7.751620] VFS: Mounted root (nfs filesystem) on device 0:17.
[ 7.759273] devtmpfs: mounted
[ 7.763109] Freeing unused kernel memory: 1024K
[ 7.796543] Run /linuxrc as init process
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
modprobe: can't change directory to '/lib/modules': No such file or directory
Saving random seed: OK
Starting network: ip: RTNETLINK answers: File exists
FAIL
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
Starting sshd: /var/empty must be owned by root and not group or world-writable.
OK
Welcome to HQYJ
HQYJ login: root
Password:
# ls
# pwd
/root
# ls /
bin lib media proc sbin usr
dev lib32 mnt root sys var
etc linuxrc opt run tmp
10.3 取消rootfs登录账号和密码
1》打开文件系统myrootfs中的配置文件etc/inittab
bash
vim /opt/myrootfs/etc/inittab
2》修改下面一行
注释下面一行:
bash
#console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL
添加下面一行:
bash
console::respawn:-/bin/sh
3》重启开发板,观察:
bash
[ 6.483494] host=192.168.60.7, domain=, nis-domain=(none)
[ 6.489351] bootserver=255.255.255.255, rootserver=192.168.60.3, rootpath=
[ 6.497851] ALSA device list:
[ 6.499531] #0: STM32MP1-FSMP1A
[ 7.262483] VFS: Mounted root (nfs filesystem) on device 0:17.
[ 7.267587] devtmpfs: mounted
[ 7.272137] Freeing unused kernel memory: 1024K
[ 7.306586] Run /linuxrc as init process
[ 24.166287] nfs: server 192.168.60.3 not responding, still trying
[ 24.171728] nfs: server 192.168.60.3 OK
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
modprobe: can't change directory to '/lib/modules': No such file or directory
Initializing random number generator: OK
Saving random seed: OK
Starting network: ip: RTNETLINK answers: File exists
FAIL
Starting sshd: /var/empty must be owned by root and not group or world-writable.
OK
#
#
#
# ls /
bin lib media proc sbin usr
dev lib32 mnt root sys var
etc linuxrc opt run tmp
10.4 设置用户名和主机名
1》打开文件系统 myrootfs 中的配置文件 etc/profile
2》在文件末尾添加下面内容:
bash
export HOSTNAME=HQYJ //主机名
export USER=root //用户名
export HOME=root //用户家目录名
export PS1="[$USER@$HOSTNAME \w]\# " //命令提示符格式
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
3》重启开发板,观察:
bash
[ 6.489358] bootserver=255.255.255.255, rootserver=192.168.60.3, rootpath=
[ 6.497889] ALSA device list:
[ 6.499546] #0: STM32MP1-FSMP1A
[ 7.095887] VFS: Mounted root (nfs filesystem) on device 0:17.
[ 7.100970] devtmpfs: mounted
[ 7.105552] Freeing unused kernel memory: 1024K
[ 7.156672] Run /linuxrc as init process
[ 17.126274] nfs: server 192.168.60.3 not responding, still trying
[ 17.131728] nfs: server 192.168.60.3 OK
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
modprobe: can't change directory to '/lib/modules': No such file or directory
Initializing random number generator: OK
Saving random seed: OK
Starting network: ip: RTNETLINK answers: File exists
FAIL
Starting sshd: /var/empty must be owned by root and not group or world-writable.
OK
[root@HQYJ /]# ls
bin lib media proc sbin usr
dev lib32 mnt root sys var
etc linuxrc opt run tmp
[root@HQYJ /]#