读书笔记 —— 《嵌入式C语言自我修养》
软件安装
linux
安装包的制作
编译
软件安装包路径
使用dpkg命令来制作安装包 及 安装包的卸载
软件仓库
更新源
查看具体需要更新的软件包 更新软件包
软件安装
软件安装的过程其实就是将一个可执行文件安装到ROM的过程。ROM中存储的数据断电后不会消失,常用来保存程序的指令和数据,但ROM不支持随机存取,因此程序运行时,会首先将指令和数据从ROM加载到RAM,然后CPU到RAM中取指令就可以了。
下载的软件安装包里包含了可以在计算机上运行的可执行文件,开发者为了方便用户使用,将可执行文件、程序运行时需要的动态共享库、安装使用文档等打包压缩,生成可运行的自解压安装包格式。
使用安装包安装软件就是将包中的可执行文件解压出来,然后将可执行文件和动态共享库复制到指定的安装目录,并把这些安装信息告诉操作系统。当用户要运行这个软件时,操作系统就会从安装目录找到这个可执行文件,把它加载到内存执行。
在Linux环境下,一般将可执行文件直接复制到系统的官方路径/bin、/sbin、/usr/bin下,程序运行时直接从这些系统默认的路径下去查找可执行文件,将其加载到内存运行。
linux
安装包的制作
Linux操作系统一般可分为两派:Redhat系和Debian系。Redhat系使用RPM包管理机制,而Debian系,像Debian、Ubuntu等操作系统则使用deb包管理机制。
在制作deb包时,除了可执行文件,还需要一些控制信息来描述这个安装包,如软件的版本、作者、安装包要安装的路径等,这些控制信息放在一个叫作control的文件里。下面我们就写一个简单的helloworld程序,并为它制作一个deb包。
helloworld.c
#include <stdio.h>
int main(void)
{
int j,j,count=0;
printf("this is my first program!\n");
while(1)
{
printf("hello world!\n");
for(i=0;i<20000;i++)
for(j=0;j<20000;j++)
;
}
return 0;
}
编译
gcc -o helloworld helloworld.c
软件安装包路径
创建一个helloworld同名目录,然后进入该目录,分别创建DEBIAN、usr/local/bin/目录,并在DEBIAN目录下创建control文件,将可执行文件helloworld复制到usr/local/bin/目录下,操作完成后helloworld的目录结构如下所示制作一个软件安装
usr/local/bin/表示deb包的默认安装路径
control文件用来记录安装包的安装信息
package:helloword
version:1.0
architecture:i386
maintainer:wit
description:deb package demo
使用dpkg命令来制作安装包 及 安装包的卸载
# dpkg -b helloworld/ helloword_1.0_i385.deb
//安装
# dpkg -i helloword_1.0_i385.deb
//卸载程序及配置文件
# dpkg -P helloworld
//卸载程序
dpkg -r helloworld
软件仓库
因为每个人都可以编译、制作deb包,并随意发布到网上,这就很容易造成混乱软件包鱼龙混杂,质量得不到保证,Ubuntu操作系统采用一个软件仓库来管理这些deb包,第三方开发者发布的软件和工具首先要通过官方验证,然后把这些包放到一个官方网站服务器上,提供给用户下载使用。当用户使用apt-get命令安装软件时,只能到这个服务器下载。考虑到全球各个地方的网络环境差异,官方网站一般会在全球各地配置多个镜像服务器,Ubuntu用户可以根据自己的网络状况,到网速最快的服务器上去下载和安装deb包。这些服务器我们也称为软件源(repository),简称为“源”。这些服务器的网络地址保存在/etc/apt/source.list文件中。当用户使用apt-get install安装软件时,apt-get工具就会根据这个source.list文件中的服务器地址去下载对应的软件包。
访问国外的网站速度可能会慢很多,选择一个国内镜像源,如阿里云软件源、中科大软件源等服务器地址,添加到/etc/apt/source.list文件中,修改后,需要更新源。
更新源
#apt-get update
这个命令的作用是访问/etc/apt/source.list文件中的每一个服务器,读取可以支持下载的软件列表,并保存到本地计算机中(/var/lib/apt/lists)。当你要安装的软件不在软件列表中时,很可能就会安装失败。另一个作用是本地已经安装的软件如果和软件列表中的版本不一致,则系统就会提示软件需要更新。
查看具体需要更新的软件包 更新软件包
# apt-get list --upgradable
# apt-get update