當前位置:首頁 » 編程軟體 » mac編譯linux內核

mac編譯linux內核

發布時間: 2022-11-21 20:29:32

㈠ Mac下交叉編譯linux golang程序

一、背景介紹

    閑來無事,申請了台aws伺服器在家搞點小東東,用golang做了個小東東,想放上去。自己的電腦是mac電腦,起初忘記了交叉編譯的事,直接編譯了下直接扔到aws,運行的時候出現了不可以運行的二進制格式提示。

二、交叉編譯的過程

     1、隨手網路了下,很多文章都寫的「CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build」(不知你搜索到的是不是這個結果),看到這也挺簡單,分別是禁用cgo,指定目標系統,指定目標CPU體系架構,然後編譯。

  按照網路出來的建議,嘗試在電腦上編譯了下,提示如下錯誤,如果沒有出現錯誤的可以不用往下看了哈。

2、如第一步所述,是將CGO關閉的狀態,如果程序用到了CGO,是不是就需要將CGO放開?將CGO放開又會是什麼現象?具體如下:

從上述的錯誤信息可以看出來,環境變數是生效的,確實是linux體系架構了。

3、繼續網路,https://blog.csdn.net/zhaoli081223/article/details/121255583 終於發現這篇文章非常不錯,在這里和大家分享下,按照文章的操作就可以解決問題了,而且裡面有非常詳細的講解。

㈡ Mac安裝MXnet出了問題,請問接下來該如何操作

一、獲取內核源碼
二、解壓內核源碼
首先以root帳號登錄,然後進入/usr/src子目錄。如果用戶在安裝Linux時,安裝了內核的源代碼,則會發現一個linux-x.y.z的子目錄。該目錄下存放著內核x.y.z的源代碼。此外,還會發現一個指向該目錄的鏈接linux。刪除該連接,然後將新內核的源文件拷貝到/usr/src目錄中,並解壓:
# tar zxvf Linux-2.3.14.tar.gz
文件釋放成功後,在/usr/src目錄下會生成一個linux子目錄。其中包含了內核2.3.14的全部源代碼。 將/usr/include/asm、/usr/inlude/linux、/usr/include/scsi鏈接到/usr/src/linux/include目錄下的對應目錄中。
# cd /usr/include
# rm -Rf asm linux
# ln -s /usr/src/linux/include/asm-i386 asm
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/scsi scsi
刪除源代碼目錄中殘留的。o文件和其它從屬文件。
# cd /usr/src/linux
# make mrproper
三。增量補丁
有時不需要完全重新安裝,只需打增量補丁,類似升級,在內核源碼樹根目錄運行:
patch-p1< /patch-x.y.z
四。內核源碼樹目錄:
arch:包含和硬體體系結構相關的代碼,每種平台佔一個相應的目錄。和32位PC相關的代碼存放在i386目錄下,其中比較重要的包括kernel(內核核心部分)、mm(內存管理)、math-emu(浮點單元模擬)、lib(硬體相關工具函數)、boot(引導程序)、pci(PCI匯流排)和power(CPU相關狀態)。
block:部分塊設備驅動程序。
crypto:常用加密和散列演算法(如AES、SHA等),還有一些壓縮和CRC校驗演算法。
Documentation:關於內核各部分的通用解釋和注釋。
drivers:設備驅動程序,每個不同的驅動佔用一個子目錄。
fs:各種支持的文件系統,如ext、fat、ntfs等。
include:頭文件。其中,和系統相關的頭文件被放置在linux子目錄下。
init:內核初始化代碼(注意不是系統引導代碼)。
ipc:進程間通信的代碼。
kernel:內核的最核心部分,包括進程調度、定時器等,和平台相關的一部分代碼放在arch/*/kernel目錄下。
lib:庫文件代碼。
mm:內存管理代碼,和平台相關的一部分代碼放在arch/*/mm目錄下。
net:網路相關代碼,實現了各種常見的網路協議。
scripts:用於配置內核文件的腳本文件。
security:主要是一個SELinux的模塊。
sound:常用音頻設備的驅動程序等。
usr:實現了一個cpio。
在i386體系下,系統引導將從arch/i386/kernel/head.s開始執行,並進而轉移到init/main.c中的main()函數初始化內核。
五。配置內核
# cd /usr/src/linux
內核配置方法有三種:
(1)命令行: make config
(2)菜單模式的配置界面: make menuconfig
(3) X window:make xconfig
Linux的內核配置程序提供了一系列配置選項。對於每一個配置選項,用戶可以回答「y」、「m」或「n」。其中「y」表示將相應特性的支持或設備驅動程序編譯進內核;「m」表示將相應特性的支持或設備驅動程序編譯成可載入模塊,在需要時,可由系統或用戶自行加入到內核中去;「n」表示內核不提供相應特性或驅動程序的支持。由於內核的配置選項非常多,本文只介紹一些比較重要的選項。
1、Code maturity level options(代碼成熟度選項)
Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [N/y/?] 如果用戶想要使用還處於測試階段的代碼或驅動,可以選擇「y」。如果想編譯出一個穩定的內核,則要選擇「n」。
2、Processor type and features(處理器類型和特色)
(1)、Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX] 選擇處理器類型,預設為Ppro/6x86MX。
(2)、Maximum Physical Memory (1GB, 2GB) [1GB] 內核支持的最大內存數,預設為1G。
(3)、Math emulation (CONFIG_MATH_EMULATION) [N/y/?] 協處理器模擬,預設為不模擬。
(4)、MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]
選擇該選項,系統將生成/proc/mtrr文件對MTRR進行管理,供X server使用。
(5)、Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] 選擇「y」,內核將支持對稱多處理器。
3、 Loadable mole support(可載入模塊支持)
(1)、Enable loadable mole support (CONFIG_MODULES) [Y/n/?] 選擇「y」,內核將支持載入模塊。
(2)、Kernel mole loader (CONFIG_KMOD) [N/y/?] 選擇「y」,內核將自動載入那些可載入模塊,否則需要用戶手工載入。
4、 General setup(一般設置)
(1)、Networking support (CONFIG_NET) [Y/n/?] 該選項設置是否在內核中提供網路支持。
(2)、PCI support (CONFIG_PCI) [Y/n/?] 該選項設置是否在內核中提供PCI支持。
(3)、PCI access mode (BIOS, Direct, Any) [Any] 該選項設置Linux探測PCI設備的方式。選擇「BIOS」,Linux將使用BIOS;選擇「Direct」,Linux將不通過BIOS;選擇 「Any」,Linux將直接探測PCI設備,如果失敗,再使用BIOS。
(4)Parallel port support (CONFIG_PARPORT) [N/y/m/?] 選擇「y」,內核將支持平行口。
5、 Plug and Play configuration(即插即用設備支持)
(1)、Plug and Play support (CONFIG_PNP) [Y/m/n/?] 選擇「y」,內核將自動配置即插即用設備。
(2)、ISA Plug and Play support (CONFIG_ISAPNP) [Y/m/n/?] 選擇「y」,內核將自動配置基於ISA匯流排的即插即用設備。
6、 Block devices(塊設備)
(1)、Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] 選擇「y」,內核將提供對軟盤的支持。
(2)、Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?] 選擇「y」,內核將提供對增強IDE硬碟、CDROM和磁帶機的支持。
7、 Networking options(網路選項)
(1)、Packet socket (CONFIG_PACKET) [Y/m/n/?] 選擇「y」,一些應用程序將使用Packet協議直接同網路設備通訊,而不通過內核中的其它中介協議。
(2)、Network firewalls (CONFIG_FIREWALL) [N/y/?] 選擇「y」,內核將支持防火牆。
(3)、TCP/IP networking (CONFIG_INET) [Y/n/?] 選擇「y」,內核將支持TCP/IP協議。
(4)The IPX protocol (CONFIG_IPX) [N/y/m/?] 選擇「y」,內核將支持IPX協議。
(5)、Appletalk DDP (CONFIG_ATALK) [N/y/m/?] 選擇「y」,內核將支持Appletalk DDP協議。
8、SCSI support(SCSI支持)
如果用戶要使用SCSI設備,可配置相應選項。
9、Network device support(網路設備支持)
Network device support (CONFIG_NETDEVICES) [Y/n/?] 選擇「y」,內核將提供對網路驅動程序的支持。
10、Ethernet (10 or 100Mbit)(10M或100M乙太網)
在該項設置中,系統提供了許多網卡驅動程序,用戶只要選擇自己的網卡驅動就可以了。此外,用戶還可以根據需要,在內核中加入對FDDI、PPP、SLIP和無線LAN(Wireless LAN)的支持。
11、Character devices(字元設備)
(1)、Virtual terminal (CONFIG_VT) [Y/n/?] 選擇「y」,內核將支持虛擬終端。
(2)、Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]
選擇「y」,內核可將一個虛擬終端用作系統控制台。
(3)、Standard/generic (mb) serial support (CONFIG_SERIAL) [Y/m/n/?]
選擇「y」,內核將支持串列口。
(4)、Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]
選擇「y」,內核可將一個串列口用作系統控制台。
12、Mice(滑鼠)
PS/2 mouse (aka 「auxiliary device」) support (CONFIG_PSMOUSE) [Y/n/?] 如果用戶使用的是PS/2滑鼠,則該選項應該選擇「y」。
13、Filesystems(文件系統)
(1)、Quota support (CONFIG_QUOTA) [N/y/?] 選擇「y」,內核將支持磁碟限額。
(2)、Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] 選擇「y」,內核將提供對automounter的支持,使系統在啟動時自動 mount遠程文件系統。
(3)、DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] 選擇「y」,內核將支持DOS FAT文件系統。
(4)、ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/m/n/?]
選擇「y」,內核將支持ISO 9660 CDROM文件系統。
(5)、NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?]
選擇「y」,用戶就可以以只讀方式訪問NTFS文件系統。
(6)、/proc filesystem support (CONFIG_PROC_FS) [Y/n/?] /proc是存放Linux系統運行狀態的虛擬文件系統,該項必須選擇「y」。
(7)、Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?] EXT2是Linux的標准文件系統,該項也必須選擇「y」。
14、Network File Systems(網路文件系統)
(1)、NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] 選擇「y」,內核將支持NFS文件系統。
(2)、SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS)
選擇「y」,內核將支持SMB文件系統。
(3)、NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS)
選擇「y」,內核將支持NCP文件系統。
15、Partition Types(分區類型)
該選項支持一些不太常用的分區類型,用戶如果需要,在相應的選項上選擇「y」即可。
16、Console drivers(控制台驅動)
VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] 選擇「y」,用戶就可以在標準的VGA顯示方式下使用Linux了。
17、Sound(聲音)
Sound card support (CONFIG_SOUND) [N/y/m/?] 選擇「y」,內核就可提供對音效卡的支持。
18、Kernel hacking(內核監視)
Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] 選擇「y」,用戶就可以對系統進行部分控制。一般情況下選擇「n」。
六、 編譯內核
(一)、建立編譯時所需的從屬文件
# cd /usr/src/linux
# make dep
(二)、清除內核編譯的目標文件
# make clean
(三)、編譯內核
# make zImage
內核編譯成功後,會在/usr/src/linux/arch/i386/boot目錄中生成一個新內核的映像文件zImage。如果編譯的內核很大的話,系統會提示你使用make bzImage命令來編譯。這時,編譯程序就會生成一個名叫bzImage的內核映像文件。
(四)、編譯可載入模塊
如果用戶在配置內核時設置了可載入模塊,則需要對這些模塊進行編譯,以便將來使用insmod命令進行載入。
# make moles
# make modelus_install
編譯成功後,系統會在/lib/moles目錄下生成一個2.3.14子目錄,裡面存放著新內核的所有可載入模塊。
七、 啟動新內核
(一)、將新內核和System.map文件拷貝到/boot目錄下
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.14
# cp /usr/src/linux/System.map /boot/System.map-2.3.14
# cd /boot
# rm -f System.map
# ln -s System.map-2.3.14 System.map
(二)、配置/etc/lilo.conf文件。在該文件中加入下面幾行:
default=linux-2.3.14
image=/boot/vmlinuz-2.3.14
label=linux-2.3.14
root=/dev/hda1
read-only
(三)、使新配置生效
# /sbin/lilo
(四)、重新啟動系統
# /sbin/reboot
新內核如果不能正常啟動,用戶可以在LILO:提示符下啟動舊內核。然後查出故障原因,重新編譯新內核即可。

㈢ mac os下有辦法是用epoll嗎我要編譯一個linux下寫的源碼,發現系統里沒有epoll,有辦法安裝嗎

mac os是unix-like,epoll是再linux 2.6的內核後才出現的,unix下面處理高並發是用的kqueue,跟epoll原理差不多。

㈣ Mac能裝Linux軟體嗎

Linux 和 OS X 默認的都是 Bash Shell。
一般的 bash 腳本兼容,但涉及到具體系統的東西不兼容。比方說,在 OS X 里用 apt-get、yum、zypper就沒反應。
二進制不兼容,需要重新編譯,有的程序需要修改才能編譯成功。

㈤ mac上有必要裝linux嗎

mac本身是基於linux內核的 完全沒必要再安裝linux 而且本身mac就很好用了

㈥ 誰能夠詳細介紹下MAC系統的內核

Mac OS X系統的內核是混合內核,稱之為XNU。 XNU的核心是Mach,BSD層建立在Mach之上。它們都在相同的地址空間中,並且具有與單核相同的高效率。

混合內核:

混合內核希望結合單核和微內核的優勢。核心底層服務(包括調度,進程通信和虛擬內存)包含在核心位置,就像微內核一樣。對於此核心之外的服務,內核狀態與此核心位於相同的內存空間中。

XNU馬赫:

馬赫和BSD有自己的責任分工,所以讓我們說馬赫有這些核心責任。

進程和線程管理:我們通常使用的POSIX線程和NSThread與Mach層線程一一對應。 POSIX線程是線程的BSD層的更高級抽象。

虛擬內存分配和管理。

分配和調度CPU等物理設備。

例外:Mach在現有消息傳遞機制上實現異常處理機制。以下是應用程序級開發人員的詳細介紹。如何做Mach異常捕獲,可以用它來做一些崩潰信息的收集。其他崩潰收集文章可以在這里找到。

如果要執行mach異常捕獲,則需要注冊一個異常埠,該埠對當前任務的所有線程都有效。如果要定位單個線程,可以使用thread_set_exception_ports注冊自己的異常埠。

發生異常時,首先將異常拋出到線程的異常埠,然後嘗試拋出任務的異常埠。當捕獲異常時,可以做一些自己的工作,例如當前的堆棧集合。



(6)mac編譯linux內核擴展閱讀:

HFS +文件系統解析:

除了允許用戶穩定存儲文件的目標之外,文件系統是各種操作系統功能的基礎。 MacOSX的每個主要版本都增加了數百個新功能,其中許多功能嚴重依賴於文件系統實現。 MacOSX 10.3提供FileVault來加密用戶文件,因此用戶的主目錄存儲在HFS +文件系統加密圖像中。

㈦ Mac系統是基於linux的。。為什麼Mac上有非常非常多精美的軟體,而不能移植到Linux.

誰告訴你 mac 是基於 linux 的?你趕緊抽他去!

mac 是基於 apple 自己開發的 darwin 系統。一個 mach 微內核 + BSD 發展而來的 UNIX 基礎系統。上層圖形界面是老喬出走 apple 時開發的 NeXT 用戶界面發展而來。

MAC 系統整個都和 Linux 沒關系,但 MAC 有一個 X11 兼容函數庫,可以直接支持 Linux 的 X11 程序(不能直接運行,但源代碼編譯過來一般是沒問題的)。 MAC 系統對開源源代碼的使用,比 freeBSD,乃至 IBM 的 AIX ,SUN(現在是 Oracle)的 Solaris 要少。

騰訊那幫就是一群 shability 。
另外我再說一遍, linux 也不是基於 UNIX 的,他是 Linus 自己參考 MINIX 重開發的內核,外加 GNU 項目的軟體組成的 GNU/Linux 。而且 Linux 內核不是僅僅只能搭配 GNU 項目的軟體,GNU 項目的軟體也不是之能在 Linux 裡面用。

㈧ linux系統內核數據

正如圖中看到的一樣,存在著兩種WiFi設備,具體是哪一類要看IEEE802.11標準的MLME如何實現。



如果直接通過硬體實現,那麼設備就是硬MAC(fullMAC)設備;如果通過軟體的方式實現,那麼設備就是軟MAC(softMAC)設備。現階段大部分無線設備都是軟體實現的軟MAC設備。


通常我們把Linux內核無線子系統看成兩大塊:cfg80211和mac80211,它們連通內核其他模塊和用戶空間的應用程序。


特別指出,cfg80211在內核空間提供配置管理服務,內核與應用層通過nl80211實現配置管理介面。需要記住的是,


硬MAC設備和軟MAC設備都需要cfg80211才能工作。而mac80211隻是一個驅動API,它只支持軟體實現的軟MAC設備。


接下來,我們主要關注軟MAC設備。


Linux內核無線子系統統一各種WiFi設備,並處理OSI模型中最底層的MAC、PHY兩層。


若進一步劃分,MAC層可以分為MAC高層和MAC底層。前者負責管理MAC層無線網路的探測發現、身份認證、關聯等;


後者實現MAC層如ACK等緊急操作。大部分情況下,硬體(如無線適配器)處理大部分的PHY層以及MAC底層操作。Linux子系統實現大部分的MAC高層回調函數。


2模塊間介面


從圖一中我們可以看出,各個模塊之間分界線很清晰,並且模塊間相互透明不可見。模塊之間一般不會相互影響。


舉個例子,我們在WiFi設備驅動做修改(如,打補丁、添加新的WiFi驅動等),這些變更並不會影響到mac80211模塊,


所以我們根本不用改動mac80211的代碼。再如,昆明北大青鳥http://www.kmbdqn.cn/建議添加一個新的網路協議理論上是不用修改套接字層以及設備無關層代碼。一般情況下,內核通過一系列的函數指針實現各層之間相互透明。


㈨ MAC OS用的是UNIX內核,UNIX的應用又基本能在LINUX上運行,那麼For MAC的應用是不是能在LINUX上直接用

不能,庫文件依賴關系不同。

補充回答: mac os並非完全開源,所以有些專有庫是沒有被移植到linux平台的,編譯軟體時沒有該庫則不能完成安裝。

熱點內容
app什麼情況下找不到伺服器 發布:2025-05-12 15:46:25 瀏覽:714
php跳過if 發布:2025-05-12 15:34:29 瀏覽:467
不定時演算法 發布:2025-05-12 15:30:16 瀏覽:131
c語言延時1ms程序 發布:2025-05-12 15:01:30 瀏覽:166
動物園靈長類動物配置什麼植物 發布:2025-05-12 14:49:59 瀏覽:736
wifi密碼設置什麼好 發布:2025-05-12 14:49:17 瀏覽:148
三位數乘兩位數速演算法 發布:2025-05-12 13:05:48 瀏覽:397
暴風影音緩存在哪裡 發布:2025-05-12 12:42:03 瀏覽:542
access資料庫exe 發布:2025-05-12 12:39:04 瀏覽:630
五開的配置是什麼 發布:2025-05-12 12:36:37 瀏覽:365