,因此整理至今為止,在寫驅動程式可能需要注意,檢查的
部份,若有新的心得再繼續更新修正與補充。
standard operating procedure(sop), work flow to write a
standard operating procedure(sop), work flow to write a
 device driver:
hardware
1. power on? reset timing sequence. study device spec,
hardware
1. power on? reset timing sequence. study device spec,
 platform cpu/soc spec.
2.  bus interface:  host and device part, study bus spec
3. clock for device or device interface bus, study bus
 spec
4.  power pin voltage in device datasheet spec?, study
 device spec
use multimeter(三用電表) to check voltage, current or
use multimeter(三用電表) to check voltage, current or
 resistance
use oscilloscope (示波器) to study and check clock
 timing, signal sequence and timing,
use Logic Analyzer(邏輯分析儀) to study and check bus
 protocol
software
5. board initial code:
struct machine_desc in arch/arm/include/asm/mach/arch.h
software
5. board initial code:
struct machine_desc in arch/arm/include/asm/mach/arch.h
for example:
arch/arm/mach-s3c64xx/mach-smdk6410.c
search for MACHINE_START()
.init_irq for irq initialization
.map_io for memory mapped address space
.init_machine for board initial startup code and some
arch/arm/mach-s3c64xx/mach-smdk6410.c
search for MACHINE_START()
.init_irq for irq initialization
.map_io for memory mapped address space
.init_machine for board initial startup code and some
 early driver power on
6. gpio setting or multi-function pin, study soc spec,
6. gpio setting or multi-function pin, study soc spec,
 device spec
gpio_request() to reserve our gpio pins to prevent other drivers' disturbance
memory mapped i/o chip select timing setting, study
gpio_request() to reserve our gpio pins to prevent other drivers' disturbance
memory mapped i/o chip select timing setting, study
 device read/write timing and SoC memory mapped timing
 sequence, memory mapped address space assignment
 (resource in platform device)
use iotable_init() to define .virtual, .pfn, .length,
use iotable_init() to define .virtual, .pfn, .length,
 .type in struct map_desc irq(interrupt pin) from gpio
 pin (use gpiolib and resource in platform device)
use gpio_to_irq(), set_irq_handler(), enable platform
use gpio_to_irq(), set_irq_handler(), enable platform
 interrupt vectors assign platform_driver name to
 corresponding platform_device
use platform_add_devices() to add platform device
use platform_add_devices() to add platform device
 drivers
7. device power/reset sequence, study device spec
8. device initial command, study device spec, sample
7. device power/reset sequence, study device spec
8. device initial command, study device spec, sample
 driver reference
9. device register read/write verify, device register
9. device register read/write verify, device register
 interace
(memory mapped i/o chip select setting, bus procotol
(memory mapped i/o chip select setting, bus procotol
 spec, device init command)
10. device setting command, study device spec
11. device driver export device node in /dev,
10. device setting command, study device spec
11. device driver export device node in /dev,
 information in /sys, /proc
12. make device nodes in /dev, by driver or mknod
12. make device nodes in /dev, by driver or mknod
check device file major/minor number in
 ~linux/Documentation/devices.txt
13. library cross compile, setting matched to /dev
13. library cross compile, setting matched to /dev
 path?
export CC=/path/to/cross/tools
export CC=/path/to/cross/tools
./configure --build=x86-linux --host=arm-linux
14. application cross compile, set correct link path to
14. application cross compile, set correct link path to
 library(prefix)
export CC=/path/to/cross/tools
export CC=/path/to/cross/tools
./configure --build=x86-linux --host=arm-linux 
支援。