linux系统构建(Linux系统结构)
本文目录一览:
- 1、怎么搭建linux系统
- 2、在linux系统中,哪些常用的服务需要构建?
- 3、如何在linux下构建强大的build系统
- 4、如何从零构建一个linux系统
- 5、Linux系统构建 要具备什么
- 6、Linux系统一般由哪4个部分组成?
怎么搭建linux系统
开始的时候,可以先玩玩,用光盘或U盘来做载体,以live 模式运行,然后可以模仿,在硬盘上放文件……
其实最简单的就是直接安装,头几次可以找空盘,直接让它出来,装完就知道咋回事了,那么以后就可以自己改变一些……其实都不重要
在linux系统中,哪些常用的服务需要构建?
3.1 Telnet
协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
在Linux的命令行窗口输入“telnet 192.168.1.230”,如图出现登录界面,根据提示输入用户名和密码即可。
3.2 FTP
服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。
无论在Linux系统还是windows系统中,一般安装后都自带一个命令行的ftp命令程序,使用ftp可以登录远程的主机,并传递文件,这需要主机提供ftp服务和相应的权限;我们可以从PC机的命令行窗口登录开发板,并向开发板传递文件。
在Linux的命令行窗口输入命令ftp 192.168.1.230即对方的IP地址,即可连接上指定地址的服务器,根据提示输入用户名和密码即可登录。
3.3 ssh
为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
可以在PC上通过网络进入开发板上的字符终端进行操作,方法如下:
1) 在开发板上连接以太网线开机(或者连接USB Wifi),然后在串口终端上用ifconfig 命令查看一下开发板的IP地址,如果没有连接串口终端,也可以在LCD上进入网络设置应用,设置一个IP地址,例如192.168.1.230
2) 现在回到PC ,在PC Linux命令行下,假设开发板的IP地址是192.168.1.230,则输入命令ssh root@192.168.1.230,然后输入密码fa即可进入开发板的字符终端
3.4 NFS服务器
掌握NFS服务器的安装、配置和使用掌握NFS客户端的配置掌握挂载和卸载共享目录了解Windows文件共享的基本概念和Samba服务器的功能掌握Samba服务器的配置管理掌握Samba客户程序的使用了解TFTP掌握TFTP服务器的配置管理掌握TFTP客户端程序的使用
3.5 TFTP服务器
Ubuntu中TFTP服务器配置:apt-get install tftp-hpa tptpd-hpa下载TFTP服务器,sudo vim /etc/default/tftpd-hpa
内容如下:
TFTP_USERNAME=“tftp”
TFTP_DIRECTORY=”/home/linux/tftpboot”
TFTP_ADDRESS=”0.0.0.0:69”
TFTP_OPTIOS=”--secure”
sudo service tftpd-hpa stop
sudo service tftpd-hpa start
sudo service tftpd-hpa status
sudo service tftpd-hpa restart
然后可以在别的主机使用命令tftp 服务器ip
使用命令:get filename 上传本地文件到TFTP服务器,putfilename下载TFTP服务器的文件到本地
NFS是SUN开发的,用于Unix机器之间的资源共享。目前被广泛应用于Linux系统之间的资源共享。
Samba服务器
主要用于在Windows和Unix之间共享资源。资源包括文件、打印机等等。目前被广泛应用于Windows与Linux之间实现资料共享。
配置文件smb.conf。/etc/samba/smb.conf
输入"sudo service smbd restart"重启samba服务--回车--服务重启成功访问共享名为myshare的共享目录
在"运行"窗口中输入"\\192.168.1.4"--回车--双击打开myshare--回车--输入用户名和密码--回车--访问成功。
如何在linux下构建强大的build系统
大致目录构建如下:
├── uc-config.in : 用来生成配置环境信息的可执行程序
├── uc.pc.in : 用来生成配置环境信息的文件
├── uc.spec.in : 用来产生spec文件
├── autogen.sh : build工具
├── conf : 配置文件目录
├── config.h.in : 一些编译过程中的配置信息
├── configure : 配置工具
├── configure.ac : 形成build以及配置工具的文件
├── data : 数据目录
├── doc : 文档
├── Doxyfile.in : 生成Doxyfile的文件,主要用于doxygen的配置文件
├── include : 外部的头文件,工程内的文件不要放入
├── lib : 外部的库文件,工程内的库不要放入
├── m4 : m4文件
├── scripts : 常使用的一些script,用于运转系统
├── src : 源代码目录
│ ├── xxxMain.cpp : 用于产生xxx的gnome版本的源文件,含有main入口
│ ├── xxx.h : 用于外部开发的xxx接口
│ ├── xxxMain.cpp:用于产生xxx的kde版本,含有kde的main入口
│ ├── common : 普通的头文件
│ │ ├── xxxdef.h : xxx的一般定义
│ │ ├── xxxrst.h : xxx的返回值类型定义
│ │ ├── xxxtypes.h : xxx的类型定义
│ │ ├── common.h : 共用头文件,含有xxxdef.h、xxxrst.h和xxxtypes.h等头文件
│ ├── network : 网络通讯库
│ ├── ui : ui界面库
│ │ ├── gnome : gnome界面库,主要是gtk2的一些界面接口
│ │ ├── kde : kde界面库,主要是qt的一些界面接口
│ └── util : 常用的一些共用库
├── test : 单元测试
│ ├── dotest.cpp : 主要测试入口
│ ├── network
│ ├── template.cpp : 样例模板 cpp 文件
│ ├── template.h : 样例模板 头文件
│ ├── ui
│ │ ├── gnome
│ │ └── kde
│ └── util
└── tools : 常使用的一些工具,用于维护系统
如何编写configure.ac
configure.ac是产生configure以及automake重要文件,一般可以使用autoscan生成,这里就不太详细描述,网上可以google到很多资料。
一般开发人员只需要使用autogen.sh,这个脚本会完成所有的automake以及autoconf的操作,虽然其中m4文件定义的宏非常重要,但是不需要开发人员完全读懂,这里也不是关注的重点,等一步步的完全熟悉了,再过来了解也不迟。
这里项目中默认已经生成好了configure.ac。
如何编译Makefile.am
开发人员重点关注的是Makefile.am,Makefile.am完全和Makefile的语法一样,不过你可以写少量的信息就足够了。
如何编译源文件
这里所指的源文件一般指c/c++源文件,对于java的源文件,我们将ant放入Makefile.am,道理一样。编译源文件一般有两种方式,库文件和可执行文件,而库文件也有两种方式,静态库文件和动态库文件,一般静态库用:
lib_LIBRARIES = libcpthread.a
这种方式表示生成一个静态库,对应的源文件如何写呢?
libcpthread_a_SOURCES = thread.cpp thread.h
当然对于一般头文件可以忽略不写,不过建议写上,因为每个开发者都不是很规范,头文件不仅仅只有申明,有的头文件还会有实现。如果有多个cpp文件生成一个库文件,则全部添加;如果有多个.a文件需要生成,只需要用空格隔开.a文件,相应的源文件对应到.a文件即可,如下所示:
lib_LIBRARIES = libcpthread1.a libcpthread2.a libcpthread2.a
那么动态库该如何写呢?有人肯定会提到
lib_LIBRARIES = libcpthread.so
libcpthread_so_SOURCES = thread.cpp thread.h
不过可惜是错误的,这里顺便提到一个libtool,主要用来生成静态库和动态库的一个工具,不过在autogen.sh工具里面已经包含。正确写法如下:
lib_LTLIBRARIES = libcpthread.la
libcpthread_la_SOURCES = thread.cpp thread.h
有人看到这觉得很奇怪,为什么要生成.la这个文件呢?.la文件内容如下:
# libcpthread.la - a libtool library file
# Generated by ltmain.sh - GNU libtool 1.5.6 (1.1220.2.95 2004/04/11 05:50:42)
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
# The name that we can dlopen(3).
dlname='libcpthread-1.0.0.so.1'
# Names of this library.
library_names='libcpthread-1.0.0.so.1.0.0 libcpthread-1.0.0.so.1 libcpthread.so'
# The name of the static archive.
old_library='libcpthread.a'
# Libraries that this one depends upon.
dependency_libs=' -ldl /usr/lib64/libconfig++.la /usr/lib64/libconfig.la /usr/lib64/libchardet.la /usr/local/lib64/libalog.la -lz /usr/local/lib64/libanet.la -lpthread -lalog'
# Version information for libcpthread.
current=1
age=0
revision=0
# Is this an already installed library?
installed=no
# Should we warn about portability when linking against -modules?
shouldnotlink=no
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
# Directory that this library needs to be installed in:
libdir='/usr/lib'
看到了吧?里面指定了关于静态库和动态库的依赖等一系列的信息,具体还可以参考项目框架设计模式中库公约的部分。
静态文件和动态文件都会在当前目录的.libs下,当然开发者也不需要关注库文件本身,了解在这个路径下即可。
可执行文件如何编译呢?
bin_PROGRAMS = threadpool
threadpool_SOURCES = threadpoolMain.cpp
此处的bin_PROGRAMS会将程序安装到${prefix}路径下,如果不想安装,可以采用:
noinst_PROGRAMS = testthreadpool
threadpool_SOURCES = threadpoolMain.cpp
同理,如果有多个cpp文件生成一个库文件,则全部添加;如果有多个.la文件或者可执行文件需要生成,只需要用空格隔开.a文件,相应的源文件对应到.a文件即可,如下所示:
lib_LTLIBRARIES = libcpthread1.la libcpthread2.la libcpthread2.la
noinst_PROGRAMS = testthreadpool1 testthreadpool2 testthreadpool3
如果库文件或者二进制文件有头文件的申明依赖或追加一些编译选项,则可以使用CFLAGS或CPPFLAGS,如下所示:
threadpool_CPPFLAGS = -I$(top_srcdir)/include/example.h
如果是java源文件,只需要遵循普通makefile写法即可,如:
all: threadpool.jar
.PHONY: threadpool.jar clean
threadpool.jar:
@ant jar
clean:
ant clean
当然,ant需要配置好build.xml哟!
如何连接库
连接库的的时候,同样也会有区分,工程外部的连接需使用LDFLAGS,如下所示:
libcpthread_la_LDFLAGS = -pthread
如果是内部库,我们就直接使用.la文件,这样在选择静态连接或者动态连接的时候,就给开发者很大的空间。值得注意的是,库文件和二进制的内部库连接宏并不相同,表现如下:
libcpthread_la_LIBADD = $(top_srcdir)/src/util/libutil.la
threadpool_LDADD = libcpthread.la
现在编译和连接是否都了解了呢?
非编译的一些开发
当创建一个脚本或配置文件的时候:
make dist
则形成一个.gz的压缩包,但刚才创建的脚本或配置文件并没有加入,于是:
EXTRA_DIST = conf/config.cfg
script/example.sh
即可将脚本或配置文件放入到压缩包中;
若在多层目录上的时候,还可以使用宏SUBDIRS指定内部编译的顺序(包括当前目录),比如:
SUBDIRS = util /
thread /
. /
log
/
common
在编译系统make的时候,会严格按照顺序进行。
提供外部开发
如果工程完成了,别人想使用上面的库文件进行二次开发,该如何做呢?
libcpthreadincludedir = $(includedir)/@PACKAGE_NAME@/util/thread
libcpthreadinclude_HEADERS = thread.h
这样在编译系统make install的时候,会将头文件安装到上面指定的目录下,别人依照上面的build系统继续下面的build了。
如何从零构建一个linux系统
操作系统这玩意…并不是都像windows那样图形界面一堆工具,甚至不像linux发行版那样带一堆命令行工具。
以linux为例,图形界面就不说了命令行?那是bash,是个独立包,人家在bsd在unix在darwin上都跑得妥妥的。
一个纯粹的操作系统,其实只是定义了驱动接口(用别人的驱动),定义了最简单的进程调度管理,定义了内存分配。这就已经是操作系统了。
所以写一个新的操作系统真的真的不是特别困难。困难的是你的os出来之后除了你自己大概是不会有人给他写驱动写程序的,除非用户多;啥都没有的os不会有人用。
Linux系统构建 要具备什么
C 是必学,必通,必精,特别是链表、结构体
以上C是必须,不然你就放弃吧;
初级:装个虚拟机系统,在VM上,一般现资料较多那是ubuntu,找点资料比如鸟哥私房菜,熟悉下命令;linux下系统一定要用会命令行,其实也不难,用的频繁也就那么几个;会一些系统配置;
《菜鸟私房菜》有什么学什么;
中级:要懂操作系统,〈操作系统概念〉要能看懂些,特别是调度、内存;
做一些应用层API编程;可参照〈UNIX 高级环境编程〉;网络编程、数据库都是发展的好方向;
会makefile,这对大工程来说是必须的;
高级:那就涉及到内核的了,内核裁剪移植、文件系统,bootload;热门的有驱动、板级支持;
挺难,对我来说确实啃不好;
以上只是我个人过来的经验;参加这类,起码有中级水平;
对你来说我想是很难的;
“怎样做才能从一个门外汉 变成能够改造Linux内核 构建属于自己的系统”我想你现在不用考虑的问题,一口气是吃不了的,只有你入行了,你才越陷越深;
做嵌入式不是每一样多是精通,通一熟多
Linux系统一般由哪4个部分组成?
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
一、Linux内核
内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务、共享库、需求加载、可执行程序和TCP/IP网络功能。Linux内核的模块分为以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信、系统的初始化和系统调用等。
二、Linuxshell
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
三、Linux文件系统
文件系统是文件存放在磁盘等存储设备上的组织方法。Linux系统能支持多种目前流行的文件系统,如EXT2、EXT3、FAT、FAT32、VFAT和ISO9660。
四、Linux应用程序
标准的Linux系统一般都有一套都有称为应用程序的程序集,它包括文本编辑器、编程语言、XWindow、办公套件、Internet工具和数据库等。
扩展资料:
LINUX系统的特点
1、Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。
2、在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。
3、Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。