前提 下载好vmware(高版本)-->ubuntu(32位) -->xshell-->交叉编译工具 --> uboot-->linux内核 -->busybox根文件系统-->tftp-->NFS
仅供参考
ubuntu :https://www.ubuntu.com/download/desktop
Ubuntu18.04第一次打开VI编辑器时,按方向键会出现ABCD等乱码,BackSpace按键也不能正常使用等问题。
解决方法:
sudo apt-get remove vim-common
sudo apt-get install vim
make 工具使用
sudo apt-get install make
//sudo apt-get install make-guile
gcc command not found:
sudo apt-get install gcc
交叉编译工具链 :
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
http://ymorin.is-a-geek.org/download/crosstool-ng/
补丁:http://ymorin.is-a-geek.org/download/crosstool-ng/01-fixes/
uboot:http://ftp.denx.de/pub/u-boot/
linux内核 :https://www.kernel.org/
busybox :https://busybox.net/downloads/
一、网络环境的配置
1.两个地方要选择桥接模式:
虚拟机 --->>> 设置 --->>> 网络适配器 --->>> 桥接模式
编辑 --->>> 虚拟网络编辑器 --->>> 桥接模式 (必须在关机后配置)
1)文件配置 :
1. /etc/network/interfaces
auto eth0
#动态分配
iface eth0 inet dhcp
#==============================
#静态指定ip地址
iface eth0 inet static
address 192.168.3.103 ip地址
netmask 255.255.255.0 子网掩码
gateway 192.168.3.1 网关
2. /etc/resolv.conf 域名解析服务器配置文本
nameserver 8.8.8.8
3. /etc/rc.local 开机自运行脚本
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
4. 重启网络设备
sudo /etc/init.d/networking restart
2)界面配置 找到网络图标单击 进行配置 选择动态分配或者静态分配
2.xshell
1)ubuntu安装ssh服务器
sudo apt-get install openssh-server
2)出现问题时,重启ssh服务即可
sudo service ssh restart
二、交叉编译链的安装
解压缩到制定文件 路径配置以解压为准
安装交叉编译:
1.在当前终端
linux@Ubuntu1:~$ export PATH=$PATH:/home/linux/external-toolchain/bin
linux@Ubuntu1:~$ arm-linux-gnueabi-gcc -v
2.对当前用户安装
vi .bashrc
export PATH=$PATH:/home/linux/external-toolchain/bin
sudo reboot
打开配置文件:sudo vim /etc/bash.bashrc
在最后一行添加:export PATH=$PATH:/home/linux/toolchain/toolchain-4.5.1-farsight/bin
保存并退出
生效配置文件
source /etc/bash.bashrc
3.对所有用户安装
sudo vi /etc/environment
添加::/home/linux/external-toolchain/bin
source /etc/environment
64位装32位的可能会出错 使用
sudo apt-get install lib32z1 lib32ncurses5 libbz2-1.0:i386 lib32stdc++6
使用安装 arm-none 使用tab能自动补全
arm-non-linux-gnueabi-gcc -v 出现版本号 就安装成功了
三、uboot编译
1.指定交叉编译工具链
$ vim Makefile
把
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
#endif
下添加
ifeq(arm,$(ARCH))
CROSS_COMPILE ?= arm-none-linux-gnueabi-
#endif
2.
配置XXX.c 找到相似的进行移植 配置
make xxx_config
$ make
3.把tools目录下的mkimage放到/usr/bin 目录下
4.出错的话 执行clean 删掉之前被别人配置过得文件
四、进行linux内核的编译
1.配置.config目录,把产品的XXX_defconfig 放到 arch/arm/configs/目录下
2.make xxx_defconfig
3.make menuconfig
1、sudo apt-get update 更新软件
2、安装下面的软件
sudo apt-get install build-essential
sudo apt-get install libncurses5
sudo apt-get install libncurses5-dev
4.make uImage
5.生成设备树
arch/arm/boot/dts/xxx.dts
make dtbs
五、Busybox进行根文件系统设置
1. 配置并编译Busybox。使用下面的命令。
源码包在“案例源码\第三天\ busybox-1.22.1.tar.bz2”
$ tar -jxvf busybox-1.22.1.tar.bz2
$ cd busybox-1.22.1/
$ make menuconfig
Busybox Settings --->
Build Options --->
[ ] Build BusyBox as a static binary (no shared libs) (NEW)
(arm-none-linux-gnueabi-) Cross Compiler prefix
Installation Options ("make install" behavior) --->
(./_install) BusyBox installation prefix
2. 编译并安装Busybox。使用下面的命令。
$ make
$ make install
安装成功后,生成以下目录。
$ ls _install
bin linuxrc sbin usr
3. 拷贝共享库文件。
$ cd ./_install
$ cp -a /home/linux/ toolchain-4.5.1-farsight/arm-none-linux-gnueabi/libc/lib .
共享库的路径根据交叉编译工具链安装的位置的不同而不同。
$ sudo rm lib/*.a # 删除静态库文件
$ arm-none-linux-gnueabi-strip lib/*.so # 裁剪共享库文件,减小体积
4. 添加其他目录。重新进入到_install目录,生成相应的目录。
$ cd _install
$ mkdir dev etc home mnt proc root sys tmp var
$ mkdir etc/init.d
5. 添加/etc/inittab文件,文件内容如下。
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::restart:/sbin/init
6. 添加/etc/ init.d/rcS文件,文件内容如下。
#!/bin/sh
/bin/mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
7. 接下来添加该文件的可执行权限。
$ chmod +x etc/init.d/rcS
8. 添加/etc/fstab文件,文件内容如下。
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
9. 添加/etc/profile文件,文件内容如下。
#!/bin/sh
export HOSTNAME=farsight
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
10. cd /source
sudo mkdir rootfs
cp busybox-1.22.1/_install/* rootfs -rf
六、ramdisk
1.
$ cd ~
制作一个大小为8M的镜像文件
$ dd if=/dev/zero of=ramdisk bs=1k count=8192 (ramdisk为8M)
格式化这个镜像文件为ext2
$ mkfs.ext2 -F ramdisk
$ sudo mount -t ext2 ramdisk /mnt
$ sudo cp -a rootfs/* /mnt/
$ sudo umount /mnt
$ gzip --best -c ramdisk > ramdisk.gz
$ mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
2. 拷贝制作好的镜像文件到Fastboot目录准备进行烧写。
3. 接下来,重新配置内核,选择ramdisk的支持并指定大小。
File systems --->
<*> Second extended fs support
Device Drivers
SCSI device support --->
<*> SCSI disk support
Block devices --->
<*>RAM block device support
(16)Default number of RAM disks
(8192) Default RAM disk size (kbytes)
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
上面的配置项多数都已配置,主要是修改了ramdisk的大小为8192,这个值必须要和ramdisk镜像文件的 大小保持一致。保存配置后,重新编译内核,再将uImage文件拷贝到Fastboot目录下进行烧写。
4.修改启动参数,选择从EMMC中读取文件系统镜像ramdisk
setenv bootcmd mmc read 0x48000000 0x800 0x3000\;mmc read 0x49000000 0x20800 0x20800\;bootm 0x48000000 0x49000000
setenv bootargs root=/dev/ram rw initrd=0x49000040,0x1000000 rootfstype=ext2 init=/linuxrc console=ttySAC2,115200
六、tftp搭建 进行linu内核 设备树的下载 还可以进行让ramdisk下载
1.检查是否安装tftp server
sudo dpkg -s tftpd-hpa
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot
2、如果未安装,安装 tftp-server
sudo apt-get install tftpd-hpa tftp-hpa
3、修改文件vim /etc/default/tftpd-hpa,开启tftp服务
sudo vi /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-c -s -l"
启动tftp服务器server端:
sudo service tftpd-hpa restart
把内核 设备树 拷贝
七、NFS搭建根文件系统
在etc/apt 的sources.list 添加镜像源
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
然后 sudo apt-get update 接着安装就可以了
sysv-rc-conf
1.安装配置环境
查看存不存在
sudo apkg -s nfs-kernel-server
不存在就安装
sudo apt install nfs-kernel-server
2. 文件夹创建
sudo mkdir /source
sudo chmod 777 /source
把rootfs拷贝到/source目录下
3.nfs服务器server端的环境搭建
sudo vi /etc/exports
要在这个里面添加一行
/source/rootfs *(rw,sync,no_root_squash,no_subtree_check)
4.创建 lib/moudles/3.14.0 防止底层rmmod错误 根据需求创建
5.启动nfs服务器:
sudo /etc/init.d/nfs-kernel-server restart
解释:
/source 共享目录(存放文件系统,开发板访问)
rootfs 文件系统(名字) Linux内核访问的第一个文件系统
rw 读写(当用户进入到文件系统之后,对该文件系统拥有可读写的权限)
sync 文件同步到内存与硬盘
no_root_squash 如果以root用户的身份进入到文件系统之后,对文件系统进行操作,将不需要权限
no_subtree_check 如果文件系统中的子目录可以被共享,访问时不会检测父目录的权限