Linux裝置驅動--LCD平臺裝置與驅動(tiny4412)
1 環境與簡介
Host:Ubuntu14.04(64bit)
Target:Tiny4412
Kernel:linux-3.5.0
2 平臺裝置
2.1 宣告
extern struct platform_device s5p_device_fimd0;
標頭檔案:arch/arm/plat-samsung/include/plat/devs.h
對比分析:與《Linux裝置驅動--LCD平臺裝置與驅動(smdk2440)》不同的是,這裡不是通過EXPORT_SYMBOL(s5p_device_fimd0)使其在別的原始檔可見,而是在標頭檔案中宣告該變數。
2.2 定義
先定義一個通用版的s5p_device_fimd0
struct platform_device s5p_device_fimd0 = { .name = "s5p-fb", .id = 0, .num_resources = ARRAY_SIZE(s5p_fimd0_resource), .resource = s5p_fimd0_resource, .dev = { .dma_mask = &samsung_device_dma_mask, .coherent_dma_mask = DMA_BIT_MASK(32), }, };
原始檔:arch/arm/plat-samsung/devs.c
對比分析:與《Linux裝置驅動--LCD平臺裝置與驅動(smdk2440)》和《Linux裝置驅動--LCD平臺裝置與驅動(smdk6410)》不同的是,這裡平臺裝置並不命名為xxx_device_lcd或者xxx_device_fb,而是命名為xxx_device_fimd。前面兩個都命名都容易讓人想到是與顯示相關的,但是後面的命名卻讓不熟悉的人感到困惑。其實,fimd是fully Interactive mobile display的縮寫,意為完全互動式移動顯示裝置[2]。知道這層之後,就不會對xxx_device_fimd感到困惑了。
2.3 引用
定義一個平臺裝置陣列smdk4x12_devices,該陣列包含了Tiny4412開發板的所有平臺裝置,其中當然包括上述s5p_device_fimd0,如下第35行所示:
static struct platform_device *smdk4x12_devices[] __initdata = {
#ifdef CONFIG_EXYNOS4_DEV_DWMCI
&exynos_device_dwmci,
#endif
&s3c_device_hsmmc2,
&s3c_device_hsmmc3,
&wm8994_fixed_voltage0,
&wm8994_fixed_voltage1,
&wm8994_fixed_voltage2,
&s3c_device_i2c0,
&s3c_device_i2c1,
&s3c_device_i2c2,
&s3c_device_i2c3,
#ifdef CONFIG_VIDEO_M5MOLS
&s3c_device_i2c4,
#endif
&s3c_device_i2c7,
&s3c_device_adc,
&s3c_device_rtc,
&s3c_device_wdt,
#ifdef CONFIG_TINY4412_BUZZER
&s3c_device_timer[0],
#endif
#ifdef CONFIG_VIDEO_EXYNOS_FIMC_LITE
&exynos_device_flite0,
&exynos_device_flite1,
#endif
&s5p_device_mipi_csis0,
&s5p_device_mipi_csis1,
&s5p_device_fimc0,
&s5p_device_fimc1,
&s5p_device_fimc2,
&s5p_device_fimc3,
&s5p_device_fimc_md,
&s5p_device_fimd0,
&mali_gpu_device,
&s5p_device_mfc,
&s5p_device_mfc_l,
&s5p_device_mfc_r,
&s5p_device_jpeg,
#ifdef CONFIG_SAMSUNG_DEV_KEYPAD
&samsung_device_keypad,
#endif
&tiny4412_device_1wire,
&tiny4412_device_adc,
#ifdef CONFIG_INPUT_GPIO
&tiny4412_input_device,
#endif
#ifdef CONFIG_IR_GPIO_CIR
&tiny4412_device_gpiorc,
#endif
#ifdef CONFIG_VIDEO_EXYNOS_FIMC_IS
&exynos4_device_fimc_is,
#endif
#ifdef CONFIG_LCD_LMS501KF03
&s3c_device_spi_gpio,
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI0
&s3c64xx_device_spi0,
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI1
&s3c64xx_device_spi1,
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI2
&s3c64xx_device_spi2,
#endif
#ifdef CONFIG_ION_EXYNOS
&exynos_device_ion,
#endif
&s5p_device_i2c_hdmiphy,
&s5p_device_hdmi,
&s5p_device_mixer,
&exynos4_bus_devfreq,
&samsung_asoc_dma,
&samsung_asoc_idma,
#ifdef CONFIG_SND_SAMSUNG_I2S
&exynos4_device_i2s0,
#endif
#ifdef CONFIG_SND_SAMSUNG_PCM
&exynos4_device_pcm0,
#endif
#ifdef CONFIG_SND_SAMSUNG_SPDIF
&exynos4_device_spdif,
#endif
&tiny4412_audio,
#ifdef CONFIG_VIDEO_EXYNOS_FIMG2D
&s5p_device_fimg2d,
#endif
#ifdef CONFIG_EXYNOS_THERMAL
&exynos_device_tmu,
#endif
&s5p_device_ehci,
&exynos4_device_ohci,
&s5p_device_usbswitch,
#if defined CONFIG_SND_SAMSUNG_ALP
&exynos_device_srp,
#endif
#ifdef CONFIG_BUSFREQ_OPP
&exynos4_busfreq,
#endif
#ifdef CONFIG_BATTERY_SAMSUNG
&samsung_device_battery,
#endif
};
原始檔:arch/arm/mach-exynos/mach-tiny4412.c
2.4 註冊
(1)註冊函式
在smdk4x12_machine_init()函式中呼叫platform_add_devices()函式將上述smdk4x12_devices註冊到系統,即可完成平臺裝置的註冊,如下第121行所示:
static void __init smdk4x12_machine_init(void)
{
#ifdef CONFIG_TOUCHSCREEN_FT5X0X
struct s3cfb_lcd *lcd = tiny4412_get_lcd();
ft5x0x_pdata.screen_max_x = lcd->width;
ft5x0x_pdata.screen_max_y = lcd->height;
#endif
exynos_bootdev_init();
tiny4412_hwrev_init();
#ifdef CONFIG_S3C64XX_DEV_SPI0
spi_register_board_info(spi0_board_info, ARRAY_SIZE(spi0_board_info));
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI1
spi_register_board_info(spi1_board_info, ARRAY_SIZE(spi1_board_info));
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI2
spi_register_board_info(spi2_board_info, ARRAY_SIZE(spi2_board_info));
#endif
if (samsung_pack() != EXYNOS4412_PACK_SCP) {
#ifdef CONFIG_REGULATOR_MAX77686
max77686_populate_pdata();
#endif
}
s3c_adc_set_platdata(NULL);
s3c_adc_setname("samsung-adc-v4");
s3c_i2c0_set_platdata(&tiny4412_i2c0_data);
i2c_register_board_info(0, smdk4x12_i2c_devs0,
ARRAY_SIZE(smdk4x12_i2c_devs0));
s3c_i2c1_set_platdata(&tiny4412_i2c1_data);
i2c_register_board_info(1, smdk4x12_i2c_devs1,
ARRAY_SIZE(smdk4x12_i2c_devs1));
s3c_i2c2_set_platdata(NULL);
i2c_register_board_info(2, smdk4x12_i2c_devs2,
ARRAY_SIZE(smdk4x12_i2c_devs2));
s3c_i2c3_set_platdata(&tiny4412_i2c3_data);
i2c_register_board_info(3, smdk4x12_i2c_devs3,
ARRAY_SIZE(smdk4x12_i2c_devs3));
s3c_i2c4_set_platdata(NULL);
smdk4x12_rtc_wake_init();
smdk4x12_pmu_wdt_init();
smdk4x12_touch_init();
if (is_board_rev_B()) {
#ifdef CONFIG_INPUT_GPIO
tiny4412_key_info_fixup();
#endif
} else {
tiny4412_wifi_init();
}
s3c_i2c7_set_platdata(&tiny4412_i2c7_data);
i2c_register_board_info(7, smdk4x12_i2c_devs7,
ARRAY_SIZE(smdk4x12_i2c_devs7));
s3c_hsotg_set_platdata(&smdk4x12_hsotg_pdata);
#ifdef CONFIG_USB_EXYNOS_SWITCH
smdk4x12_usbswitch_init();
#endif
samsung_bl_set(&smdk4x12_bl_gpio_info, &smdk4x12_bl_data);
tiny4412_fb_init_pdata(&smdk4x12_lcd0_pdata);
s5p_fimd0_set_platdata(&smdk4x12_lcd0_pdata);
#ifdef CONFIG_LCD_LMS501KF03
spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
#endif
#ifdef CONFIG_SAMSUNG_DEV_KEYPAD
samsung_keypad_set_platdata(&smdk4x12_keypad_data);
#endif
#ifdef CONFIG_EXYNOS4_DEV_DWMCI
exynos_dwmci_set_platdata(&exynos_dwmci_pdata);
#endif
s3c_sdhci2_set_platdata(&smdk4x12_hsmmc2_pdata);
s3c_sdhci3_set_platdata(&smdk4x12_hsmmc3_pdata);
#ifdef CONFIG_ION_EXYNOS
exynos_ion_set_platdata();
#endif
s5p_tv_setup();
s5p_i2c_hdmiphy_set_platdata(NULL);
s5p_hdmi_set_platdata(smdk4x12_i2c_hdmiphy, NULL, 0);
#ifdef CONFIG_VIDEO_EXYNOS_FIMG2D
s5p_fimg2d_set_platdata(&fimg2d_data);
#endif
#if defined(CONFIG_VIDEO_M5MOLS) || defined(CONFIG_VIDEO_S5K6A3)
smdk4x12_camera_init();
#endif
#ifdef CONFIG_VIDEO_EXYNOS_FIMC_LITE
smdk4x12_set_camera_flite_platdata();
s3c_set_platdata(&exynos_flite0_default_data,
sizeof(exynos_flite0_default_data), &exynos_device_flite0);
s3c_set_platdata(&exynos_flite1_default_data,
sizeof(exynos_flite1_default_data), &exynos_device_flite1);
#endif
smdk4x12_ehci_init();
#ifdef CONFIG_S3C64XX_DEV_SPI0
s3c64xx_spi0_set_platdata(NULL, 0, 1);
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI1
s3c64xx_spi1_set_platdata(NULL, 0, 1);
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI2
s3c64xx_spi2_set_platdata(NULL, 0, 1);
#endif
smdk4x12_ohci_init();
platform_add_devices(smdk4x12_devices, ARRAY_SIZE(smdk4x12_devices));
if (!uhost0)
platform_device_register(&s3c_device_usb_hsotg);
#ifdef CONFIG_VIDEO_EXYNOS_FIMC_IS
exynos4_fimc_is_set_platdata(NULL);
#endif
if (soc_is_exynos4412()) {
if ((samsung_rev() >= EXYNOS4412_REV_2_0))
initialize_prime_clocks();
else
initialize_non_prime_clocks();
#ifdef CONFIG_S3C64XX_DEV_SPI0
exynos4_setup_clock(&s3c64xx_device_spi0.dev, "mdout_spi",
"mout_mpll_user", 50 * MHZ);
#endif
}
#ifdef CONFIG_BUSFREQ_OPP
dev_add(&busfreq, &exynos4_busfreq.dev);
ppmu_init(&exynos_ppmu[PPMU_DMC0], &exynos4_busfreq.dev);
ppmu_init(&exynos_ppmu[PPMU_DMC1], &exynos4_busfreq.dev);
ppmu_init(&exynos_ppmu[PPMU_CPU], &exynos4_busfreq.dev);
#endif
set_tmu_platdata();
}
原始檔:arch/arm/mach-exynos/mach-tiny4412.c
(2)註冊時機
上述smdk4x12_machine_init()函式是何時被呼叫的呢?答案是在核心初始化裝置的時候,如下第9行所示:
MACHINE_START(TINY4412, "TINY4412")
/* Maintainer: FriendlyARM (www.arm9.net) */
/* Maintainer: Kukjin Kim <[email protected]> */
/* Maintainer: Changhwan Youn <[email protected]> */
.atag_offset = 0x100,
.init_irq = exynos4_init_irq,
.map_io = smdk4x12_map_io,
.handle_irq = gic_handle_irq,
.init_machine = smdk4x12_machine_init,
.init_late = exynos_init_late,
.timer = &exynos4_timer,
.restart = exynos4_restart,
.reserve = &smdk4x12_reserve,
MACHINE_END
原始檔:arch/arm/mach-exynos/mach-tiny4412.c
3 平臺驅動
3.1 宣告
extern struct platform_driver fimd_driver;
標頭檔案:drivers/gpu/drm/exynos/exynos_drm_drv.h3.2 定義
struct platform_driver fimd_driver = {
.probe = fimd_probe,
.remove = __devexit_p(fimd_remove),
.driver = {
.name = "exynos4-fb",
.owner = THIS_MODULE,
.pm = &fimd_pm_ops,
},
};
原始檔:drivers/gpu/drm/exynos/exynos_drm_fimd.c3.3 註冊
在exynos_drm_init()函式中呼叫platform_driver_register()將上述fimd_driver註冊到系統中,例如下面第8行所示。
static int __init exynos_drm_init(void)
{
int ret;
DRM_DEBUG_DRIVER("%s\n", __FILE__);
#ifdef CONFIG_DRM_EXYNOS_FIMD
ret = platform_driver_register(&fimd_driver);
if (ret < 0)
goto out_fimd;
#endif
#ifdef CONFIG_DRM_EXYNOS_HDMI
ret = platform_driver_register(&hdmi_driver);
if (ret < 0)
goto out_hdmi;
ret = platform_driver_register(&mixer_driver);
if (ret < 0)
goto out_mixer;
ret = platform_driver_register(&exynos_drm_common_hdmi_driver);
if (ret < 0)
goto out_common_hdmi;
#endif
#ifdef CONFIG_DRM_EXYNOS_VIDI
ret = platform_driver_register(&vidi_driver);
if (ret < 0)
goto out_vidi;
#endif
#ifdef CONFIG_DRM_EXYNOS_G2D
ret = platform_driver_register(&g2d_driver);
if (ret < 0)
goto out_g2d;
#endif
ret = platform_driver_register(&exynos_drm_platform_driver);
if (ret < 0)
goto out;
return 0;
out:
#ifdef CONFIG_DRM_EXYNOS_G2D
platform_driver_unregister(&g2d_driver);
out_g2d:
#endif
#ifdef CONFIG_DRM_EXYNOS_VIDI
out_vidi:
platform_driver_unregister(&vidi_driver);
#endif
#ifdef CONFIG_DRM_EXYNOS_HDMI
platform_driver_unregister(&exynos_drm_common_hdmi_driver);
out_common_hdmi:
platform_driver_unregister(&mixer_driver);
out_mixer:
platform_driver_unregister(&hdmi_driver);
out_hdmi:
#endif
#ifdef CONFIG_DRM_EXYNOS_FIMD
platform_driver_unregister(&fimd_driver);
out_fimd:
#endif
return ret;
}
原始檔:drivers/gpu/drm/exynos/exynos_drm_drv.c
4 裝置與驅動匹配
平臺裝置和驅動必須同名才能匹配,然而上述平臺裝置的name為s5p-fb,而平臺驅動的name為exynos4-fb,根本就不一致!這是不是搞錯了呢?答案是否定的,這其實是一個用於支援多種顯示裝置的技巧:在特定的函式中對上述裝置名進行更改,使其和驅動名匹配。下面分析該過程。
4.1 更改裝置名字
(1)exynos4_map_io()
該函式呼叫s5p_fb_setname()函式將上述s5p_device_fimd0的名字由原來的s5p-fb改為exynos4-fb,見38行。
static void __init exynos4_map_io(void)
{
iotable_init(exynos4_iodesc, ARRAY_SIZE(exynos4_iodesc));
if (soc_is_exynos4210() && samsung_rev() == EXYNOS4210_REV_0)
iotable_init(exynos4_iodesc0, ARRAY_SIZE(exynos4_iodesc0));
else
iotable_init(exynos4_iodesc1, ARRAY_SIZE(exynos4_iodesc1));
if (soc_is_exynos4412())
iotable_init(exynos4412_iodesc, ARRAY_SIZE(exynos4412_iodesc));
else
iotable_init(exynos4xxx_iodesc, ARRAY_SIZE(exynos4xxx_iodesc));
/* initialize device information early */
exynos4_default_sdhci0();
exynos4_default_sdhci1();
exynos4_default_sdhci2();
exynos4_default_sdhci3();
s3c_adc_setname("samsung-adc-v3");
s3c_fimc_setname(0, "exynos4-fimc");
s3c_fimc_setname(1, "exynos4-fimc");
s3c_fimc_setname(2, "exynos4-fimc");
s3c_fimc_setname(3, "exynos4-fimc");
s3c_sdhci_setname(0, "exynos4-sdhci");
s3c_sdhci_setname(1, "exynos4-sdhci");
s3c_sdhci_setname(2, "exynos4-sdhci");
s3c_sdhci_setname(3, "exynos4-sdhci");
/* The I2C bus controllers are directly compatible with s3c2440 */
s3c_i2c0_setname("s3c2440-i2c");
s3c_i2c1_setname("s3c2440-i2c");
s3c_i2c2_setname("s3c2440-i2c");
s5p_fb_setname(0, "exynos4-fb");
s5p_hdmi_setname("exynos4-hdmi");
}
原始檔:arch/arm/mach-exynos/common.c
(2)s5p_fb_setname()
該函式主要就是用於給s5p_device_fimd0這個全域性變數改名,詳見下面第5行:
static inline void s5p_fb_setname(int id, char *name)
{
switch (id) {
#ifdef CONFIG_S5P_DEV_FIMD0
case 0:
s5p_device_fimd0.name = name;
break;
#endif
default:
printk(KERN_ERR "%s: invalid device id(%d)\n", __func__, id);
break;
}
}
原始檔:arch/arm/plat-samsung/include/plat/fb-core.h
4.2 匹配過程
5 總結
參考資料
相關推薦
Linux裝置驅動--LCD平臺裝置與驅動(tiny4412)
1 環境與簡介 Host:Ubuntu14.04(64bit) Target:Tiny4412 Kernel:linux-3.5.0 2 平臺裝置 2.1 宣告 extern struct platform_device s5p_device_fim
Linux裝置驅動--LCD平臺裝置與驅動(smdk2440)
1 環境與簡介 Host:Ubuntu14.04(64bit) Target:smdk2440 Kernel:linux-2.6.39.4 類似於《Linux裝置驅動--WDT平臺裝置與驅動》,本文再以LCD為例進行說明。本文的原始碼均來自L
Linux裝置驅動--LCD平臺裝置與驅動(s3c64xx)
1 開發環境 Host:Ubuntu14.04 Target:s3c64xx Kernel:linux-3.18.2 2 平臺裝置 關於裝置樹是如果被載入並解析成裝置節點的,詳見參考資料[1],本文重點分析如何利用裝置節點建立相
Linux裝置驅動--LCD平臺裝置與驅動(smdk6410)
1 環境與簡介 Host:Ubuntu14.04(64bit) Target:smdk6410 Kernel:linux-3.5.0 在《Linux裝置驅動--LCD平臺裝置與驅動(smdk2440)》中基於linux-2.6.39.4對LC
軟體測試中樁模組與驅動模組的概念與區別(轉載),打樁
樁模組和驅動模組(以C語言為例): 很多人對樁模組和驅動模組的概念會搞不清楚,那麼下面來介紹這兩個概念: 模組結構例項圖: 假設現在專案組把任務分給了7個人,每個人負責實現一個模組。你負責的是B模組,你很優秀,第一個完成了編碼工作,現在需要開展單元測試工作,先分析結構圖: 1、由於
linux應用之vim的安裝與配置(centos)
utf8 power scroll pbo gb2312 nco pla red vma 1.vim的安裝 #yum search vim //查看vim相關軟件信息 #yum install -y vim* //在線安裝vim 2.vim的配置 (1)~/.vimi
Linux下NFS伺服器的搭建與配置(轉)
一、NFS服務簡介 NFS 就是 Network FileSystem 的縮寫,最早之前是由sun 這家公司所發展出來的。 它最大的功能就是可以透過網路,讓不同的機器、不同的作業系統、可以彼此分享個別的檔案 (share files)。所以,你也可以簡單的將他看做是一個檔案伺服器 (file server
Linux中的Redis的下載與安裝(附圖)
一,Redis下載 1,下載地址:http://redis.io/download 2,進入Redis官網首頁下載最新版進行. 二,安裝redis (在root許可權下操
雲平臺程式設計與開發(一):Java雲平臺服務商一覽
因為Java語言的跨平臺性和高度靈活性,成為目前雲端計算平臺的主流開發語言;所以,這裡重點討論一下Java 雲平臺的比較情況。尤其是討論X5Cloud雲平臺與現有幾個Java雲平臺的聯絡和區別: * App Engine (http://code.google.com/appengine/)
【linux】驅動-7-平臺裝置驅動
[toc] --- ## 前言 區分**裝置驅動模型**和**平臺裝置驅動模型**。 **裝置驅動模型** 可以理解為 **匯流排、裝置、驅動**。 **平臺裝置驅動模型** 就是那些 Linux 核心管理沒有物理匯流排(*即是不需要特殊時序控制的裝置*)(*也是Linux核心沒有自動建立相應驅動匯流
《Linux總線、設備與驅動》USB設備發現機制
buffer 嵌入 void smo b- 嵌入式系統 root 顯示 ice 說明:本分析基於mstar801平臺Linux2.6.35.11內核,其他內核版本僅供參考。 一、程序在內核中的位置 1.usb host做為pci總線下的一個設備存在(嵌入式系統中有可能也會
Linux驅動之平臺設備驅動模型簡析(驅動分離分層概念的建立)
技術 描述 rst 操作 mem iou 系統 簡單 reg Linux設備模型的目的:為內核建立一個統一的設備模型,從而有一個對系統結構的一般性抽象描述。換句話說,Linux設備模型提取了設備操作的共同屬性,進行抽象,並將這部分共同的屬性在內核中實現,而為需要新添加設備
Linux驅動學習筆記----------IIC框架與流程(一)
歷時一個月期末課程設計終於結束了!發現好多東西忘記了,iic流程也有些淡忘,有點慌,夜深人靜的時候就整理下吧!還有,杭州最近熱的我腦袋都不好用了! 關於iic: 1.是一種資料傳輸協議(spi,usb,sdio,uart…)
linux驅動篇之 driver_register 過程分析(一)
linux驅動註冊過程分析--driver_register(一) 個人筆記,歡迎轉載,請註明出處,共同分享 共同進步 http://blog.csdn.net/richard_liujh/article/details/45825333 kernel版本3.10.1
Linux 驅動開發之核心模組開發 (二)—— 核心模組編譯 Makefile 入門
一、模組的編譯 我們在前面核心編譯中驅動移植那塊,講到驅動編譯分為靜態編譯和動態編譯;靜態編譯即為將驅動直接編譯進核心,動態編譯即為將驅動編譯成模組。 而動態編譯又分為兩種: a -- 內部編譯 在核心原始碼目錄內編譯 b -- 外部編譯 在核
【翻譯】Sklearn與TensorFlow機器學習實用指南 ——第12章 裝置和伺服器上的分散式TensorFlow(上)
在第 11 章,我們討論了幾種可以明顯加速訓練的技術:更好的權重初始化,批量標準化,複雜的優化器等等。 但是,即使採用了所有這些技術,在具有單個 CPU 的單臺機器上訓練大型神經網路可能需要幾天甚至幾周的時間。在本章中,我們將看到如何使用 TensorFlow 在多個裝置(C
LINUX系統服務與管理(Services)---------第六天
rsync同步? ? ?虛擬機A? ? 1. 將防火墻狀態設置為trusted? 2.SELinux當前修改為permissive? 3.SELinux永久狀態修改為permissive? ? 4.清空Yum緩存,檢查Yum是否可用? ? 虛擬機B? ? 1. 將防火墻狀態設置為trusted? 2.SELi
LINUX系統服務與管理(Services)---------第二天
根下常用的命令用途 自定義yum倉庫 ln創建軟連接 源碼包編譯安裝 主要用途/boot ? ? ? ? 存放系統引導必需的文件,包括內核、啟動配置/bin、/sbin ? 存放各種命令程序/dev ? ? ? ? ?存放硬盤、鍵盤、鼠標、光驅等各種設備文件/etc ? ? ? ? ?存放Li
LINUX系統服務與管理(Services)---------第四天
dns服務器虛擬機A? ? 1. 將防火墻狀態設置為trusted? 2.SELinux當前修改為permissive? 3.SELinux永久狀態修改為permissive? ? 4.清空Yum緩存,檢查Yum是否可用? ? 虛擬機B? ? 1. 將防火墻狀態設置為trusted? 2.SELinux當前修
LINUX系統服務與管理(Services)---------第五天
部署dhcp服務器 pxe網絡裝機服務器 虛擬機A? ? 1. 將防火墻狀態設置為trusted? 2.SELinux當前修改為permissive? 3.SELinux永久狀態修改為permissive? ? 4.清空Yum緩存,檢查Yum是否可用? ? 虛擬機B? ? 1. 將防火墻狀態設置為tr