从0开始搭建嵌入式linux开发平台

  • I、换源
  • II、交叉编译器
  • III、将uboot烧录到SD卡
  • III、TFTP加载内核和设备树文件
  • IV、NFS挂载根文件系统
  • V、NFS无法挂载文件系统

I、换源

1:清华源地址(ubuntu20.04):https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
2:备份原始源:sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
3:sudo gedit /etc/apt/sources.list
4:全部删除,并粘贴为清华源中的内容
5:更新源:sudo apt-get update

II、交叉编译器

找到:“gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz“ 在同一文件夹下:
sudo mkdir /usr/local/arm
sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/
cd  /usr/local/arm/
sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
sudo gedit /etc/profile
在最后一行输入:export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
保存退出
重启电脑
查看交叉编译器版本:arm-linux-gnueabihf-gcc -v

III、将uboot烧录到SD卡

1:删除SD卡分区并创建新分区:
		sudo fdisk -l
		sudo fdisk /dev/sd?
		删除原有分区:d1
		创建新的分区:n
		然后一直默认即可
		保存:wq
2:格式化SD卡
		sudo mkfs -t vfat /dev/sd?1
3:   sudo fdisk -l
	  查看SD卡文件类型是否变为Linux(fat)
4:进入目录《2/移植阶段/2移植uboot/3LCD和网络windoo_uboot》烧写bin文件
	  ./imxdownload u-boot.bin /dev/sd?
5:安装putty
	  sudo apt-get install putty
6:  配置u-boot
	 sudo putty  ->选择/dev/ttyUSB0 115200
	
	 设置网络 
	  setenv ipaddr 192.168.1.50        //开发板 IP 地址
	  setenv ethaddr 00:04:9f:04:d2:35  //开发板网卡 MAC 地址
	  setenv gatewayip 192.168.1.1      //开发板默认网关
	  setenv netmask 255.255.255.0      //开发板子网掩码
	  setenv serverip 192.168.1.106     //服务器地址,也就是 Ubuntu 地址
	  saveenv                           //保存环境变量
      ping 192.168.1.106

	  设置bootcmd
	  setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 windoo_bd.dtb;bootz 80800000 - 83000000'

	  设置bootargs
	 setenv bootargs console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.106:/home/windoo/linux/nfs/rootfs ip=192.168.1.50:192.168.1.106:192.168.1.1:255.255.255.0::eth0:off'␊
	   saveenv 
	  

III、TFTP加载内核和设备树文件

1:ubuntu下安装TFTP
	  sudo apt-get install tftp-hpa tftpd-hpa
	  sudo apt-get install xinetd
	  mkdir /home/windoo/linux
	  mkdir /home/windoo/linux/tftpboot
	  chmod 777 /home/windoo/linux/tftpboot

	  sudo touch /etc/xinetd.d/tftp
	  sudo gedit  /etc/xinetd.d/tftp
	  ->->->
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/windoo/linux/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
	  ->->->
	 sudo service tftpd-hpa start

	 sudo gedit /etc/default/tftpd-hpa
	  ->->->
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/windoo/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
	  ->->->
 	  sudo service tftpd-hpa restart

2:验证测试:
进入目录:/2移植阶段/3移植内核_zImage+设备树/3添加自己的开发版
cp  arch/arm/boot/dts/windoo_bd.dtb /home/windoo/linux/tftpboot
cp  arch/arm/boot/zImage /home/windoo/linux/tftpboot

然后自动启动

IV、NFS挂载根文件系统

1:安装NFS
sudo apt-get install nfs-kernel-server rpcbind
sudo gedit /etc/exports
mkdir /home/windoo/linux/nfs
在最后面加入:/home/windoo/linux/nfs *(rw,sync,no_root_squash)
sudo /etc/init.d/nfs-kernel-server restart

2:busybox
进入我们早就配置完成的busybox文件夹下:2移植阶段/4构建根文件系统/busybox-1.29.0
mkdir /home/windoo/linux/nfs/rootfs
make install CONFIG_PREFIX=/home/windoo/linux/nfs/rootfs  //如果失败请查看是否是文件夹权限的问题



   拷贝库文件(可以看出来步骤5中编译出来的根文件系统是不全的)
   所谓的库文件,就是我们交叉编译器的库文件。
   
   cd /home/windoo/linux/nfs/rootfs
   mkdir lib
   cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib
   cp *so* *.a /home/windoo/linux/nfs/rootfs/lib/ -d
   --(这些库里有个特殊的文件:ld-linux-armhf.so.3,他是个软连接,需要把它变成原文件)
   cd /home/windoo/linux/nfs/rootfs/lib
   rm ld-linux-armhf.so.3
   cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib
   cp ld-linux-armhf.so.3 /home/windoo/linux/nfs/rootfs/lib
   --
   cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib
   cp *so* *.a /home/windoo/linux/nfs/rootfs/lib/ -d
   
   mkdir /home/windoo/linux/nfs/rootfs/usr/lib/
   cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib
   cp *so* *.a /home/windoo/linux/nfs/rootfs/usr/lib/ -d
   
   创建其他文件夹
   cd /home/windoo/linux/nfs/rootfs/
   mkdir dev proc mnt sys tmp root 

   bootargs中的根文件系统路径设置,从nfs启动。
   setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.106:/home/windoo/linux/nfs/rootfs ip=192.168.1.50:192.168.1.106:192.168.1.1:255.255.255.0::eth0:off'
  
  完善根文件系统:
  cd /home/windoo/linux/nfs/rootfs
   i:
     mkdir etc
     mkdir etc/init.d
     touch etc/init.d/rcS
     vim etc/init.d/rcS
---------  
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH

mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
--------
     chmod 777   etc/init.d/rcS

   ii:
      touch etc/fstab
      vim   etc/fstab
---------
#     
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
---------
   iii:
       touch etc/inittab
       vim etc/inittab
#etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

V、NFS无法挂载文件系统

移步https://blog.csdn.net/helloworld573/article/details/108088174

你可能感兴趣的:(嵌入式从入门到摔开发板,linux,ubuntu)