iTOP-4412 虚拟平台注册杂项字符设备

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011425939/article/details/80546761

本文目的在虚拟平台总线上注册字符设备hello_device。通过命令 ls /sys/devices/platform/可以查到 hello_device。进行以下步骤操作。

一、使能平台设备文件

1、iTOP-4412 设备注册在iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c

2、要使mach-itop4412.c编译进内核,进行以下步骤。

3、make menuconfig

进入文件 iTop4412_Kernel_3.0/Kconfig,内容如下

#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#
mainmenu "Linux/$ARCH $KERNELVERSION [$SRCARCH] Kernel Configuration"

config SRCARCH
	string
	option env="SRCARCH"

source "arch/$SRCARCH/Kconfig"

从上面的语句 跳转到这个文件arch/arm/Kconfig,部分内容如下。

menu "System Type"
..........
..........

choice
	prompt "ARM system type"
	default ARCH_VERSATILE
	..........
	..........
config ARCH_EXYNOS
	bool "Samsung EXYNOS"
	select CPU_V7
	select ARCH_SPARSEMEM_ENABLE
	select GENERIC_GPIO
	select HAVE_CLK
	select CLKDEV_LOOKUP
	select ARCH_HAS_CPUFREQ
	select GENERIC_CLOCKEVENTS
	select HAVE_S3C_RTC if RTC_CLASS
	select HAVE_S3C2410_I2C if I2C
	select HAVE_S3C2410_WATCHDOG if WATCHDOG
	select ARCH_HAS_OPP
	select PM_OPP if PM
	help
	  Samsung EXYNOS series based systems
	..........
	..........  
endchoice
	..........
	..........
endmenu

source "arch/arm/mach-exynos/Kconfig"

界面如下:

4、选择系统类型,enter 进入菜单 menu "System Type"

5、选择arm平台,enter进入"ARM system type"

6、选择samsung EXYNOS平台。select保存退出,回到上级目录。

在.config 目录中就会出现 这个配置 CONFIG_ARCH_EXYNOS=y,根据/arch/arm/Makefile中的语句

machine-$(CONFIG_ARCH_EXYNOS)		:= exynos

这样mach-exynos目录就会被编译。

7、根据source "arch/arm/mach-exynos/Kconfig" ,进入mach-exynos目录的Kconfig,部分内容如下。

menu "EXYNOS4 Machines"
	depends on ARCH_EXYNOS4
..........
..........
config MACH_SMDK4X12
	bool "SMDK4X12 board"
	select CPU_EXYNOS4212
	select CPU_EXYNOS4412
	..........
	help
	  Machine support for Samsung SMDK4X12
endmenu
	

界面操作如下。

8、enter 键进入"EXYNOS4 Machines"

9、选择 “SMDK4X12 board”,最后保存配置。

10、在.config文件中会有这个变量 CONFIG_MACH_SMDK4X12=y。

11、在arch/arm/mach-exynos/Makefile中,有如下语句。当CONFIG_MACH_SMDK4X12=y,平台设备文件mach-itop4412.c

将会被编译。

obj-$(CONFIG_MACH_SMDK4X12)		+= mach-itop4412.o

到这里我们平台文件mach-itop4412.c被编译配置条件完成。

二、在.config 文件中定义这样一个变量CONFIG_HELLO_CTL=y,进行以下操.

CONFIG_HELLO_CTL 这个变量主要的作用就是可以通过make menuconfig菜单进行可选择的把hello_device设备编译进入内核或者不编译进内核。

1、在文件iTop4412_Kernel_3.0/drivers/char/Kconfig,添加内容。

config HELLO_CTL
        bool "Enable HELLO config"
        default y
        help
          Enable HELLO config

2、make menuconfig 操作步骤

enter 进入Device Drivers

enter 进入character device

Enable_HELLO_config,这个就是我们新添加的,默认是被选择的,保存退出。

在.config 出现变量Enable_HELLO_config

.......
CONFIG_LEDS_CTL=y
CONFIG_HELLO_CTL=y
CONFIG_BUZZER_CTL=y
.......

如果不选择Enable_HELLO_config,在在.config中将出现如下结果

...........
CONFIG_LEDS_CTL=y
# CONFIG_HELLO_CTL is not set
CONFIG_BUZZER_CTL=y
.........

它会被注释掉。

到这里我们的变量CONFIG_HELLO_CTL 被添加完成。

三、在mach-itop4412.c中注册设备hello_device

1、在mach-itop4412.c中添加内容

#ifdef CONFIG_LEDS_CTL
struct platform_device s3c_device_leds_ctl = {
        .name   = "leds",
        .id             = -1,
};
#endif

#ifdef CONFIG_HELLO_CTL
struct platform_device s3c_device_hello_ctl = {
        .name   = "hello_device",
        .id             = -1,
};
#endif

2、static struct platform_device *smdk4x12_devices[],在这个结构体数组中添加下面内容

......
#ifdef CONFIG_LEDS_CTL
	&s3c_device_leds_ctl,
#endif

#ifdef CONFIG_HELLO_CTL
	&s3c_device_hello_ctl,
#endif
.......

四、编译

make zImage

五、下载zImage

zImage 在目录iTop4412_Kernel_3.0/arch/arm/boot里。

六、结果

[root@iTOP-4412]# ls /sys/devices/platform/
adc_ctl                 s3c-pl330.1             s5pv210-uart.3
alarm                   s3c-pl330.2             samsung-audio
android_pmem.0          s3c-sdhci.2             samsung-audio-idma
android_pmem.1          s3c-sdhci.3             samsung-i2s.0
arm-pmu.0               s3c-usbgadget           samsung-i2s.4
bt-sysfs                s3c2410-wdt             samsung-keypad
buzzer_ctl              s3c2440-i2c.1           samsung-kmsg
dw_mmc                  s3c2440-i2c.3           samsung-pd.0
exynos-busfreq          s3c2440-i2c.4           samsung-pd.1
exynos-usb-switch       s3c2440-i2c.5           samsung-pd.2
exynos4412-adc          s3c2440-i2c.7           samsung-pd.5
gpio-keys               s3c24xx-pwm.1           samsung-pd.6
hello_device            s3c64xx-rtc             samsung-pd.7
i2c-gpio.0              s3c64xx-spi.2           samsung-rp
ion-exynos              s5p-ehci                serial8250
leds                    s5p-fimg2d              si_gps
max485_ctl              s5p-pmic                snd-soc-dummy
mt3326-gps              s5p-sysmmu.15           soc-audio
power                   s5p-tvout-cec           switch-gpio.0
power.0                 s5p-tvout-hpd           tc4-regulator-consumer
reg-dummy               s5pv210-uart.0          uevent
regulatory.0            s5pv210-uart.1          wlan_ar6000_pm_dev.1
relay_ctl               s5pv210-uart.2

设备hello_device注册成功。

猜你喜欢

转载自blog.csdn.net/u011425939/article/details/80546761