目录
一,搭建ubuntu的环境
二、安转服务与辅助Windows软件
1、ssh远程软件的安装
2、安装配置samba服务
3,安装和配置NFS
4,安装和配置tftp服务
5,安装相关的软件包
二,linux内核移植
1,将开发板和电脑相连
2,安装交叉工具链
3,编译linux内核
ubuntu配置: 硬盘大小:60G以上,内存:4G
这是移植内核ubuntu的环境大小最小标准。
配置网络服务
打开网络配置文件sudo vim /etc/netplan/01-network-manager-all.yaml
按下面的配置设置自己的IP
# Let NetworkManager manage all devices on this system
network:
version: 2
# renderer: NetworkManager
ethernets:
ens33:
dhcp4: no
dhcp6: no
addresses: [192.168.60.5/24] //修改IP
gateway4: 192.168.60.1 //修改网关
nameservers:
addresses: [202.96.128.86]
重启网络服务sudo netplan apply
查看我以前的https://mp.csdn.net/mp_blog/creation/editor/new/129177915这个文章有说到。这样就可以使用
使用MobaXterm远程连接ubuntu。这可以粘贴复制,有助于下面的操作“用不用看你自己”。
1,下载安装 samba 服务器 farsight@ubuntu:~$ sudo apt-get update farsight@ubuntu:~$ sudo apt-get install samba samba-common 2,修改配置文件:/etc/samba/smb.conf //打开配置文件: farsight@ubuntu:~$ sudo vim /etc/samba/smb.conf //在文件末尾添加下面内容: [farsight] //改为希望在 Windows 中看到共享目录的名字—自定义 path = /home/farsight //路径改为要共享的目录路径 browseable = yes public = yes available = yes writable = yes valid users = farsight //用户名改为:当前 ubuntu 系统的用户名 3,给 samba 用户 ,如:farsight 设置密码 farsight@ubuntu:~$ sudo smbpasswd -a farsight 4,重启 samaba 服务 farsight@ubuntu:~$ sudo /etc/init.d/smbd restart [ ok ] Restarting smbd (via systemctl): smbd.service 5,测试 在windows系统中,按win+r,输入:\\ubuntu的IP,查看是否用文件共享成功 点击进去需要权限在Ubunto中输入 sudo chmod 0777 farsight //个人建议不要设密码麻烦,在环境中“valid users = farsight //用户名改为:当前 ubuntu 系统的用户名”这个就可不用设置。
1,安装 NFS 服务器端 farsight@ubuntu:~$ sudo apt-get install nfs-kernel-server /* 2,将文件系统 rootfs.tar.xz 拷贝到 /opt 目录,并解压 farsight@ubuntu:/opt$ tar -xvf rootfs.tar.xz 3,将解压后的文件系统路径配置到nfs中 //打开配置文件 sudo vim /etc/exports //在文件末尾添加下面一行 /opt/rootfs *(rw,sync,no_root_squash,no_subtree_check) //重启nfs服务 sudo /etc/init.d/nfs-kernel-server restart sudo exportfs -a */ 看你自己是否有内核文件了,没有就安装测试就好了。记得把/opt使用samba服务共享这样有助于移植文件。 4,测试 ---将文件系统挂在到家目录下的mnt,检查是否成功 farsight@ubuntu:~$ sudo mount -t nfs 192.168.60.5:/opt/rootfs ./mnt //挂在测试 farsight@ubuntu:~$ ls mnt/ bin dev etc lib linuxrc mnt proc root sbin sys tmp usr var//显示的内容 farsight@ubuntu:~$ sudo umount ./mnt //卸载 //NFS是用来挂载下载文件系统用的,记得一定得测试
1,下载 tftp 服务器 farsight@ubuntu:~$ sudo apt-get update farsight@ubuntu:~$ sudo apt-get install tftp-hpa tftpd-hpa 2,在根目录下建立 tftp 工作目录 farsight@ubuntu:~$ sudo mkdir /tftpboot // /tftpboot这个文件可以使用samba服务共享一下先。 3,修改 tftpboot 文件夹权限 farsight@ubuntu:~$ sudo chmod 0777 /tftpboot/ 4,配置 1》打开文件 sudo vim /etc/default/tftpd-hpa 2》将 /var/lib/tftpboot 改为 /tftpboot # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure" 5,重启 tftp 服务 sudo service tftpd-hpa restart或sudo /etc/init.d/tftpd-hpa restart [ ok ] Restarting tftpd-hpa (via systemctl): tftpd-hpa.service.//显示的 6,测试 1>在/tftpboot中存放一个文件,比如:1.txt 2>在用户家目录下,下载1.txt farsight@ubuntu:~$ tftp 192.168.60.5 tftp> get 1.txt tftp> quit farsight@ubuntu:~$ cat 1.txt /* #include int main(void) { printf("hello world\n");hello printf("hello world\n");hello return 0;hello } int main(void) { printf("hello \n");hello return 0; } */1.txt的内容
sudo apt-get update sudo apt-get install 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 libsdl1.2-dev xterm sudo apt-get install make xsltproc docbook-utils fop dblatex xmlto sudo apt-get install python-git-doc sudo apt-get install 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 coreutils bsdmainutils sed curl bc lrzsz corkscrew cvs subversion mercurial nfs-common nfs-kernel-server libarchive-zip-perl dos2unix texi2html diffstat libxml2-utils //以上是需要下载的相关,下载时注意一定得安装成功了,安装时速度不会太快。
值得一提的是,桥接模式。开发板是不能同时链接多个网的,所以得自己选择网卡,通信桥接有线网卡,就是windows链接的网络名字,在ubuntu里的虚拟网络编辑器可以找到,自动桥接模式里可以更改,这就是板子与虚拟机桥接相连。在下载时就要选着无线网卡,让板子可以与外界通信下载软件。
//百度吧,我也不知道为什么,图片上传不成功,有找到的朋友可以交流一下,谢谢。
1》在ubuntu中创建相关的目录 farsight@ubuntu:~$ mkdir fsmp1a farsight@ubuntu:~$ cd fsmp1a/ farsight@ubuntu:~/fsmp1a$ mkdir kerner driver tools //可以使用samba服务共享一下。 /* 2》将交叉工具链拷贝到tools中,并解压 farsight@ubuntu:~/fsmp1a/tools$ tar -xvf en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz 3》 进入解压后的sdk目录,执行下面的脚步文件,安装交叉工具链 farsight@ubuntu:~/fsmp1a/tools/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sdk$ ./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh //会有一个成功的标识successfully */ 交叉编译器的工具得自己找了,目前我还不知道这个这么找,都是用的被人给的现成的“”,有知道的朋友能否告知一二。 4》导入sdk(使之生效) source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi //每打开一个终端都要执行这个命令,让交叉编译器生效。记得测试。 5》测试: //执行下面命令 $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.
获取内核源码:
从官网下载 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ linux-5.4.31.tar.xz 2》芯片原厂 高通,三星,MTK,海思,RK,全志等
1》将内核原码拷贝到ubuntu中,并解压 farsight@ubuntu:~/fsmp1a/kerner$ tar -xvf en.SOURCES-stm32mp1-openstlinux-5-4-dunfell-mp1-20-06-24.tar.xz 2》将解压后的源码拷贝到kenel目录下 cp -raf stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0/ ./ 3》进入目录linux-stm32mp-5.4.31-r0 解压linux标准内核源码:tar -xvf linux-5.4.31.tar.xz 4》进入解压后的内核源码目录,并打补丁 cd linux-5.4.31/ //命令 //下面那个生成标准板配置文件在这个目录下 for p in `ls -1 ../*.patch`; do patch -p1 < $p; done //命令 //该命令会将上层目录下所有的 patch 补丁文件应用到当前的内核中 linux-5.4.31/这就是内核所在目录,下面很多操作都会在这个目录下进行 生成标准板配置文件 //~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31:$ 1》 生成 multi_v7_defconfig 默认配置 ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31:$ make ARCH=arm multi_v7_defconfig "fragment*.config" //命令 2》在默认 multi_v7_defconfig 配置中加入 ST 官方提供的 fragment config(打补丁) ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31:$ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done //命令 ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31:$ yes '' | make ARCH=arm oldconfig //命令 3》 生成自己的默认配置文件 ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31:$ cp .config arch/arm/configs/stm32_fsmp1a_defconfig //命令 4》取消 git 中的 SHA1 ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31:$ echo "" > .scmversion //命令 5》在arch/arm/configs可以查看到开发板要使用的内核配置文件 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 来对内核进行配置。这一步不成功的话,下面的设备树和内核文件的编译都会有问题,尤其是修改内核配置时,会缺少选项STM32、ARM等选项是没有的。发现有问题就再来生成标准配置文件一次
编译设备树文件 在linux内核中,设备树文件一般在: arch/arm/boot/dts/ /* 1》将我们的设备树文件拷贝到 arch/arm/boot/dts/ D:\peter\2303\初级驱动\设备树文件* ----> arch/arm/boot/dts/ arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi arch/arm/boot/dts/stm32mp157a-fsmp1a.dts 2》修改 arch/arm/boot/dts/Makefile //打开Makefile文件 vim arch/arm/boot/dts/Makefile //添加下面一行: 992 stm32mp157a-fsmp1a.dtb\ */ //这个设备树文件是自己写的,目前我也不知道如果是网找的话应该如何做,大家有空交流。 3》导入交叉编译器 source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi 4》编译设备树 make ARCH=arm -j4 dtbs LOADADDR=0xC2000040 例如: peter@ubuntu:~/fs-mp157/linux/linux-stm32mp-5.4.31-r0/linux-5.4.31$ make ARCH=arm -j4 dtbs LOADADDR=0xC2000040 //命令 scripts/kconfig/conf --syncconfig Kconfig UPD include/config/kernel.release HOSTCC scripts/dtc/data.o HOSTCC scripts/dtc/fstree.o HOSTCC scripts/dtc/flattree.o HOSTCC scripts/dtc/dtc.o HOSTCC scripts/dtc/livetree.o HOSTCC scripts/dtc/treesource.o HOSTCC scripts/dtc/srcpos.o HOSTCC scripts/dtc/checks.o HOSTCC scripts/dtc/util.o LEX scripts/dtc/dtc-lexer.lex.c YACC scripts/dtc/dtc-parser.tab.[ch] HOSTCC scripts/dtc/yamltree.o HOSTCC scripts/dtc/dtc-lexer.lex.o HOSTCC scripts/dtc/dtc-parser.tab.o HOSTLD scripts/dtc/dtc DTC arch/arm/boot/dts/stm32f769-disco.dtb DTC arch/arm/boot/dts/stm32f746-disco.dtb DTC arch/arm/boot/dts/stm32f469-disco.dtb DTC arch/arm/boot/dts/stm32f429-disco.dtb DTC arch/arm/boot/dts/stm32429i-eval.dtb DTC arch/arm/boot/dts/stm32746g-eval.dtb DTC arch/arm/boot/dts/stm32h743i-eval.dtb DTC arch/arm/boot/dts/stm32h743i-disco.dtb DTC arch/arm/boot/dts/stm32mp157a-avenger96.dtb DTC arch/arm/boot/dts/stm32mp157a-dk1.dtb DTC arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb DTC arch/arm/boot/dts/stm32mp157d-dk1.dtb //显示的内容,可以做个参考 或 make ARCH=arm -j4 stm32mp157a-fsmp1a.dtb LOADADDR=0xC2000040 例如: make ARCH=arm -j4 stm32mp157a-fsmp1a.dtb LOADADDR=0xC2000040 DTC arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb
编译内核 //这个目录下的操作~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31/ 添加 MAE0621A 网卡驱动(开发板 V3.0 之前版本可跳过此步骤)FS-MP1A V3.0 版本配套网卡主控芯片是 MAE0621A,内核中并没有提供其的驱动,所以需要移植 MAE0621A 的驱动 将【华清远见-FS-MP1A开发资料\02-程序源码\04-Linux系统移植\04-移植相关文件\02-Linux 内核移植\ MAE0621A 驱动】下的 phy_device.c 和 maxio.c 文件复制到内核源码下的 drivers/net/phy/目录下。 */ 1》拷贝驱动源文件到内核源码 drivers/net/phy/ ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31/$:> cp -rf phy_device.c drivers/net/phy/ //命令 ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31/$:> cp -rf maxio.c drivers/net/phy/ //命令 2》修改drivers/net/phy/中的Kconfig和Makefile vim drivers/net/phy/Kconfig //命令 //修改Kconfig config REALTEK_PHY tristate "Realtek PHYs" ---help--- Supports the Realtek 821x PHY. 456 config MAXIO_PHY //这几行为新增 457 tristate "MAXIO PHYS" 458 ---help--- 459 Supports the Maxio MAEXXXX PHY. //在 drivers/net/phy/Makefile 文件中添加 MAE0621A 驱动的编译项。 vim drivers/net/phy/Makefile //命令 obj-$(CONFIG_MDIO_THUNDER) += mdio-thunder.o obj-$(CONFIG_MDIO_XGENE) += mdio-xgene.o 45 obj-$(CONFIG_MAXIO_PHY) += maxio.o //添加该行 */ 就像上面一样这些文件是自己的,灵活一点咯。 3》 配置内核,添加网卡源码到内核中 //这个目录下的操作~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31/ 由于内核源码默认配置已经支持 eMMC和网卡,在此列出主要选项,如下: ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31/$: make menuconfig //命令 //空格键改变括号里的东西。回车确定,左右可以选中进入退出 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 添加 MAE0621A 驱动(开发板 V3.0 之前版本可跳过此步骤) ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31/$: make menuconfig //命令 Device Drivers ---> [*] Network device support ---> -*- PHY Device support and infrastructure ---> < > Quality Semiconductor PHYs <*> Realtek PHYs <*> MAXIO PHYS //选择该菜单 < > Driver for Renesas PHYs 4》编译内核 ~/fsmpla/kerner/linux-stm32mp-5.4.31-r0/linux-5.4.31/$: make ARCH=arm -j4 uImage LOADADDR=0xC2000040 //命令 AS arch/arm/boot/compressed/lib1funcs.o AS arch/arm/boot/compressed/ashldi3.o AS arch/arm/boot/compressed/bswapsdi2.o AS arch/arm/boot/compressed/piggy.o LD arch/arm/boot/compressed/vmlinux //显示的内容,会很长一段时间。
下面就是开发版上的事情了,可以看看我以前的文章。https://mp.csdn.net/mp_blog/creation/editor/new/129177915