Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24530
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2017-01-16 15:11
个人简介

我需要你的不作为 来消除我自己不作为这件事儿的恐惧。

文章分类
文章存档

2018年(1)

2017年(1)

2016年(1)

2014年(4)

我的朋友

分类: LINUX

2016-05-17 23:20:10

如何成为一个linux开发人员


当前linux作为server, database服务器,开发平台,嵌入式实时OS的作用都随着平台的发展越来越成熟产品的使用度也越来越高掌握linux作为application开发,嵌入式开发都成为优秀开发人员攻克的技术之一.


首先,程序员要了解在linux下的几个之最:

最有用开发语言: C/C++ 
最流行的工具集: gtk/gdk,qt/e
最好的可视化开发工具: glade,designer,kdeveloper 
cool的代码阅读工具: source navigator 
最普及的调试工具: gdb, ddd , anjuta
最高级(主要指价格高级)的程序跟踪工具: BDM,ICE 
最强大的开发平台: Redhat linux 6~8, Turbolinux 6~7,Hard Hat linux(HHL), Blue cat linux 
最快但最年青(年青就是不成熟,吃不得)的图形:nano-X,microwindows,minigui

部分名词的意思
gtk/gdk: 
 GIMP(linux很有名的图象处理软件的工具集 
qt: trollteck
公司的产品,有qt/x11qt/embedd 
glade: 
开发gtk/gdk程序的图形工具,能完成界面的编辑(这比用VI做界面好10^n 倍,本人曾经用vi 以每天2000行程序的速度写过gtk的应用,整整写了一个月,后来用glade用重来,一周就完成了
anjut: 
非常方便,功能强大的调试工具,程序出错不用再一行行试了,用它一目了然。
designer: 
开发qt/x11程序的图形工具,能完成界面的编辑,也可以开发qt/embedded的程序 
kdeveloper: 
类似VC一样,功能强大 
source navigator: redhat
公司出的代码阅读器,supper cool. 
microwindows: win32
接口GUI,又小又快,用于PDA 
nano-X: 
多任务的microwindows 
miniGUI: 
类似上面两种图形,国产的,虽然我没用过,但基于支持国产软件的原则,我想绝对比nano-Xmicrowindows好。

知道了如上的一些东西,我们就可以决定开发的方向了
1. 
对于C程序员 C + gtk/gdk + glade +anjuta+ 中文turbolinux 
2. 
对于C++程序员 C++ + qt/x11 + designer + kdeveloper + anjuta+中文turbolinux 
3. embedded
程序员 c/c++ + qt/embedded + gtk+ HHL 
4. embedded
爱好者 c/c++ + microwindows + HHL


我们Step by Step,只要肯下苦功钻研Linux,按照这条路走一定可以成为优秀的Linux开发人员。这个开发途径不一定是最好的,但肯定是一条正道,也是目前 Linux的潮流所在,是我多年开发Linux及做Linux项目的经验总结,出于对中国Linux事业的极大热情,愿意奉献出来与大家共享。

Step 1: 
掌握Linux的安装运行方法,包括:
a. 
CDROM直接安装Linux
b. 
fdiskpqmagic的协助手工分区安装Linux
c. 
硬盘上本身有Linux,但不能启动,要懂得使用软盘或CDROM恢复Linux系统
d. 
使用vpcvmware等工具安装启动Linux
e. 
dos/windows下安装Linux,使用loadlin来启动系统 
f. 
通过网络无盘来启动Linux,其实这个原理很简单,只要懂上面所说的loadlin使用,无盘启动Linux系统和无盘启动dos做法一模一样。

Step 2: 
掌握Linux的运行原理,Linux系统启动的标准流程:
Bios ->Lilo/Grub->Kernel->/sbin/init(init
等于是一个批处理,它将从/etc/inittab读取将要运行的指令,因此我们可以自己写这个批处理,往后要运行什么都可以自己控制)->login-> /usr/X11R6/bin/startx

Step 3: 
掌握Linux的常用命令,命令列表请查阅Tomlinux文档"Linux发常用命令"

Step 4: 
了解Linux专业名词及开发资源,请查阅Tomlinux文档"嵌入式Linux名词及资源"

Step 5: 如果从step1step4你都掌握或比较熟悉,那么进行嵌入式Linux开发的基础就算扎实了,接下来考虑的是开发的方向,一般是从X86的开发开始,进行X86开发的最佳组合为: 
a . Kernel 
使用最终稳定版而非最新版进行裁减,如果功能可达到,甚至可以退回到更旧的稳定版,旧版kernel可以做得更小更快。
b. bash
和常用命令集要使用busybox而不是使用标准的
c. 
如果存储空间足够,lib可使用标准libc,对于存储空间紧张的使用uClibc
d. 
图形系统使用Tinyx
e. 
窗口系统使用icewm
f. 
开发选用语言,个人认为使用C/C++是主力,其它只能作为辅助
g .
图形应用选用免费而又非常优秀的GTK工具集,可以在其图形开发环境galdeanjutaSNavigator的配合下进行,这个组合简直是黄金搭档,我自己觉得这加起来比vb/vc还好用。当然另一个不错的选择是使用QT工具集,可配置DesignerKdeveloper来使用。
h. 
开发字符应用可使用ncurses辅助,开发无图形服务器的系统可使用直接写屏framebuffer方式或SDLQT/E方式
i. 
发行时选用的存储器一般是DOC或者DOM而不使用HD

根据上面的组合开发出来的系统,装到8MDOC/DOM上完全没有问题,如果是以没有图形服务器方式h.进行的,最小1MDOC就够了。

Step 6: 掌握X86的开发方法后,在其它平台上进行开发也是大同小异,所需更换的主要是引导方式,kernel、基本库及编译器等。这些东西在安装相应的开发包后即可解决,不要自己耗大量时间去进行,开发精力应放到产品级的开发上去,必竟中国目前的水平还没有到编译器这一类的级别。不同的平台及相关的Linux支援主查阅 Tomlinux文档"" 

对于非X86平台的开发,经常会需对硬件进行分析,还需要使用硬件辅助除错,比如在ARM的开发中,ARM Debugger支持连接ICE(In-Circuit Emulator)Remote进行调试,还可通过JTAG接个ICD调试,在PPC开发中则使用BDM去调。 这些设备都比较贵,如果公司里面有现成的,那么一定要积极去使用它,即使有时有其它的代替方法,因为这样才可以表现出你是一个高手高手高高手。如果没有就要看情况是否购买它了,不是必要的就尽量为公司节省费用才是好员工。

当你成为一个优秀的嵌入式Linux开发人员时,不要因此而满足,那怕你是技术最最强的一个,但在一个公司里不表示你是值钱的。只有那些有长远目光,有想法有创意的,能为公司赚到钱的才是最棒的,所以要多了解市场信息,多了解Linux的发展动向,争取写出killer application 为公司赚钱。这也是我一向在努力的,只是至今还没能力实现,希望大家一起努力,一个是为了赚到银子,更重要的为中国的Linux发展及至软件事业作出贡献。

著名网站连接:

 

嵌入式Linux综合

嵌入式Linux文档、资源及下载,提供免费版本的嵌入式Linux系统

Linux技术交流与提问,有什么问题去那里发问,肯定会有所帮助

有许多Linux项目资源,内容丰富,版本最新还可发布自己的项目

最著的名源码下载网站,内容丰富,版本最新还可发布自己的项目

查阅各种标准,下载GNU软件

下载最新内核及查阅Linux内核的最新动向

提供最佳中文支持,也是一个很好的开发平台,兼容性略差于Redhat

最佳开发环境,兼容性最好,从V9.0起,对中文也开始提供了支持

LinuxDevices

使用Linux操作系统的产品及硬件信息

Linux新闻及潮流,Linux最新动向

嵌入式Linux系统

Boot loaerLilo的使用及配置方法是开发人员必须掌握的

图形化操作Boot loader,界面美观,对桌面版系统比较适用

一种快度启动的BIOS

很小的基本库,要编译很小的静态应用程序非它不可,标准libc太大了

非常成熟Linux多媒体库,许多ps/2游戏就是用它来开发的

Linux命令集,最常用的上百个Linux命令集中成一个小程序,cool

支持任意vesa2.0标准显示卡,启动速度非常快且完成兼容于标准X

国产高速微型GUI,兼容性不够好,比Microwin好,适合小型应用系统

高速微型GUI,兼容部分X功能,不成熟,适用于小型应用系统

微型窗口管理器,windows风格,支持theme,又小又快

DOC硬件厂商,并提供DOC的驱动程序和在DOC上安装Linux的向导

带有众多软modem(winmodem)的驱动程序

Linux Modem拔号支持及应用程序

Linux xDSL(包括ADSL)宽带支持及应用程序

带众多打印机驱动程序,如HP系统打印机基本上都有

win2000/winxp/win2003rdp5/6 支持及应用

 

 

一种无MMULinux,主要应用于微型控制器

可下载免费开发包,带有X86,StrongARM,PPC,MIPS等平台的支持

著名嵌入式开发包,其对ARM系统的支持好

嵌入式Linux硬实时操作系统

Linux PDA支持的至强,已开发出很多成熟的PDA应用

嵌入式Linux应用

GTK工具集,可以开发出像GIMP一样界面功能的软件,非常成熟

KDE所使用的工具体,能开发出类似windows界面的应用,有嵌入式版

著名的Mozilla浏览器,支持与IE相差不远,而且有些功能是IE没用的

用于编写GTK的界面,非常方便,用Glade画完图然后填入空函数即可

c/c++ IDE环境,可直接编译,跟踪程序

项目管理、代码阅读工具,使得代码的阅读及修改变得非常方便

Kdevelop

c/c++ IDE开发环境,带有大量的开发文档,是Linux下的MSDN

著名的web服务程序,历史悠久,使用者无数

一种中小型数据库,速度快具免费,是Linux下的首选数据库

web脚本语言,比ASPCGI等快得多也好用得多,非常流行

可提供Ftp文件服务,功能强且效率高

邮件服务程序,支持巨大数量的用户,功能强大且稳定

众多Linux游戏及Linux游戏新闻

Linux桌面主题,KDEGNOMEICEWMGTK等等什么的主题都有

古代著名的代码调试跟踪工具,但IDE一般得调用它才能调试跟踪

LinuxJava的支持,有桌面和嵌入式的版本



















Linux发行版本

国外发行版

国内发行版

 

嵌入式Linux

国外嵌入式Linux

LinuxDevices

 

 

 

 

 

国内嵌入式Linux




Linux新闻

国外新闻网站

国内新闻网站

 

Linux资料

国外Linux资料

国内Linux资料

IBM Linux专区

 

 

 

Linux论坛

国外Linux论坛

国内Linux论坛

 

 

Linux下载

国外下载

国内下载

 

Linux资源

系统工具

 

驱动程序

Cups

 

库及shell命令

桌面

多媒体

Winamp for Linux

浏览器/电子邮件

开发及集成环境

ncurses

Kdevelop

国际化及中文化

 

办公及应用

Coffeecup

 

 

服务及数据库

 

 

 

 

游戏

 


Linux
开发中的常用命令

基本操作命令:
---------------------------------------------------------------------- 
---------------------------------------------------------------------- 
ls #
以默认方式显示当前目录文件列表
ls –a #
显示所有文件包括隐藏文件
ls –l #
显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行
ls --color=never *.so > obj #
不显示文字颜色,将所有so文件记录到obj文件中

----------------------------------------------------------------------
cd dir #
切换到当前目录下的dir目录
cd / #
切换到根目录
cd .. #
切换到到上一级目录
cd ../.. #
切换到上二级目录
cd ~ #
切换到用户目录,比如是root用户,则切换到/root

---------------------------------------------------------------------- 
rm file #
删除某一个文件
rm -fr dir #
删除当前目录下叫dir的整个目录

---------------------------------------------------------------------- 
cp source target #
将文件source 复制为 target
cp /root/source . #
/root下的文件source复制到当前目录
cp –av soure_dir target_dir #
将整个目录复制,两目录完全一样
cp –fr source_dir target_dir #
将整个目录复制,并且是以非链接方式复制,当source目录带有符号链接时,两个目录不相同

---------------------------------------------------------------------- 
mv source target #
将文件source更名为target

---------------------------------------------------------------------- 
diff dir1 dir2 #
比较目录1与目录2的文件列表是否相同,但不比较文件的实际内容,不同则列出
diff file1 file2 #
比较文件1与文件2的内容是否相同,如果是文本格式的文件,则将不相同的内容显示,如果是二进制代码则只表示两个文件是不同的
comm file1 file2 #
比较文件,显示两个文件不相同的内容

---------------------------------------------------------------------- 
echo message #
显示一串字符
echo "message message2" #
显示不连续的字符串
cat:
cat file #
显示文件的内容,和DOStype相同
cat file | more #
显示文件的内容并传输到more程序实现分页显示,使用命令less file可实现相同的功能
more #
分页命令,一般通过管道将内容传给它,如ls | more

---------------------------------------------------------------------- 
export LC_ALL=zh_CN.GB2312 #
将环境变量LC_ALL的值设为zh_CN.GB2312
export DISPLAY=0:0 #
通过该设置,当前字符终端下运行的图形程序可直接运行于Xserver
date #
显示当前日期时间
date -s 20:30:30 #
设置系统时间为20:30:30
date -s 2002-3-5 #
设置系统时期为2003-3-5
clock –r #对系统Bios中读取时间参数
clock –w #
将系统时间(如由date设置的时间)写入Bios

---------------------------------------------------------------------- 
eject #umout
CDROM并将光碟弹出,但cdrom不能处于busy的状态,否则无效

---------------------------------------------------------------------- 
du #
计算当前目录的容量
du -sm /root #
计算/root目录的容量并以M为单位
find -name /path file #
/path目录下查找看是否有文件file
grep -ir “chars” #
在当前目录的所有文件查找字串chars,并忽略大小写,-i为大小写,-r为下一级目录

---------------------------------------------------------------------- 
vi file #
编辑文件file
vi 
原基本使用及命令: 
输入命令的方式为先按ctrl+c 然后输入:x(退出),:x!(退出并保存) :w(写入文件),:w!(不询问方式写入文件), :r file(读文件file) ,:%s/oldchars/newchars/g(将所有字串oldchars换成newchars) 这一类的命令进行操作

---------------------------------------------------------------------- 
man ls #
读取关于ls命令的帮助
man ls | grep color #
读取关于ls命令的帮助并通过grep程序在其中查找color字串

---------------------------------------------------------------------- 
startx #
运行Linux图形有环境
Xfree86 #
只运行X图形server

---------------------------------------------------------------------- 
reboot #
重新启动计算机
halt #
关闭计算机
init 0 #
关闭所有应用程序和服务,进入纯净的操作环境
init 1 #
重新启动应用及服务
init 6 #
重新启动计算机

---------------------------------------------------------------------- 
扩展命令
---------------------------------------------------------------------- 
---------------------------------------------------------------------- 
tar xfzv file.tgz #
将文件file.tgz解压
tar xfzv file.tgz -C target_path #
将文件file.tgz解压到target_path目录下
tar cfzv file.tgz source_path #
将文件source_path压缩为file.tgz
tar c directory > directory.tar #
将目录directory打包成不压缩的directory.tar
gzip directory.tar #
将覆盖原文件生成压缩的 directory.tar.gz
gunzip directory.tar.gz #
覆盖原文件解压生成不压缩的 directory.tar
tar xf directory.tar #
可将不压缩的文件解包

---------------------------------------------------------------------- 
dmesg #
显示kernle启动及驱动装载信息
uname #
显示操作系统的类型
uname -R #
显示操作系统内核的version

---------------------------------------------------------------------- 
strings file 
显示file文件中的ASCII字符内容

---------------------------------------------------------------------- 
rpm -ihv program.rpm #
安装程序program并显示安装进程
rpm2targz program.rpm program.tgz #
rpm格式的文件转换成tarball格式

---------------------------------------------------------------------- 
su root #
切换到超级用户
sulogin /dev/tty4 #
tty4alt+F4终端等待用户登陆或直接登陆开启一个shell
chmod a+x file #
file文件设置为可执行,脚本类文件一定要这样设置一个,否则得用bash file才能执行
chmod 666 file #
将文件file设置为可读写
chown user /dir #
/dir目录设置为user所有

---------------------------------------------------------------------- 
mknod /dev/hda1 b 3 1 #
创建块设备hda1,主设备号为3,从设备号为1,即master硬盘的的第一个分区
mknod /dev/tty1 c 4 1 #
创建字符设备tty1,主设备号为4,众设备号为1,即第一个tty终端

---------------------------------------------------------------------- 
touch /tmp/running #
/tmp下创建一个临时文件running,重新启动后消失

---------------------------------------------------------------------- 
sleep 9 #
系统挂起9秒钟的时间

---------------------------------------------------------------------- 
lpd stop 
 cups stop #停止打印服务程序
lpd start 
 cups start #启动打印服务程序
lpd restart 
 cups restart #重新启动打印服务程序
lpr file.txt #
打印文件file.txt

---------------------------------------------------------------------- 
fdisk /dev/hda #
就像执行了dosfdisk一样
cfdisk /dev/hda #
fdisk界面稍为友好些
mount -t ext2 /dev/hda1 /mnt #
/dev/hda1装载到 /mnt目录
df #
显示文件系统装载的相关信息 
mount -t iso9660 /dev/cdrom /mnt/cdrom #
将光驱加载到/mnt/cdrom目录
mount-t smb //192.168.1.5/sharedir /mnt -o username=tomlinux,password=tomlinux #
windows的的共享目录加载到/mnt/smb目录,用户名及密码均为tomlinux
mount -t nfs 192.168.1.1:/sharedir /mnt #
nfs服务的共享目录sharedir加载到/mnt/nfs目录
umount /mnt #
/mnt目录卸载,/mnt目录必须处于空闲状态
umount /dev/hda1 #
/dev/hda1设备卸载,设备必须处于空亲状态
sync #
cache中的内容与磁盘同步,在Linux中复制文件,一般要系统空闲才去写文件
e2fsck /dev/hda1 #
检查/dev/hda1是否有文件系统错误,提示修复方式
e2fsck -p /dev/hda1#
检查/dev/hda1是否有错误,如果有则自动修复
e2fsck -y /dev/hda1#
检查错误,所有提问均于yes方式执行
e2fsck -c /dev/hda1#
检查磁盘是否有坏区
mkfs /dev/hda1 #
格式化/dev/hda1ext2格式
mkfs.minix /dev/hda1 #
格式化/dev/hda1minix格式文件系统
mfks /dev/hda9 #
格工化/dev/hda9Linux swap格式
swapon /dev/hda9 #
swap分区装载当作内存来用
swapoff /dev/hda9 #
swap分区卸载

---------------------------------------------------------------------- 
lilo #
运行lilo程序,程序自动查找/etc/lilo.conf并按该配置生效
lilo -C /root/lilo.conf #lilo
程序按/root/lilo.conf配置生效
grub #
Linux shell状态下运行boot loader设置程序
grub-install #
安装grub磁盘引导程序,成功后升级内核无须像lilo一样要重新启动系统,只需修改/etc/grub.conf即可实现新引导配置
rdev bzImage #
显示kernel的根分区信息
rdev bzImage /dev/hda1 #
kernel的根分区设置为/dev/hda1,这在没有lilo等引导程序的系统中非常重要.

---------------------------------------------------------------------- 
dd if=/dev/fd0 of=floppy.fd #
将软盘的内容复制成一个镜像,功能与旧石器时代常用的hd-copy相同
dd if=/dev/zero of=root.ram bs=1024,count=1024 #
生成一个大小为1M的块设备,可以把它当作硬盘的一个分区来用
mkfs root.ram #
将块设备格式化为ext2格式
dd if=root.ram of=/dev/ram0 #
init.rd格式的root.ram的内容导入内存
mount /dev/ram0 /mnt #ramdisk /dev/ram0
装载到/mnt 目录

---------------------------------------------------------------------- 
gcc hello.c #
hello.c编译成名为a.out二进制执行文件
gcc hello.c -o hello #
hello.c编译成名为hello的二进制执行文件
gcc -static -o hello hello.c #
hello.c编译成名为hello的二进制静态执行文件
ldd program #
显示程序所使用了哪些库
objcopy -S program #
将程序中的符号表及无用的调试信息去掉,可以小很多

---------------------------------------------------------------------- 
strace netscape #
跟踪程序netscape的执行,看调用的库,环境变量设置,配置文件,使用的设备,调用的其它应用程序等,在strace下,程序干了什么东东一目了然。
ps #
显示当前系统进程信息
ps –ef #
显示系统所有进程信息
kill -9 500 #
将进程编号为500的程序干掉
killall -9 netscape #
将所有名字为netscape的程序杀死,kill不是万能的,对僵死的程序则无效。
top #
显示系统进程的活动情况,按占CPU资源百分比来分
free #
显示系统内存及swap使用情况
time program #
program程序结束后,将计算出program运行所使用的时间

---------------------------------------------------------------------- 
chroot . #
将根目录切换至当前目录,调试新系统时使用
chroot /tomlinux #
将根目录切换至/tomlinux目录
chroot /tomlinux sbin/init #
将根目录切换至/tomlinux并执行sbin/init
adduser id #
增加一个叫id的用户
userdel id #
增除叫id的用户
userlist #
显示已登陆的用户列表
passwd id #
修改用户id的密码
passwd -d root #
root用户的密码删除
chown id /work #
指定/work目录为id用户所拥有

---------------------------------------------------------------------- 
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 #
设置网卡1的地址192.168.1.1,掩码为255.255.255.0,不写netmask参数则默认为255.255.255.0
ifconfig eth0:1 192.168.1.2 #
捆绑网卡1的第二个地址为192.168.1.2
ifconfig eth0:x 192.168.1.x #
捆绑网卡1的第二个地址为192.168.1.x
ifconfig down eth1 #
关闭第二块网卡,使其停止工作
hostname -F tomlinux.com #
将主机名设置为tomlinux.com
route #
显示当前路由设置情况
route add default gw 192.168.1.1 metric 1 #
设置192.168.1.1为默认的路由
route del default #
将默认的路由删除
dhcp #
启动dhcp服务
dhclient #
启动dhcp终端并自动获取IP地址
ping 163.com #
测试与163.com的连接
ping 202.96.128.68 #
测试与IP 20296.128.68的连接 

---------------------------------------------------------------------- 
probe rtl8139 #
检查驱动程序rtl8139.o是否正常工作
lsmod #
显示已装载的驱动程序
insmod rtl8139.o #
装载驱动程序rtl8139.o
insmod sb.o io=0x280 irq=7 dma=3 dma16=7 mpu_io=330 #
装载驱动程序并设置相关的irq,dma参数
rmmod rtl8139 #
删除名为rtl8139的驱动模块
gpm -k #
停止字符状态下的mouse服务
gpm -t ps2 #
在字符状态下以ps2类型启动mouse的服务

---------------------------------------------------------------------- 
telnet 192.168.1.1 #
登陆IP192.168.1.1telnet服务器
telnet iserver.com #
登陆域名为iserver.comtelnet服务器
ftp 192.168.1.1 
 ftp iserver.com #登陆到ftp服务

 

 

[作者:Tomsoftware骨干之一 Linux天字一号 ]
[
关于版权的声明:本着Linux自由开放的精神,Tomlinux所公开的Tomlinux文档,充许任意转载或出版,但作为对文章作者努力工作的回报,必须保留文章出处 ()及作者,Tomlinux转发文章时也将遵守这一个原则。]

 

L i n u x用户指南
系统管理员指南
U n i x
操作系统由一个内核和一些系统程序组成。系统程序利用内核所提供的工具执行操作系统要求的各种服务程序。系统程序和其他所有的程序一起,以用户模式运行于内核顶部。
L i n u x
内核由几个重要部件组成:进程管理、内存管理、硬件设备驱动程序、文件系统驱
动程序、网络管理和其他零碎的东西.内存管理照管已分配给进程、内核部件和缓冲区的内存区和交换空间。进程管理则创建进程,并通过在处理器上交换活动进程的方式,实施多任务操作。
在最低级上,针对每个自己支持的硬件设备,内核中都包含相应的驱动程序
Unix
系统提供的主要服务
- init :   
    i n i t
是每个U n i x系统中第一个启动的进程,也是内核在启动时所进行的最后一件事情

网络管理员指南

如何在在Linux Unix 系统下编写安全程序?
安全程序是指一个位于安全区域内的程序,要从不具有与该程序相同访问权限的信息源获取输入数据。这样的程序包括用来浏览远端数据的应用程序、CGI 脚本程序、网络服务器和setuid/setgid 程序。
Unix
1969-1970 
年,AT&T 贝尔实验室的Kenneth ThompsonDennis Ritchie 和其
他人开始在一台较老的PDP-7 上开发一个小型的操作系统。不久这个操作系统
被命名为Unix,是对此前一个叫做MULTICS 的操作系统项目的双关语。在
1972-1973 
年,系统被重新用语言改写了,这是一个很有眼光的不寻常的举动:
这个决定使Unix 成为第一个可以脱离其原始硬件而存在的被广泛应用的操作系
统。其它的新方法也不断被加入Unix,一部分原因是贝尔实验室与学术界的良
好协作。1979 年,Unix 第七版V7)发布了,它是所有现存Unix 系统的
鼻祖。
从此,Unix 的历史开始变得错综复杂。由Berkeley 领导的学术界开发了被称为
Berkeley 
软件发行版(BSD)的变种,而AT&T 继续在系统III”和随后的系统
V”
的名义下开发Unix。在八十年代后期到九十年代早期,这两个主要分支间的
战争激化了。经过多年开发,每个变种都采用了其它变种的许多关键特性。在
商业上,系统赢得了标准之战(使其绝大部分接口进入了正式标准),而且
绝大多数硬件厂商都切换到AT&T 的系统V。但是,系统包含了许多BSD 
革新,使该系统更像是两大分支的融合。BSD 分支并未消失,而是广泛应用在
研究、PC 硬件和目的单一的服务器上(例如许多WEB 站点都使用某个BSD 
种)。
最终结果是有很多不同版本的Unix,都来源于原先的第七版。绝大多数版本的
Unix 
都是私有的,由其相应的硬件厂商维护,例如,Sun Solaris 就是系统V
的变种。Unix BSD 分支中有三个版本成为开放源码软件:FreeBSD(注重在
PC 
类硬件上安装简便)、NetBSD(注重于很多不同的CPU 结构)和NetBSD
的一个变种,OpenBSD(注重于安全性)
Linux
1991 
年,Linus Torvalds 开始开发一个他称为“Linux”的操作系统内核[Torvalds
1999]
。这个内核可以同FSF 的资料和其它软件(特别是某些BSD 软件和MIT
X-windows 软件)结合起来构成一个可以自由修改而且非常有用的操作系统。
本文把内核本身称为“Linux 内核,而把该完整的结合体称为“Linux”。注意,很
多人使用术语“GNU/Linux”来称呼该结合体。
Linux 社团中,不同的组织以不同的方式结合可用软件。每一种结合被称为一
发行版,而开发发行版的组织就被称为发行商。普通的发行版包括Red
Hat
MandrakeSuSECalderaCorel Debian。各种发行版间存在差异,
但所有的发行版都基于同一个基础:Linux 内核与GNU glibc 库。由于这两
者都是受“copyleft”类型许可证保护的,对它们的修改一般也必须提供给所有人,
这是BSD 和源于AT&T Unix 系统之间所不存在的统一力量,使不同Linux
发行版统一在同一个基础之上。

。计算机安全目标通常由三个总体目标来描述:
秘密性(也被称为秘密),意味着计算系统的内容只能被授权对象访问。
完整性,意味着内容只能被授权对象以被授权的方式所修改。
可用性,意味着内容可以被授权对象使用。该目标经常提到的反义词就是
拒绝服务。
Saltzer [1974]
Saltzer and Schroeder [1975] 列出了以下依然有效的设计安全
保护系统的原则:
最小特权。每个用户和程序在操作时应当使用尽可能少的特权。该原则限
制了事故、错误或攻击带来的危害。它还减少了特权程序之间潜在的相互
作用,从而使对特权无意的、没必要的或不适当的使用不太可能发生。这
种想法还可以引申到程序内部:只有程序中需要那些特权的最小部分才拥
有特权。
机制经济。保护系统的设计应当尽可能地简单和小。用他们的话来说,
行审阅软件和对硬件进行物理检查一类的技术是实现保护机制所必需的。
这样的技术要想成功,小而简单的设计是必不可少的。
公开设计。保护机制不应该依赖于攻击者的无知。其机制反而应当是公开
的,依赖于象密码或密钥这样比较少的(而且容易改变的)项目的保密。
公开设计使广泛的公开详细检查成为可能,而且还可以让用户确信所要使
用的系统是可以满足需要的。坦白地说,要保持一个广泛应用系统的秘密
是不现实的;反向编译和硬件破解能够很快暴露一个产品的任何秘密
Bruce Schneier 
证明了聪明的设计者应当对任何有关安全的东西都要求
公开源码,以及确保它受到普遍的审核,而且任何找到的问题都已得到
修正[Schneier 1999]
完全中介。每一个访问企图都应该被检查;把认证机制放在不会被推翻的
位置上。例如,在客户--服务器模型中,通常服务器应该进行所有的访问
检查,因为用户可以构建或修改他们自己的客户程序。
安全失败的缺省值(例如,基于许可的方案)。缺省反应应当是拒绝服务,
而且保护系统能随后辨别哪种情况下访问是允许的。
? >
特权分离。理想情况下,访问对象应当依赖于多个条件,这样破坏一个
保护系统并不能进行完全的访问。
最少的公共机制。使共享机制的数量和使用(例如,对/tmp /var/tmp
目录的使用)最小化。共享对象提供了信息流和无意的相互作用的潜在危
险通道。
心理上的接受程度/使用简便。人机界面必须设计得易于使用,这样用户
就可以按惯例自动地正确使用保护机制。如果安全机制非常符合用户对自
己保护目标的想象,错误就很少发生。

进程
在类Unix 系统上,用户级别的活动由运行的进程来实现。绝大多数Unix 系统
支持作为独立概念的线程;一个进程内的线程共享内存,而且系统的调度器实
际上是调度线程。Linux 的做法与此不同(依我看是做得更好):线程与进程没
有本质的差异。在Linux 下,在某个进程创建另一个进程时,它可以选择共享哪
些资源(比如内存可以共享)。随后Linux 内核会进行优化以获得线程级的速度;
参见clone(2)以了解更多信息。值得注意的是Linux 内核的开发者倾向于使用
一词,而不是线程进程,但外界的文档则倾向于使用进程一词
在类Unix 系统中,每个进程所有的典型属性如下:
? RUID, RGID -- 
运行进程的用户的真实用户ID 和组ID
? EUID, EGID -- 
用于权限检查(文件系统除外)的有效用户ID 和组ID
? SUID, SGID -- 
保存的用户ID 和组ID;用来支持下面要讨论的切换许可
开和关。不是所有的类Unix 系统都支持它。
补充群组 -- 用户有成员资格的群组(GID)列表。
? umask -- 
在创建一个新的文件系统对象时决定缺省访问控制设置的一组
比特位;参见umask(2)
? scheduling parameters -- 
每个进程都有一个调度策略,缺省策略为
SCHED_OTHER 
的进程还具有nicepriority counter 的附加属性。
参见sched_setscheduler(2)以了解更多信息。
? limits -- 
每个进程的资源限制(参见下文)。
? filesystem root -- 
进程角度的根文件系统起始处;参见see chroot(2)

 

嵌入式Linux 系统的开发指南

参阅<嵌入式Linux 系统的研究及其在串口通信中的应用>

Linux 系统内核的分析:Linux 系统使用了单一内核结构,即操作系统中所
有的系统相关功能都被封装在内核中。程序通过一套称作系统调用(System Call
的界面访问内核结构。在 Linux 中,可以动态装入和卸载内核中的部分模块。
Linux 
内核由 部分组成:进程管理、内存管理、文件系统管理、进程间通
信和网络接口。

开发环境的建立:

Linux 下建立交叉编译器,在Windows 操作系统中用ADS 开发工具实现启动程序,在Linux 操作系统下,用交叉编译器进行Linux 内核、库函数及应用程序的编译。

嵌入式系统中,Boot Loader 是在操作系统内核或用户应用程序运行之前运
行一段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软
硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准
备好正确的环境。大多数BootLoader 都包含种不同的操作模式:启动加载
BootLoading)模式和下载(DownLoading)模式。

内核的初始化分为以下几个阶段:
1)内核的入口stext
stext 
BootLoader 所调用的内核入口,从stext 进入后,将完成一些针对程
序运行环境的建立。
2)内核的初始化函数start_kernel
start_kernel 
是内核初始化的主体。在调用这个函数的时候,系统已经有了一
个初始化的页目录表和堆栈。
3)内核的初始化线程init
start_kernel 中,通过创建了一个内核进程来执行init 函数,进行初始化。
4)系统的初试化程序

编译内核需要个步骤,分别是创建内核依赖关系、创建内核镜像文件和创
建内核模块。命令依次为:make depmake zImagemake modules
编译完成以后,会生成镜像文件arch/arm/boot/zImage,把这个文件下载到开
发板上,就会看到Linux2.6 的内核启动信息,即完成了Linux2.6 内核移植的第
一步。

使用Linux 自身的配置工具,编译定制内核。根据功能对内核进行剪裁

根文件系统的作用是存放了各种工具、应用程序、init 程序、必需的库和需
要加载的模块。

ARM公司的编译工具RVCT(Realview Compilation Tools)是业界最优化的 ARM编译器。在开发基于ARM Linux的系统时,用户可以使用GNU工具编译Linux内核,而将Linux上层应用代码的编译工作交给RVCT来完成,从而享受到RVCT高效的代码强优化功能。

用户可以在Codesourcery的官方网站()下载到复合ARM ABI标准的Codesourcery GNU工具链。

 

Cygwin一个Linux-like environment for Windows.

Cygwin is a Linux-like environment for Windows. It consists of two parts:

?  A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality.

?  A collection of tools which provide Linux look and feel.

The Cygwin DLL currently works with all recent, commercially released x86 32 bit and 64 bit versions of Windows, with the exception of Windows CE.

Note that the official support for Windows 95, Windows 98, and Windows Me will be discontinued with the next major version (1.7.0) of Cygwin.

What Isn't Cygwin?

?  Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.

?  Cygwin is not a way to magically make native Windows apps aware of UNIX ? functionality, like signals, ptys, etc. Again, you need to build your apps from source if you want to take advantage of Cygwin functionality.


刚开始学习的同学可以先download一个安装上,然后照着usermanual来做一遍,只有70页也不是很难,关键了解一下它的原理。

阅读(1194) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~