1. apt
#安装软件包命令
#APT(Advanced Packaging Tools)
#APT可以自动下载、配置、安装二级制或者源代码格式的软件包,自行解决依赖问题。
#对于Red Hat Enterprise Linux及其派生发行版(CentOS、Fedora等)采用的是yum(Yellow dog updater,modified)
#适用于在线安装软件
#16.04以前的版本用apt-get install 软件包名称
#16.04后的版本简化为apt install 软件包名称
#Ubuntu采用集中式的软件仓库机制,将软件包分类存放在软件仓库中进行管理,
#软件仓库放置在各种镜像服务器中,对于用户来说,当使用apt-get install安装
#软件包时,会从这些服务器下载软件包,这些镜像服务器就是软件源(Reposity)
#镜像服务器保存在/etc/apt/sources.list,建议更新为国内镜像,比如清华,阿里,更新完后apt update,
#自动联网寻找list中对应的Packages/Sources/Release列表文件,
#如果有更新则重新下载之,存入/var/lib/apt/lists/目录
#/etc/apt/source.list
#atp install u-boot-tools 用来生成适应u-boot引导的镜像文件格式
#atp install git
#git 基本命令git init ,git add,git commit,git log,git clone,git push
#安装交叉编译工具
#apt install gcc-arm-linux-gnueabi
#arm-linux-gnueabi-gcc -v查看版本号
#readelf -h hello 查看elf文件
#常用的apt命令行工具有两个,apt-get用于执行与软件包安装有关的所有操作,
#apt-cache用于查询软件包的相关信息
#使用APT工具安装和卸载软件包必须准确地提供软件包的名字。
#虽然 apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令。
#也就是说,可以用 apt 替换部分 apt-get 系列命令,但不是全部。
#apt install 取代 apt-get install 安装软件包
#apt remove 取代 apt-get remove 移除软件包
#apt update 取代 apt-get update 刷新存储库索引
===========================================================================
2. dpkg
#适用于离线安装软件
#获得Deb安装包后,可以使用dpkg命令工具进行离线安装,无需联网。这是Ubuntu
#传统的软件安装方式,最大的困难是要自行处理软件依赖性问题
#dpkg为Debian Packager的简写,主要针对Debian及其派生发行版(如Ubuntu)
#对于Red Hat Enterprise Linux及其派生发行版(CentOS、Fedora等)采用RPM工具
#Deb是Debian Packager的缩写,是Debian和 Ubuntu系列发行版本上使用的软件包
#格式(文件后缀名为.deb),需要使用dpkg命令进行管理。
#dpkg是Debian Packager的简写,用于安装、更新、卸载Deb软件包,以及提供Deb软件
#包相关的信息。
===========================================================================
2. qemu安装
#自动安装 apt install qemu
#自动安装
#首先安装qemu编译依赖包:
#apt install zlib1g-dev
#apt install libglib2.0-0 libglib2.0-dev
#apt install libsdl1.2-dev
#apt install libpixman-1-dev libfdt-dev
#下载qemu源码 git clone git://git.qemu-project.org/qemu.git
#git branch -a查看qemu源码的分支,查到哪个版本就编译哪个版本
#git checkout remotes/origin/stable-2.8 -b stable-2.8切换到2.8版本,到时候编译2.8
#git tag给软件版本打标签,版本分的更细
#git checkout v2.8.0 切换版本
#切换完后查询git branch
#配置./configure --target-list=arm-softmmu --audio-drv-list=
#编译make
#安装make install
#qemu-system-arm --version查看版本
#qemu-system-arm -M vexpress-a9 -m 512M -kernel ./uImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"
#启动开发板
#下载Linux内核linux-4.4.152.tar.xz
#解压缩tar xvJf linux-4.4.152.tar.xz
#修改内核Makefile ,修改为arm平台,交叉编译器arm-linux-gnueabi-
#257 ARCH ?= arm
#258 CROSS_COMPILE ?= arm-linux-gnueabi-
#内核配置 make vexpress_defconfig
#内核编译 make zImage -j6 启用6线程编译
#编译内核模块 make modules -j4 即是ko文件
#编译dtbs文件 make dtbs
#启动开发板
#qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"
#为了方便直接在arch/arm/boot/目录下创建脚本boot.sh
#echo "qemu-system-arm -M vexpress-a9 -m 512M -kernel /data/kernel/linux-4.4.152/arch/arm/boot/zImage -dtb /data/kernel/linux-4.4.152/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"">boot.sh
#通过ps -a 查询进程号,kill掉qemu-system-arm
#也可以通过git clone 来下载linux内核代码
#git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/
==========================================================================
3. busybox制作文件系统
#对磁盘管理的一个机制
#https://busybox.net/downloads/到官网下载busybox-1.27.0.tar.bz2
#解压tar xjvf busybox-1.27.0.tar.bz2
#解压后修改里面的Makefile
#164 CROSS_COMPILE ?= arm-linux-gnueabi-
#190 ARCH ?= arm
#保存退出
#配置 make defconfig
#执行完make defconfig 执行图形化编译
#也可以图像化配置make menuconfig图像化配置出现如下错误
#/data/busybox/busybox-1.27.0/scripts/kconfig/Makefile:14: recipe for target 'menuconfig' failed
#make[1]: *** [menuconfig] Error 1
#Makefile:443: recipe for target 'menuconfig' failed
#make: *** [menuconfig] Error 2
#解决方法apt install libncurses5-dev libncursesw5-dev 安装这两个库即可解决
#make menuconfig进入图形化配置
#勾选[*]Build BusyBox as a static binary (no shared libs)
#保存退出
#编译 make -j4
#安装make install
#安装完成后在cd _install/下生成相关目录,目录里面包括了Linux常见的相关命令
#接下来制作根文件系统
#根文件系统主要由基本的shell命令、各种库、字符设备、配置脚本组成
#mkdir rootfs
#cd rootfs/
#mkdir lib
#cp -r /data/busybox/busybox-1.27.0/_install/* /data/rootfs
#cp -p /usr/arm-linux-gnueabi/lib/* lib
#/data/rootfs# mkdir dev
#cd dev/
#mknod -m 666 tty1 c 4 1创建串口字符设备
#mknod -m 666 tty2 c 4 1
#mknod -m 666 tty3 c 4 1
#mknod -m 666 tty4 c 4 1
#mknod -m 666 console c 5 1创建一个控制台节点
#mknod -m 666 null c 1 3 创建一个null节点,相当于一个垃圾站,黑洞
#节点创建完后接下来创建镜像
#这里利用SD卡制作一个文件系统镜像,也就是说根文件系统放在SD里面,内核启动之后从
#SD卡挂载根文件系统
#生成根文件系统的步骤可以使用
#/data# dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
#生成一个ext3格式的一个文件系统镜像,我们直接把它看做一个SD就行
#接下对这个SD卡格式化
#mkfs.ext3 rootfs.ext3 格式化为ext3的形式,相当于windows的每个硬盘的分区,也可以格式化为各种文件系统
#接着可以往SD卡里面拷贝东西了
#我们知道块设备是不能直接读写的,必须要先挂载到某个目录下才能操作
#mount -t ext3 rootfs.ext3 /mnt/ -o loop
#然后我们将制作好的文件系统拷贝到mnt中
#cp -r rootfs/* /mnt/
#umount /mnt
#这样根文件系统制作完成
#下面来启动内核,挂载rootfs
#vim boot.sh
#修改boot.sh
#qemu-system-arm -M vexpress-a9 -m 512M -kernel /data/kernel/linux-4.4.152/arch/arm/boot/zImage -dtb /data/kern
#el/linux-4.4.152/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 rw console=ttyAM
#A0" -sd rootfs.ext3
#启动成功,可以进入控制台
#can't run '/etc/init.d/rcS': No such file or directory启动过程中报了这一条错误
#其实一个真正的文件系统它有很多目录的,比如有proc、etc、var,这里创建的文件系统只是最简单的文件系统
#因为我们这里的这个文件系统是可以读写的,是一个SD卡,我们可以直接创建目录
#mkdir etc
#cd etc/
#cd init.d/
#touch rcS
#chmod a+x rcS
#vi rcS
#echo "============================"
#echo "welcome to A9 vexpress board"
#echo "============================"
#保存退出
#然后重启,发现重启命令不支持,只能在开发板外面重启
#老方法kill掉kill掉qemu-system-arm
#重启后即可看到欢迎界面,错误can't run '/etc/init.d/rcS': No such file or directory消失了
#其实可以在制作根文件系统时就把这个目录给添加上
#另外一种启动方法(LCD)
#qemu-system-arm -M vexpress-a9 -m 512M -kernel /data/kernel/linux-4.4.152/arch/arm/boot/zImage -dtb /data/kern
#el/linux-4.4.152/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -append "root=/dev/mmcblk0 rw console=tty0" -sd rootfs.ext3
============================================================================================================
4. 使用u-boot加载linux内核
#bootloader的功能:硬件检测,加载操作系统镜像到RAM
#设置不同的启动方式,常见的启动方式:NOR/NAND/FLASH启动,从SD卡启动,bootload从网络加载Linux内核启动
#http://ftp.denx.de/pub/u-boot/下载
#解压tar xjvf u-boot-2017.05.tar.bz2
#vi Makefile
# 249 CROSS_COMPILE ?= arm-linux-gnueabi-
#保存退出
#还要修改一个
#vim config.mk
#25 ARCH := arm
#接下来配置
#make vexpress_ca9x4_defconfig
#编译
#make -j4
#编译成功后测试开发板
#qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel u-boot
#u-boot起来
#先关掉开发板,接下来配置一下网络等相关功能
#先配置qemu的网络功能,配置qume与主机的网络连接,采用桥接的网络连接与host通信
#需要主机内核tun/tap模块支持
#主机先安装uml-utilities bridge-utils
#apt install uml-utilities bridge-utils
#查看已经自动生成 /dev/net/tun tun设备文件
#修改配置使功能生效
#/etc/network# vim interfaces 添加
#7 auto br0
#8 iface br0 inet dhcp
#9 bridge ports ens33
#然后重启主机reboot
#重启后ifconfig 查看多了一个网卡br0
#使用u-boot引导内核镜像
#需要将内核编译为uImage格式
#需要指定uImage的加载地址
#编译时指定:make LOADADDR=0x60003000 uImage -j4
#/linux-4.4.152/arch/arm/boot下面已经生成uImage
#接下来主机安装TFTP工具
#apt install tftp-hpa tftpd-hpa xinetd
#修改配置文件,这里保持默认
# 1 # /etc/default/tftpd-hpa
# 3 TFTP_USERNAME="tftp"
# 4 TFTP_DIRECTORY="/var/lib/tftpboot"
# 5 TFTP_ADDRESS=":69"
# 6 TFTP_OPTIONS="--secure"
#接下来改变目录/var/lib/tftpboot的权限
#chmod 777 tftpboot/
#/etc/init.d/tftpd-hpa restart 重启tftpd-hpa服务
#把vexpress-v2p-ca9.dtb uImage u-boot拷贝到/var/lib/tftpboot
#然后在当前目录创建一个脚本boot-uboot.sh
#运行脚本./boot-uboot.sh即可启动开发板
===========================================================================================
5. shutdown -h now
#立即关机
#poweroff 立即关机
===========================================================================================
6. du -h *
#查看目录下所有文件的大小
#-h 代表--human-readable
#du -h --max-depth=1 查看当前目录下所有一级子目录文件夹大小
===========================================================================================
7. ifconfig
#通过该命令可查看和配置网络接口
#ifconfig 是一个比较古老的命令,在Ubuntu 17以及其他的许多发行版中,已经不太
#推荐使用该命令了,默认情况下,Ubuntu17.04已经不提供该命令,用户可以通过安装net-tools
#软件包来获得该命令:sudo apt intall net-tools
#ifconfig的语法如下
#ifconfig interface [aftype] options | address
#interface:网卡代号,例如eth0,eth1等
#option主要有以下几个参数
#(1)network 网段
#(2)broadcast 广播网段
#(3)netmask 子网掩码
#up|down 启动|关闭网络接口
#ifconfig 这个指令在没有加上网络卡时,会将所有的网络接口内容显示出来
#ifconfig eth0 192.168.1.102 netmask 255.255.255.0
#将eth0这个网络接口的IP地址改为192.168.1.102 子网掩码设置为255.255.255.0
#ifconfig eth0 down 关闭网卡eth0
#ifconfig eth0 up 启动eth0网卡
#需要注意的是,ifconfig为网卡指定ip地址,这只是用来调试网络用的,并不会更改系统关于
#网卡的配置文件,
#wlanX表示无线网卡
#HWaddr:网卡的硬件地址,即MAC地址
#inet addr:网卡的IP
#Bcast:广播(broadcast)的地址
#Mask:子网掩码
#MTU:Maximum Transmission Unit最大传输单元(字节),即此接口一次所能传输的最大数据包,这个
#数值并非越大越好,也非越小越好,需要根据实际情况设定一个合理值
#RX:网络由启动到目前为止的数据接收状况
#TX:网络由启动到目前为止的数据上传状况
#collisions:网络信号冲突状况
#txqueuelen:传输缓冲区长度大小
#Interrupt: IRQ中断地址
#Base address: I/O地址
===========================================================================================
8. 设置网络为静态IP或DHCP获取IP
#静态IP设置方法
#vim /etc/network/interfaces 网络配置文件
##interfaces(5) file used by ifup(8) and ifdown(8)
#auto lo
#iface lo inet loopback
#auto ens33
#iface ens33 inet static
#address 192.168.80.130
#netmask 255.255.255.0
#gateway 192.168.80.1
#保存退出,重启系统
#重启完成后系统的IP变成我们修改的IP地址,经验证只有重启系统IP地址才变成我们设置的IP
#DHCP设置方法
#vim /etc/network/interfaces 网络配置文件
##interfaces(5) file used by ifup(8) and ifdown(8)
#auto lo
#iface lo inet loopback
#auto ens33
#iface ens33 inet dhcp
#保存退出,重启系统
===========================================================================================
9. 源代码安装软件的基本步骤
#(1)下载和解压缩软件包
#(2)执行configure生成编译配置文件Makefile
#源代码需要编译成二进制代码再进行安装。自动编译需要Makefile文件,在源代码中使用configure命令
#生成。多数源代码包都提供一个名为configure的文件,它实际上是一个使用Bash脚本编写的脚本。
#该脚本将扫描系统,以确保程序所需的所有库文件页已经存在,并做好文件路径及其他所需的设置工作,
#并创建Makefile这个文件。
#为方便根据用户的实际情况生成Makefile文件以指示make命令正确编译源代码,configure通常会提供若干选项供
#用户选择。每个源代码包中的configure命令选项不完全相同,实际应用中可以执行./configure -help来查看。
#(3)执行make命令编译源代码
#make会依据Makefile文件中的设置对源代码进行编译并生成可执行的二级制文件。编译工作主要是运行gcc将源代码
#编译成可以执行的目标文件,但是这些目标文件通常还需要连接一些函数库才能产生一个完整的可执行文件。使用make
#就是将源代码编译成为可执行文件,放置在目前所在的目录之下,此时还没有安装到指定目录中。
#(4)执行make install安装软件
#make只是生成可执行文件,要将可执行文件安装到系统中,还需要执行make install命令。
============================================================================================
10. insmod
#用来安装驱动,
#insmod net.ko ,ko文件是内核模块文件,是内核加载的某个模块,一般是驱动程序。
============================================================================================
11. mount
linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除次关联关系的过程称为“卸载”。
注意:“挂载点”的目录需要以下几个要求:
(1)目录事先存在,可以用mkdir命令新建目录;
(2)挂载点目录不可被其他进程使用到;
(3)挂载点下原有文件将被隐藏。
格式:mount [-参数] [设备名称][挂载点]
例如:mount -t nfs -o nolock 192.168.1.141:/root/rootfs /mnt 意思是:
把192.168.1.141:/root/rootfs挂载到 /mnt下面
其中常用的参数有:
-t 指定设备的文件系统类型,常见的有:
(1)nfs 网络文件系统
(2)ext2 Linux目前常用的文件系统
...............
-o 指定挂载文件系统时的选项
(1)nolock 非锁定方式
(2)ro 只读
(3)rw读写