① linux操作系統所說的i386 和x86的系統盤有什麼區別
區別:
1、i386是32位微處理器。
2、x86是16位處理器。
3、i386即Intel 80386。其實i386通常被用來作為對Intel(英特爾)32位微處理器的統稱。是英特爾(Intel)公司的一款x86系列CPU。
4、X86是由Intel推出的一種復雜指令集,用於控制晶元的運行的程序。
(1)x86下linux工程師擴展閱讀:
發展歷史:
x86架構於1978年推出的Intel 8086中央處理器中首度出現,它是從Intel 8008處理器中發展而來的。
而8008則是發展自Intel 4004的。8086在三年後為IBM PC所選用,之後x86便成為了個人計算機的標准平台,成為了歷來最成功的CPU架構。。
直到1985年32位的80386的開發,這個架構都維持是16位。接著一系列的處理器表示了32位架構的細微改進,推出了數種的擴充,直到2003年AMD對於這個架構發展了64位的擴充,並命名為AMD64。
後來Intel也推出了與之兼容的處理器,並命名為Intel 64。兩者一般被統稱為x86-64或x64,開創了x86的64位時代。
資料來源:網路-Intel x86
資料來源:網路-i386
② linux系統和安卓X86的區別
1、從底層來講,linux一般是要安裝在pc,pc-server,及部分小型機上的。 那大體來說呢,架構屬於X86-64或者安騰。
而android 一般是安裝在手機跟平板電腦上的。 現在市面上,其CPU型號千變萬化,一個廠家一個架構。 而且手機跟PC的硬體也不同。 必然導致其內核的不同
也就是說,從底層來講,linux與android的內核支持架構有很大區別。 即便同樣是android系統本身,由於不同型號的手機,使用的硬體也不同,
所以使用的內核也就不同,這也是為什麼普遍的, 沒一款手機幾乎都有自己的底包,不能像PC那樣互通。 關鍵是由於現在的手機CPU,硬體架構沒有一個同一的標准。
2、架構上內核之上的則是lib了,也就是模塊。這個兩者沒有太大的差別。 linux的lib也是可以隨便定製的。android也一樣。 但是lib是要依賴底包的。
3、應用的區別,lib之上是各種應用。 這個可以理解為軟體。 這一個層面就沒啥不同之處可講了。 就是一個開發問題了。
總體來說呢,android採用了linux系統的開發思想跟工作原理。 lib這個中間層很多都是照搬linux核心lib重新定製開發的。 所以,說android是一種嵌入式定製的linux系統也是可以的。
③ linux操作系統所說的i386和x86有什麼區別
x86 包含 i386 ,i386 僅僅是 x86 的一部分。
x86 這里的 x 本來就是一個未知數性質的,他可以是 3、4、5、6、7 。
x86 是 Intel 建立起來的 CPU 架構。
他的 8086、8088、80286、80386、80486、Pentium 、Pentium Pro 、Pentium MMX ,Pentium 2 ,還有後面的 P3、P4 、PD 、Core 全系列,Xeon 的 x86 系列。以及 AMD 的 Intel 架構兼容全系列(樓主的 AMD 肯定也是啦,非 x86 架構如果樓主作為桌面計算機用上了,肯定不會來這里問這個問題了)。當然還有最近重新崛起的 VIA 的 C7 系列。
他們都是 x86 架構。
更多的 x86 代表的是 32 位的 Intel CPU 架構體系。
但其中分成很多代。i386 就是 80386 的那代 CPU 的標准,主要是支持 32 位的保護模式和實模式兩種工作環境。這個功能很好很強大,一直沿用至今,而且系統對於這個功能是必須支持的。386 之後的 cpu 是完全兼容 i386 體系的。
i486 加入了新的一個功能,i586 (奔騰 1 代系列)又加入了新功能,i686 (奔騰 Pro 系列以後)又加入了新的功能體系。
i386 的軟體可以運行在 i686 系統,但是 i686 的軟體不能運行在之前的架構上。
舊 CPU 不能運行新軟體主要是不能使用新的特性導致不能運行,但是舊的架構軟體在新的架構上運行,僅僅是不能用新的功能體系,運行效率是沒有減少的。
而且這個功能架構主要是 Linux 內核在使用。
所以樓主不要考慮 i386 和 x86 的關系。只要看到 i 什麼 86 ,基本都能用。
如果有 i686 ,樓主的 CPU 只要不是 K6 系列,而是 Athlon 系列,最好選擇 i686 ,但如果只有 i386 的,樓主注意安裝後看看你的內核是不是 i686 體系的,如果是,性能不受影響。
題外:
i786 是一個隱藏的新體系,聽說只能用在 P4 以後的 Intel CPU 上面。但是很多軟體沒有針對這個架構編寫,所以除非自己基於 i786 編譯,不然網上沒有 i786 的軟體。
這里還要說 x86_64 體系,這個是 AMD 提出並且最先使用的 x86 新的架構體系。他把 32 位的 i686 架構體系,擴展為 64 位。
但是因為變動很大的原因,64 位的系統軟體要兼容 32 位的軟體,需要在內核里打開支持,並且安裝 32 位的兼容庫才行。其實如果你有源代碼,32位系統的源代碼基本上可以直接在 64 位的系統上面編譯成為 64 位架構可運行的軟體(新的技術還是用不上)。
同樣 64 位的 CPU 兼容上一代的 i686 架構,i686 CPU 不支持 x86_64 的軟體。
如果樓主的 AMD CPU 是 Athlon 64 及其以後的 cpu 可以裝 x86_64 的系統玩玩,不過注意,很多 32 位特有的軟體,而且沒有源代碼的要麼不能用,要麼需要 32 位兼容庫,Flash 的瀏覽器插件就是一個例子。64位的 Firefox 需要 32 位兼容庫才能藉助 Flash 插件顯示 Flash 動畫。Adobe 沒有放出 64 位的插件,也沒有提供源代碼。
AMD 總是有新的點子,新的技術,卻總是拼不過 Intel 的緩慢的技術革新。
④ 為什麼x86和arm的架構不同,但是都能裝linux呢,他們的編譯時如何實現的。
rm架構和x86架構區別:
一、性能:
X86結構的電腦無論如何都比ARM結構的系統在性能方面要快得多、強得多。X86的CPU隨便就是1G以上、雙核、四核大行其道,通常使用45nm(甚至更高級)製程的工藝進行生產;
而ARM方面:CPU通常是幾百兆,最近才出現1G左右的CPU,製程通常使用不到65nm製程的工藝,可以說在性能和生產工藝方面ARM根本不是X86結構系統的對手。
但ARM的優勢不在於性能強大而在於效率,ARM採用RISC流水線指令集,在完成綜合性工作方面根本就處於劣勢,而在一些任務相對固定的應用場合其優勢就能發揮得淋漓盡致。
二、擴展能力:
X86結構的電腦採用「橋」的方式與擴展設備(如:硬碟、內存等)進行連接,而且x86結構的電腦出現了近30年,其配套擴展的設備種類多、價格也比較便宜,所以x86結構的電腦能很容易進行性能擴展,如增加內存、硬碟等。
ARM結構的電腦是通過專用的數據介面使CPU與數據存儲設備進行連接,所以ARM的存儲、內存等性能擴展難以進行(一般在產品設計時已經定好其內存及數據存儲的容量),所以採用ARM結構的系統,一般不考慮擴展。基本奉行「夠用就好」的原則。
三實現編譯:
因為linux是系統,他支持現在大多數的結構體系。而要使他移植到相應的不同的硬體平台上時,需要對內核源碼進行相對應的交叉編譯處理,然後才能進行燒寫運行,因為都有驅動只要那個系統有對應平台的驅動就可以。
(4)x86下linux工程師擴展閱讀:
Linux常用命令
1、pwd命令該命令的英文解釋為print working directory(列印工作目錄)。
2、輸入pwd命令,Linux會輸出當前目錄。
3、cd命令cd命令用來改變所在目錄。
4、cd / 轉到根目錄中
5、cd ~ 轉到/home/user用戶目錄下
6、cd /usr 轉到根目錄下的usr目錄中-------------絕對路徑
7、cd test 轉到當前目錄下的test子目錄中-------相對路徑
8、cat命令可以用來合並文件,也可以用來在屏幕上顯示整個文件的內容。
9、cat snow.txt 該命令顯示文件snow.txt的內容,ctrl+D退出cat。
⑤ x86電腦能裝linux系統么
可以,咱們的配置差不多,我就玩過但是不很習慣,
http://download.chinaunix.net/
這里去下載Linux去,只有你不會用的,全!!
ubuntu、 紅旗和小紅帽都用過,不熟,呵呵……
⑥ intel x86+linux是屬於嵌入式的嗎
嵌入式是看用途,而不是看硬體。
不過……
x86 耗電量很大……在某些便攜設備上本來就電量不足,x86 就施展不開了。
建議樓主看看 power + 嵌入式,交換機經常用這種 CPU ,其次還有國產的龍芯,MIPS 的。
相對來說,我覺得數碼產品類更有前途,因為他的需求量要比交換機等專用設備大,市場大品種多,相對前途更廣。不過交換機相對更容易賺錢。專用設備的利潤更大,而且競爭不如數碼產品厲害。
⑦ 嵌入式linux和普通x86上的linux支持的軟體區別
嵌入式是指超輕型的系統。
一般嵌入式所用的 CPU 多為 arm 架構的 CPU 。這個架構是特殊設計的,與 X86 不兼容。所以兩個系統的二進製程序不同用。
對於 Linux 來說,他們的源代碼大部分是通用的(除了那些針對某種 CPU 或者設備進行特殊演算法優化的,或者沒有避讓某些架構對於源代碼編寫的特殊要求的)。基本只要他們需要的軟體庫能提供,需要的其他軟體能提供,就可以在任何 Linux 支持的設備上面運行。
但嵌入式又有一個問題,他是超輕型的,所以他不可能像 x86 計算機那樣裝一套 1DVD 的 Linux (完全安裝一個 DVD 的 Linux ,一般實際需要 8G 左右的硬碟空間)。嵌入式一般體積不超 128M,甚至只有 4M 空間可用 ,一般都在 32M-64M 之間的容量。這樣對於軟體來說,不可能完全提供足夠的軟體功能庫或者軟體。
結果就是,他們的軟體「理論上」「源代碼級別」的通用,但卻又有實際限制。
當然對於嵌入式高手或者超級財主來說,這些都不是問題。
主要還是看具體的限制了。
⑧ linux x86下的程序移植到arm板子上需要做哪些
需要交叉編譯後,將編譯出的文件放到板子上執行。
交叉編譯器arm-linux-gcc或者arm-linux-g++,過程比較復雜,一時是說不清楚的。
建議多看些資料,了解一下原理
⑨ NVIDIA-Linux-x86-260.19.44 能不能對Linux支持雙顯卡切換
不支持 nvidIA 還沒出這個 版本的雙顯卡 驅動程序 直接用獨顯好了
⑩ x86架構下linux驅動編程 看什麼書
編寫好驅動,通過掛載的方法將驅動程序掛載到內核裡面,大致步驟如下:
一: 1>建立以.c為後綴的c語言程序文件(裡麵包含了設備名及設備號等)
2>建立Makefile文件(作用是通過make來產生設備文件*.ko文件,裡面可以建立自己的平台所需的設備文件如:arm等).make產生相應的設備文件
二: 要在/dev下建立相應的設備結點(設備名),用insomd *.ko命令將相應的驅動設備文件掛載到內核中.
三:編寫測試文件(.c文件)用來測試內核是否已近成功掛載到內核.(編寫好相應的測試文件後,用gcc –o Filename Filename.c(測試文件名)來產生相應的可執行文件).
四:如果設備驅動掛載成功,當執行測試文件(./Filename)時會產生相應的結果.
五:可能用到的相關命令:
1.lsmod:列出內核已經載入模塊的專題.
輸出:
Mole(模塊名)size(大小)used by (被..使用)
2.demop:分析可載入模塊的依賴性,生成moles.dep文件和映射文件
3.uname –r 顯示內核版本(在編寫Makefile時使用到)
4.modprobe : linux內核添加和刪除模塊(相關參數請查看man幫助文檔)
5.modinfo:顯示內核模塊的信息.
6.insmod: 向linux內核中載入一個模塊,用法:insmod[filename] [mole options…]
7.rmmod: 刪除內核中的模塊, 用法: rmmod [-f,w,s,v][molename]
8.dmesg: 顯示內核緩沖區,內核的各種信息,內核啟動時的信息會寫入到/var/log/下.
六.例子1:
第一步:增加頭文件和宏定義
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/cdev.h>
#include <linux/uaccess.h>
#include <linux/mole>
#include <linux/kernel>
第二步:添加與字元設備定義及注冊有關的數據成員
//定義設備名稱
#define DEVICE_NAME "test" //設備名
#define BUF_SIZE 1024
static char tmpbuf[BUF_SIZE];
//定義主次設備號
static unsigned int TestMajor=0; //主
static unsigned int TestMinor=0; //次
static struct cdev *test_cdev;
static dev_t dev;
第三步:增加open/release函數
static int test_chardev_open(struct inode *inode,struct file *file)
{
printk("open major=%d, minor=%d\n", imajor(inode),
iminor(inode));
return 0;
}
static int test_chardev_release(struct inode *inode,struct file *file)
{
printk("close major=%d,minor=%d\n",imajor(inode),
iminor(inode));
return 0;
}
第四步:增加read函數
static ssize_t test_chardev_read(struct file *file,char __user *buf,
size_t const count,loff_t *offset)
{
if(count < BUF_SIZE)
{
if(_to_user(buf,tmpbuf,count))
{
printk(" to user fail \n");
return -EFAULT;
}
}else{
printk("read size must be less than %d\n", BUF_SIZE);
return -EINVAL;
}
*offset += count;
return count;
}
第五步:增加write函數
static ssize_t test_chardev_write(struct file *file, const char __user*buf,size_t const count,loff_t *offset)
{
if(count < BUF_SIZE)
{
if(_from_user(tmpbuf,buf,count))
{
printk(" from user fail \n");
return -EFAULT;
}
}else{
printk("size must be less than %d\n", BUF_SIZE);
return -EINVAL;
}
*offset += count;
return count;
}
第六步:添加增加file_operations成員
static struct file_operations chardev_fops={
.owner = THIS_MODULE,
.read = test_chardev_read,
.write = test_chardev_write,
.open = test_chardev_open,
.release = test_chardev_release,
};
第七步:在模塊的入口添加設備的設備號獲取及設備注冊
static int __init chrdev_init(void)
{
int result;
if(TestMajor)
{
dev=MKDEV(TestMajor,TestMinor);//創建設備編號
result=register_chrdev_region(dev,1,DEVICE_NAME);
} else {
result=alloc_chrdev_region(&dev,TestMinor,1,DEVICE_NAME);
TestMajor=MAJOR(dev);
}
if(result<0)
{
printk(KERN_WARNING"LED: cannot get major %d \n",TestMajor);
return result;
}
test_cdev=cdev_alloc();
cdev_init(test_cdev,&chardev_fops);
//test_cdev->ops=&chardev_fops;
test_cdev->owner=THIS_MODULE;
result=cdev_add(test_cdev,dev,1);
if(result)
printk("<1>Error %d while register led device!\n",result);
return 0;
}
第八步:在模塊的出口函數增加設備設備號釋放及設備注銷函數
unregister_chrdev_region(MKDEV(TestMajor,TestMinor),1);
cdev_del(test_cdev);
第九步:編譯並載入該模塊
第十步:根據設備號的設置,在文件系統中建立對應的設備節點
#mknod /dev/test c XXX XX
例子2:
驅動文件:
#include <linux/init.h>
#include <linux/mole.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/kernel.h>
#include <linux/uaccess.h>
#define DEVICENAME "ccccc"
unsigned int major=221;
unsigned int minor=0;
struct cdev *abc;
dev_t dev;
static char bufrh[1024]="read success!";
static int aaaaa_open(struct inode *inodep, struct file *filep)
{
printk("read success!\n");
return 0;
}
int aaaaa_release(struct inode *inodep, struct file *filep)
{
return 0;
}
static ssize_t aaaaa_read (struct file *filep, char __user *buf, size_tcount, loff_t *offset)
{
if(_to_user(buf, bufrh, 1))
{
printk("_to_user fail!\n");
}
return 0;
}
ssize_t aaaaa_write (struct file *filep, const char __user *buf,size_t count, loff_t *offse)
{
printk("write!\n");
return 0;
}
static const struct file_operations fops = {
.owner = THIS_MODULE,
.open = aaaaa_open,
.release = aaaaa_release,
.read = aaaaa_read,
.write = aaaaa_write,
};
static int __init aaaaa_init(void)
{
int a;
dev=MKDEV(major, minor);
a=register_chrdev_region(dev, 1, DEVICENAME);
abc=cdev_alloc();
abc->owner=THIS_MODULE;
cdev_init(abc, &fops);
cdev_add(abc, dev, 1);
return 0;
}
static void __exit aaaaa_cleanup(void)
{
cdev_del(abc);
unregister_chrdev_region(dev, 1);
}
mole_init(aaaaa_init);
mole_exit(aaaaa_cleanup);
MODULE_LICENSE("GPL ");
Makefile文件:
obj-m += firstqd.o(相應設備文件名)
KERDIR = /usr/src/linux-headers-2.6.32-24-generic
#KERDIR=/home/linux2.6/linux #arm騫沖彴
PWD=$(shell pwd)
moles:
$(MAKE) -C $(KERDIR) M=$(PWD)moles
pc:
gcc -o fristqd firstqd.c
arm:
arm-linux-gcc -o fristqd firstqd.c
clean:
rm -rf *.o *~core *.depend *.cmd *.ko *.mod.c *.tmp_versions
測試文件(test.c):
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
char buf[1024];
char bufw[1024]="write success";
int main()
{
int fd,m,n;
fd=open("/dev/aaa",O_RDWR);
if (fd)
{
m=read(fd,buf,100);
printf("read kernel:%s\n",buf);
n=write(fd,bufw,10);
}
//printf("ni hao");
return 0;
}