This shows you the differences between two versions of the page.
tutorials:dvk521:documentations:driver_porting_and_configuration [2013/11/22 12:00] waveshare |
tutorials:dvk521:documentations:driver_porting_and_configuration [2013/12/23 14:50] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
==== Porting I/O Control Driver ==== | ==== Porting I/O Control Driver ==== | ||
The I/O control driver is built as a module, can be used for controlling common peripherals, such as LED, push button, buzzer. | The I/O control driver is built as a module, can be used for controlling common peripherals, such as LED, push button, buzzer. | ||
- | The driver can be found on DVD_DVK521_CN\相关源码\驱动及API源码\驱动源码\io_control_dev, copy it to your ubuntu system, compile it with your own system setting (refer to Appendix 1 "Compiling Driver Module"), and copy the generated io_control.ko file to the board, use the following command to load the driver module: | + | |
- | $insmod io_control.ko | + | Copy [[http://dl.cubieboard.org/parteners/waveshare/Source_Code/Driver%20and%20API/Driver/|io_control_dev]] to your ubuntu system, compile it with your own system setting (refer to Appendix 1 "Compiling Driver Module"), and copy the generated io_control.ko file to the board, use the following command to load the driver module: |
+ | $insmod io_control.ko | ||
Now you can start to try the I/O control API demo (refer to Appendix 2 "Running API Demo"). | Now you can start to try the I/O control API demo (refer to Appendix 2 "Running API Demo"). | ||
The buzzer can be shut up via configuring the related I/O port. Config the script.fex as follows: | The buzzer can be shut up via configuring the related I/O port. Config the script.fex as follows: | ||
- | [lcd0_para] | + | [lcd0_para] |
- | lcd_gpio_0 = port:PH15<0><0><default><default> | + | lcd_gpio_0 = port:PH15<0><0><default><default> |
- | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
Reboot the system to apply new configuration. | Reboot the system to apply new configuration. | ||
- | 2. Porting Dallas’s 1-wire Driver | + | ==== Porting Dallas’s 1-wire Driver ==== |
- | 2.1 Config the Kernel | + | === Config the Kernel === |
Config the kernel to include Dallas’s 1-wire(DS18B20) driver. | Config the kernel to include Dallas’s 1-wire(DS18B20) driver. | ||
Under the root directory, enter the following commnad: | Under the root directory, enter the following commnad: | ||
+ | #make menuconfig | ||
(All the make menuconfig that follows in this document, is executed under root directory) | (All the make menuconfig that follows in this document, is executed under root directory) | ||
- | #make menuconfig | + | |
Config as follows: | Config as follows: | ||
- | Device Drivers ---> | + | Device Drivers ---> |
- | <*> Dallas's 1-wire support ---> | + | <*> Dallas's 1-wire support ---> |
- | 1-wire Bus Masters ---> | + | 1-wire Bus Masters ---> |
- | <*> GPIO 1-wire busmaster | + | <*> GPIO 1-wire busmaster |
- | 1-wire Slaves ---> | + | 1-wire Slaves ---> |
- | <*> Thermal family implementation | + | <*> Thermal family implementation |
- | Save and exit, re-compile the kernel: | + | |
- | #make uImage | + | |
- | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | |
- | 2.2 Config the script.fex | + | Save and exit, re-compile the kernel: |
+ | #make uImage | ||
+ | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] | ||
+ | === Config the script.fex === | ||
Config the script.fex as follows, add the [w1_para] setting: | Config the script.fex as follows, add the [w1_para] setting: | ||
- | [w1_para] | + | [w1_para] |
- | w1_used = 1 | + | w1_used = 1 |
- | w1_pin = port:PB10<1><default><default><default> | + | w1_pin = port:PB10<1><default><default><default> |
- | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
Reboot the system, insert the DS18B20 device. | Reboot the system, insert the DS18B20 device. | ||
- | The driver can be found on DVD_DVK521_CN\相关源码\驱动及API源码\驱动源码\ds18b20l_dev, copy it to your ubuntu system, compile it with your own system setting (refer to Appendix 1 "Compiling Driver Module"), and copy the generated w1-sunsi.ko file to the board, use the following command to load the driver: | + | Copy [[http://dl.cubieboard.org/parteners/waveshare/Source_Code/Driver%20and%20API/Driver/|ds18b20l_dev]] to your ubuntu system, compile it with your own system setting (refer to Appendix 1 "Compiling Driver Module"), and copy the generated w1-sunsi.ko file to the board, use the following command to load the driver: |
- | $insmod io_control.ko | + | $insmod io_control.ko |
Enter the /sys/bus/w1/devices/w1_bus_master1 directory, there's a folder with the name preceding with "28-", which represents the DS18B20 device. The 28 means the current temperature sensor is DS18B20, the characters/numbers string follows stands for the device unique ID. Enter the folder, you should find it's device file named w1_slave, to get current temperature, enter this command on the terminal: | Enter the /sys/bus/w1/devices/w1_bus_master1 directory, there's a folder with the name preceding with "28-", which represents the DS18B20 device. The 28 means the current temperature sensor is DS18B20, the characters/numbers string follows stands for the device unique ID. Enter the folder, you should find it's device file named w1_slave, to get current temperature, enter this command on the terminal: | ||
- | $cat w1_slave | + | $cat w1_slave |
As shown in the picture below: | As shown in the picture below: | ||
- | |||
- | 3. Porting I2C Bus Driver | + | {{.:Documentations-6_1.jpg}} |
- | 3.1 Config the Kernel | + | |
+ | ==== Porting I2C Bus Driver ==== | ||
+ | === Config the Kernel === | ||
Config the kernel to include I2C bus driver: | Config the kernel to include I2C bus driver: | ||
- | #make menuconfig | + | #make menuconfig |
- | Device Drivers ---> | + | Device Drivers ---> |
- | {*} I2C support ---> | + | {*} I2C support ---> |
I2C Hardware Bus support ---> | I2C Hardware Bus support ---> | ||
<*> Allwinner Technology SUNXI I2C interface | <*> Allwinner Technology SUNXI I2C interface | ||
Save and exit. | Save and exit. | ||
Comment out lines 914 to 918 of the i2c-sunxi.c file, which is located in drivers/i2c/busses directory, as follows: | Comment out lines 914 to 918 of the i2c-sunxi.c file, which is located in drivers/i2c/busses directory, as follows: | ||
- | 914 /* else if (ret != num){ | + | 914 /* else if (ret != num){ |
- | 915 printk("incomplete xfer (0x%x)\n", ret); | + | 915 printk("incomplete xfer (0x%x)\n", ret); |
- | 916 ret = -ECOMM; | + | 916 ret = -ECOMM; |
- | 917 //dev_dbg(i2c->adap.dev, "incomplete xfer (%d)\n", ret); 918 }*/ | + | 917 //dev_dbg(i2c->adap.dev, "incomplete xfer (%d)\n", ret); 918 }*/ |
Save, and re-compile the kernel: | Save, and re-compile the kernel: | ||
- | #make uImage | + | #make uImage |
Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | ||
- | 3.2 Config the script.fex | + | === Config the script.fex === |
Our AT24/FM24 module can be used to test the I2C driver, which is connected to the I2C1 controller. Therefore, config the [twi1_para] setting in the script.fex as follows: | Our AT24/FM24 module can be used to test the I2C driver, which is connected to the I2C1 controller. Therefore, config the [twi1_para] setting in the script.fex as follows: | ||
- | [twi1_para] | + | [twi1_para] |
- | twi1_used = 1 | + | twi1_used = 1 |
- | twi1_scl = port:PB18<2><default><default><default> | + | twi1_scl = port:PB18<2><default><default><default> |
- | twi1_sda = port:PB19<2><default><default><default> | + | twi1_sda = port:PB19<2><default><default><default> |
- | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
Reboot the system. | Reboot the system. | ||
- | For more info about testing the AT24/FM24 module, like reading/writing data, please refer to the document < 1. User Manual> and Appendix 2 "Running API Demo". | ||
+ | For more info about testing the AT24/FM24 module, like reading/writing data, please refer to the document [[tutorials:DVK521:Documentations:DVK521 User Manual|DVK521 User Manual]] and Appendix 2 "Running API Demo". | ||
- | 4. Porting SPI Devices Driver | + | |
- | 4.1 Config the Kernel | + | ==== Porting SPI Devices Driver ==== |
+ | === Config the Kernel === | ||
Config the kernel to include SPI driver: | Config the kernel to include SPI driver: | ||
- | #make menuconfig | + | #make menuconfig |
- | Device Drivers ---> | + | Device Drivers ---> |
- | [*] SPI support ---> | + | [*] SPI support ---> |
- | <*> SUN4I SPI Controller | + | <*> SUN4I SPI Controller |
- | [*] SUN4I SPI Normal DMA mode select | + | [*] SUN4I SPI Normal DMA mode select |
- | <*> DesignWare SPI controller core support | + | <*> DesignWare SPI controller core support |
- | <*> User mode SPI device driver support | + | <*> User mode SPI device driver support |
Save and exit, re-compile the kernel: | Save and exit, re-compile the kernel: | ||
- | #make uImage | + | #make uImage |
- | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
- | 4.2 Config the script.fex | + | === Config the script.fex === |
Our SPI module AT45DBXX DataFlash Board is connected to the SPI0 controller, therefore, config the [spi0_para], [spi_devices], and [spi_board0] settings in the script.fex as follows: | Our SPI module AT45DBXX DataFlash Board is connected to the SPI0 controller, therefore, config the [spi0_para], [spi_devices], and [spi_board0] settings in the script.fex as follows: | ||
- | [spi0_para] | + | [spi0_para] |
- | spi_used = 1 | + | spi_used = 1 |
- | spi_cs_bitmap = 1 | + | spi_cs_bitmap = 1 |
- | spi_cs0 = port:PI10<2><default><default><default> | + | spi_cs0 = port:PI10<2><default><default><default> |
- | spi_sclk = port:PI11<2><default><default><default> | + | spi_sclk = port:PI11<2><default><default><default> |
- | spi_mosi = port:PI12<2><default><default><default> | + | spi_mosi = port:PI12<2><default><default><default> |
- | spi_miso = port:PI13<2><default><default><default> | + | spi_miso = port:PI13<2><default><default><default> |
- | [spi_devices] | + | [spi_devices] |
- | spi_dev_num = 1 | + | spi_dev_num = 1 |
- | [spi_board0] | + | [spi_board0] |
- | modalias = "spidev" | + | modalias = "spidev" |
- | max_speed_hz = 12000000 | + | max_speed_hz = 12000000 |
- | bus_num = 0 | + | bus_num = 0 |
- | chip_select = 0 | + | chip_select = 0 |
- | mode = 3 | + | mode = 3 |
- | full_duplex = 0 | + | full_duplex = 0 |
- | manual_cs = 0 | + | manual_cs = 0 |
- | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
Now the kernel and script.fex configuration for SPI device have completed, the last step is to load the io_control.ko driver module (refer to the previous section " Porting I/O Control Driver"). | Now the kernel and script.fex configuration for SPI device have completed, the last step is to load the io_control.ko driver module (refer to the previous section " Porting I/O Control Driver"). | ||
+ | |||
Reboot the system. | Reboot the system. | ||
+ | |||
Now you can use the AT45DBXX DataFlash Board to test the SPI driver (refer to Appendix 2 "Running API Demo"). | Now you can use the AT45DBXX DataFlash Board to test the SPI driver (refer to Appendix 2 "Running API Demo"). | ||
- | 5. Porting LCD Driver | + | ==== Porting LCD Driver ==== |
- | 5.1 Config the Kernel | + | === Config the Kernel === |
The LCD driver support has been included in linux-sunxi-sunxi-3.4.61, the driver file can be found on drivers/video/sunxi/lcd. | The LCD driver support has been included in linux-sunxi-sunxi-3.4.61, the driver file can be found on drivers/video/sunxi/lcd. | ||
+ | |||
Check the kernel configuration, confirm that the driver is included: | Check the kernel configuration, confirm that the driver is included: | ||
- | #make menuconfig | + | #make menuconfig |
- | Device Drivers ---> | + | Device Drivers ---> |
Graphics support ---> | Graphics support ---> | ||
- | {*} Support for frame buffer devices ---> | + | {*} Support for frame buffer devices ---> |
- | <*> DISP Driver Support(sunxi) | + | <*> DISP Driver Support(sunxi) |
- | -*- Reserve memory block for sunxi/fb | + | -*- Reserve memory block for sunxi/fb |
- | [*] Enable FB/UMP Integration | + | [*] Enable FB/UMP Integration |
- | <*> LCD Driver Support(sunxi) | + | <*> LCD Driver Support(sunxi) |
- | <*> HDMI Driver Support(sunxi) | + | <*> HDMI Driver Support(sunxi) |
Save and exit, re-compile the kernel: | Save and exit, re-compile the kernel: | ||
- | #make uImage | + | #make uImage |
- | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
- | 5.2 Config the script.fex | + | === Config the script.fex === |
The A10 supports two channel video output, however, only LCD0 is available on Cubieboard, therefore, we connect the 7inch capacitive LCD to the LCD0 controller. | The A10 supports two channel video output, however, only LCD0 is available on Cubieboard, therefore, we connect the 7inch capacitive LCD to the LCD0 controller. | ||
+ | |||
Config the script.fex, [dis_init] setting for display device initialization, and [lcd0_para] setting for LCD parameters (depending on the specifications of concrete LCD), as follows: | Config the script.fex, [dis_init] setting for display device initialization, and [lcd0_para] setting for LCD parameters (depending on the specifications of concrete LCD), as follows: | ||
- | [disp_init] | + | [disp_init] |
- | disp_init_enable = 1 | + | disp_init_enable = 1 |
- | disp_mode = 0 | + | disp_mode = 0 |
- | screen0_output_type = 1 | + | screen0_output_type = 1 |
- | screen0_output_mode = 4 | + | screen0_output_mode = 4 |
- | screen1_output_type = 1 | + | screen1_output_type = 1 |
- | screen1_output_mode = 4 | + | screen1_output_mode = 4 |
- | fb0_framebuffer_num = 2 | + | fb0_framebuffer_num = 2 |
- | fb0_format = 10 | + | fb0_format = 10 |
- | fb0_pixel_sequence = 0 | + | fb0_pixel_sequence = 0 |
- | fb0_scaler_mode_enable = 0 | + | fb0_scaler_mode_enable = 0 |
- | fb1_framebuffer_num = 2 | + | fb1_framebuffer_num = 2 |
- | fb1_format = 10 | + | fb1_format = 10 |
- | fb1_pixel_sequence = 0 | + | fb1_pixel_sequence = 0 |
- | fb1_scaler_mode_enable = 0 | + | fb1_scaler_mode_enable = 0 |
- | lcd0_bright = 197 | + | lcd0_bright = 197 |
- | lcd1_bright = 197 | + | lcd1_bright = 197 |
- | lcd0_screen_bright = 50 | + | lcd0_screen_bright = 50 |
- | lcd0_screen_contrast = 50 | + | lcd0_screen_contrast = 50 |
- | lcd0_screen_saturation = 57 | + | lcd0_screen_saturation = 57 |
- | lcd0_screen_hue = 50 | + | lcd0_screen_hue = 50 |
- | lcd1_screen_bright = 50 | + | lcd1_screen_bright = 50 |
- | lcd1_screen_contrast = 50 | + | lcd1_screen_contrast = 50 |
- | lcd1_screen_saturation = 57 | + | lcd1_screen_saturation = 57 |
- | lcd1_screen_hue = 50 | + | lcd1_screen_hue = 50 |
- | [lcd0_para] | + | [lcd0_para] |
- | lcd_used = 1 | + | lcd_used = 1 |
- | lcd_x = 800 | + | lcd_x = 800 |
- | lcd_y = 480 | + | lcd_y = 480 |
- | lcd_dclk_freq = 33 | + | lcd_dclk_freq = 33 |
- | lcd_pwm_not_used = 0 | + | lcd_pwm_not_used = 0 |
- | lcd_pwm_ch = 0 | + | lcd_pwm_ch = 0 |
- | lcd_pwm_freq = 10000 | + | lcd_pwm_freq = 10000 |
- | lcd_pwm_pol = 0 | + | lcd_pwm_pol = 0 |
- | lcd_if = 0 | + | lcd_if = 0 |
- | lcd_hbp = 215 | + | lcd_hbp = 215 |
- | lcd_ht = 1055 | + | lcd_ht = 1055 |
- | lcd_vbp = 34 | + | lcd_vbp = 34 |
- | lcd_vt = 1050 | + | lcd_vt = 1050 |
- | lcd_hv_if = 0 | + | lcd_hv_if = 0 |
- | lcd_hv_smode = 0 | + | lcd_hv_smode = 0 |
- | lcd_hv_s888_if = 0 | + | lcd_hv_s888_if = 0 |
- | lcd_hv_syuv_if = 0 | + | lcd_hv_syuv_if = 0 |
- | lcd_hv_vspw = 0 | + | lcd_hv_vspw = 0 |
- | lcd_hv_hspw = 48 | + | lcd_hv_hspw = 48 |
- | lcd_lvds_ch = 0 | + | lcd_lvds_ch = 0 |
- | lcd_lvds_mode = 0 | + | lcd_lvds_mode = 0 |
- | lcd_lvds_bitwidth = 0 | + | lcd_lvds_bitwidth = 0 |
- | lcd_lvds_io_cross = 0 | + | lcd_lvds_io_cross = 0 |
- | lcd_cpu_if = 0 | + | lcd_cpu_if = 0 |
- | lcd_frm = 0 | + | lcd_frm = 0 |
- | lcd_io_cfg0 = 268435456 | + | lcd_io_cfg0 = 268435456 |
- | lcd_gamma_correction_en = 0 | + | lcd_gamma_correction_en = 0 |
- | lcd_gamma_tbl_0 = 0x0 | + | lcd_gamma_tbl_0 = 0x0 |
- | lcd_gamma_tbl_1 = 0x10101 | + | lcd_gamma_tbl_1 = 0x10101 |
- | lcd_gamma_tbl_255 = 0xffffff | + | lcd_gamma_tbl_255 = 0xffffff |
- | lcd_bl_en_used = 1 | + | lcd_bl_en_used = 1 |
- | lcd_bl_en = port:PH07<1><0><default><1> | + | lcd_bl_en = port:PH07<1><0><default><1> |
- | lcd_power_used = 1 | + | lcd_power_used = 1 |
- | lcd_power = port:PH08<1><0><default><1> | + | lcd_power = port:PH08<1><0><default><1> |
- | lcd_pwm_used = 1 | + | lcd_pwm_used = 1 |
- | lcd_pwm = port:PB02<2><default><default><default> | + | lcd_pwm = port:PB02<2><default><default><default> |
- | lcd_gpio_0 = port:PH15<0><0><default><default> | + | lcd_gpio_0 = port:PH15<0><0><default><default> |
- | lcd_gpio_1 = | + | lcd_gpio_1 = |
- | lcd_gpio_2 = | + | lcd_gpio_2 = |
- | lcd_gpio_3 = | + | lcd_gpio_3 = |
- | lcdd0 = port:PD00<2><0><default><default> | + | lcdd0 = port:PD00<2><0><default><default> |
- | lcdd1 = port:PD01<2><0><default><default> | + | lcdd1 = port:PD01<2><0><default><default> |
- | lcdd2 = port:PD02<2><0><default><default> | + | lcdd2 = port:PD02<2><0><default><default> |
- | lcdd3 = port:PD03<2><0><default><default> | + | lcdd3 = port:PD03<2><0><default><default> |
- | lcdd4 = port:PD04<2><0><default><default> | + | lcdd4 = port:PD04<2><0><default><default> |
- | lcdd5 = port:PD05<2><0><default><default> | + | lcdd5 = port:PD05<2><0><default><default> |
- | lcdd6 = port:PD06<2><0><default><default> | + | lcdd6 = port:PD06<2><0><default><default> |
- | lcdd7 = port:PD07<2><0><default><default> | + | lcdd7 = port:PD07<2><0><default><default> |
- | lcdd8 = port:PD08<2><0><default><default> | + | lcdd8 = port:PD08<2><0><default><default> |
- | lcdd9 = port:PD09<2><0><default><default> | + | lcdd9 = port:PD09<2><0><default><default> |
- | lcdd10 = port:PD10<2><0><default><default> | + | lcdd10 = port:PD10<2><0><default><default> |
- | lcdd11 = port:PD11<2><0><default><default> | + | lcdd11 = port:PD11<2><0><default><default> |
- | lcdd12 = port:PD12<2><0><default><default> | + | lcdd12 = port:PD12<2><0><default><default> |
- | lcdd13 = port:PD13<2><0><default><default> | + | lcdd13 = port:PD13<2><0><default><default> |
- | lcdd14 = port:PD14<2><0><default><default> | + | lcdd14 = port:PD14<2><0><default><default> |
- | lcdd15 = port:PD15<2><0><default><default> | + | lcdd15 = port:PD15<2><0><default><default> |
- | lcdd16 = port:PD16<2><0><default><default> | + | lcdd16 = port:PD16<2><0><default><default> |
- | lcdd17 = port:PD17<2><0><default><default> | + | lcdd17 = port:PD17<2><0><default><default> |
- | lcdd18 = port:PD18<2><0><default><default> | + | lcdd18 = port:PD18<2><0><default><default> |
- | lcdd19 = port:PD19<2><0><default><default> | + | lcdd19 = port:PD19<2><0><default><default> |
- | lcdd20 = port:PD20<2><0><default><default> | + | lcdd20 = port:PD20<2><0><default><default> |
- | lcdd21 = port:PD21<2><0><default><default> | + | lcdd21 = port:PD21<2><0><default><default> |
- | lcdd22 = port:PD22<2><0><default><default> | + | lcdd22 = port:PD22<2><0><default><default> |
- | lcdd23 = port:PD23<2><0><default><default> | + | lcdd23 = port:PD23<2><0><default><default> |
- | lcdclk = port:PD24<2><0><default><default> | + | lcdclk = port:PD24<2><0><default><default> |
- | lcdde = port:PD25<2><0><default><default> | + | lcdde = port:PD25<2><0><default><default> |
- | lcdhsync = port:PD26<2><0><default><default> | + | lcdhsync = port:PD26<2><0><default><default> |
- | lcdvsync = port:PD27<2><0><default><default> | + | lcdvsync = port:PD27<2><0><default><default> |
Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | ||
Line 237: | Line 246: | ||
- | 6. Porting CTP Driver | + | ==== Porting CTP Driver ==== |
- | 6.1 Config the Kernel | + | === Config the Kernel === |
linux-sunxi-sunxi-3.4.61 includes several capacitive touch panel drivers, such as FT5206/FT5406 driver, Goodix driver. The driver file can be found on drivers/input/touchscreen. | linux-sunxi-sunxi-3.4.61 includes several capacitive touch panel drivers, such as FT5206/FT5406 driver, Goodix driver. The driver file can be found on drivers/input/touchscreen. | ||
+ | |||
Config the Kernel to include touchscreen driver: | Config the Kernel to include touchscreen driver: | ||
- | #make menuconfig | + | #make menuconfig |
- | Device Drivers ---> | + | Device Drivers ---> |
- | Input device support ---> | + | Input device support ---> |
- | [*] Touchscreens ---> | + | [*] Touchscreens ---> |
- | <*> ft5x touchscreen driver | + | <*> ft5x touchscreen driver |
Re-compile the kernel: | Re-compile the kernel: | ||
- | #make uImage | + | #make uImage |
- | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
- | 6.2 Config the script.fex | + | === Config the script.fex === |
Since the touch screen is connected to I2C1 controller, make sure the I2C driver has been ported (refer to the previous section "Porting I2C Bus Driver"). | Since the touch screen is connected to I2C1 controller, make sure the I2C driver has been ported (refer to the previous section "Porting I2C Bus Driver"). | ||
Config the [ctp_para] setting in script.fex. | Config the [ctp_para] setting in script.fex. | ||
- | ctp_name:driver name | + | ctp_name:driver name |
- | ctp_twi_id:I2C controller which is actually used | + | ctp_twi_id:I2C controller which is actually used |
- | ctp_twi_addr:I2C device address (7bit) | + | ctp_twi_addr:I2C device address (7bit) |
- | ctp_screen_max_x:touch panel resolution | + | ctp_screen_max_x:touch panel resolution |
- | ctp_screen_max_y:touch panel resolution | + | ctp_screen_max_y:touch panel resolution |
- | ctp_revert_x_flag:set 1 to revert x axis | + | ctp_revert_x_flag:set 1 to revert x axis |
- | ctp_revert_y_flag:set 1 to revert y axis | + | ctp_revert_y_flag:set 1 to revert y axis |
- | ctp_exchange_x_y_flag:set 1 to exchange x axis and y axis | + | ctp_exchange_x_y_flag:set 1 to exchange x axis and y axis |
- | ctp_int_port:touch interrupt pin | + | ctp_int_port:touch interrupt pin |
- | ctp_wakeup:touch wakeup pin | + | ctp_wakeup:touch wakeup pin |
- | ctp_io_port:interrupt pin configuration | + | ctp_io_port:interrupt pin configuration |
According to the specifications and hardware connection of our 7inch capacitive LCD, config as follows: | According to the specifications and hardware connection of our 7inch capacitive LCD, config as follows: | ||
- | [ctp_para] | + | [ctp_para] |
- | ctp_used = 1 | + | ctp_used = 1 |
- | ctp_name = "ft5x_ts" | + | ctp_name = "ft5x_ts" |
- | ctp_twi_id = 1 | + | ctp_twi_id = 1 |
- | ctp_twi_addr = 0x38 | + | ctp_twi_addr = 0x38 |
- | ctp_screen_max_x = 800 | + | ctp_screen_max_x = 800 |
- | ctp_screen_max_y = 480 | + | ctp_screen_max_y = 480 |
- | ctp_revert_x_flag = 0 | + | ctp_revert_x_flag = 0 |
- | ctp_revert_y_flag = 1 | + | ctp_revert_y_flag = 1 |
- | ctp_exchange_x_y_flag = 0 | + | ctp_exchange_x_y_flag = 0 |
- | ctp_int_port = port:PH7<6><default> | + | ctp_int_port = port:PH7<6><default> |
- | ctp_wakeup = port:PB13<1><default><default><1> | + | ctp_wakeup = port:PB13<1><default><default><1> |
- | ctp_io_port = port:PH7<0><default> | + | ctp_io_port = port:PH7<0><default> |
- | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
Connect the 7inch capacitive LCD, reboot the system, try to touch the icons on the screen. | Connect the 7inch capacitive LCD, reboot the system, try to touch the icons on the screen. | ||
| | ||
- | 7. Porting VGA Driver | + | ==== Porting VGA Driver ==== |
VAG driver has been includes in the kernel, just config the script.fex directly: | VAG driver has been includes in the kernel, just config the script.fex directly: | ||
- | [disp_init] | + | [disp_init] |
- | disp_init_enable = 1 | + | disp_init_enable = 1 |
- | disp_mode = 0 | + | disp_mode = 0 |
- | screen0_output_type = 4 | + | screen0_output_type = 4 |
- | screen0_output_mode = 4 | + | screen0_output_mode = 4 |
- | screen1_output_type = 2 | + | screen1_output_type = 2 |
- | screen1_output_mode = 14 | + | screen1_output_mode = 14 |
- | fb0_framebuffer_num = 2 | + | fb0_framebuffer_num = 2 |
- | fb0_format = 10 | + | fb0_format = 10 |
- | fb0_pixel_sequence = 0 | + | fb0_pixel_sequence = 0 |
- | fb0_scaler_mode_enable = 1 | + | fb0_scaler_mode_enable = 1 |
- | fb1_framebuffer_num = 2 | + | fb1_framebuffer_num = 2 |
- | fb1_format = 10 | + | fb1_format = 10 |
- | fb1_pixel_sequence = 0 | + | fb1_pixel_sequence = 0 |
- | fb1_scaler_mode_enable = 1 | + | fb1_scaler_mode_enable = 1 |
Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | ||
Reboot the system, now the VGA can be used for displaying. | Reboot the system, now the VGA can be used for displaying. | ||
- | 8. Porting HDMI Driver | + | ==== Porting HDMI Driver ==== |
HDMI driver has been includes in the kernel, just config the script.fex directly: | HDMI driver has been includes in the kernel, just config the script.fex directly: | ||
- | [disp_init] | + | [disp_init] |
- | disp_init_enable = 1 | + | disp_init_enable = 1 |
- | disp_mode = 0 | + | disp_mode = 0 |
- | screen0_output_type = 3 | + | screen0_output_type = 3 |
- | screen0_output_mode = 5 | + | screen0_output_mode = 5 |
- | screen1_output_type = 1 | + | screen1_output_type = 1 |
- | screen1_output_mode = 4 | + | screen1_output_mode = 4 |
Reboot the system, now the HDMI can be used for displaying. | Reboot the system, now the HDMI can be used for displaying. | ||
- | 9. Porting CSI Driver | + | ==== Porting CSI Driver === |
- | 8.1 Config the Kernel | + | === Config the Kernel === |
- | #make menuconfig | + | #make menuconfig |
- | Device Drivers ---> | + | Device Drivers ---> |
- | <*> Multimedia support ---> | + | <*> Multimedia support ---> |
- | <*> Video For Linux | + | <*> Video For Linux |
- | [*] CSI Driver Config for sun4i ---> | + | [*] CSI Driver Config for sun4i ---> |
- | <M> OmniVision OV7670 sensor support | + | <M> OmniVision OV7670 sensor support |
Built the camera driver as module, save and exit. | Built the camera driver as module, save and exit. | ||
Comment out the print messages in the __s32 img_sw_para_to_reg(__u8 type, __u8 mode, __u8 value) function in disp_layer.c file, which is under drivers/video/sunxi/disp directory. | Comment out the print messages in the __s32 img_sw_para_to_reg(__u8 type, __u8 mode, __u8 value) function in disp_layer.c file, which is under drivers/video/sunxi/disp directory. | ||
+ | |||
Lines 95 to 99: | Lines 95 to 99: | ||
- | 95 /* else { | + | 95 /* else { |
- | 96 DE_WRN("not supported yuv channel format:%d in " | + | 96 DE_WRN("not supported yuv channel format:%d in " |
- | 97 "img_sw_para_to_reg\n", value); | + | 97 "img_sw_para_to_reg\n", value); |
- | 98 return 0; | + | 98 return 0; |
- | 99 }*/ | + | 99 }*/ |
Lines 125 to 129: | Lines 125 to 129: | ||
- | 125 /* else { | + | 125 /* else { |
- | 126 DE_WRN("not supported yuv channel pixel sequence:%d " | + | 126 DE_WRN("not supported yuv channel pixel sequence:%d " |
- | 127 "in img_sw_para_to_reg\n", value); | + | 127 "in img_sw_para_to_reg\n", value); |
- | 128 return 0; | + | 128 return 0; |
- | 129 }*/ | + | 129 }*/ |
Lines 168 to 172: | Lines 168 to 172: | ||
- | 168 /* else { | + | 168 /* else { |
- | 169 DE_WRN("not supported image0 pixel sequence:%d in " | + | 169 DE_WRN("not supported image0 pixel sequence:%d in " |
- | 170 "img_sw_para_to_reg\n", value); | + | 170 "img_sw_para_to_reg\n", value); |
- | 171 return 0; | + | 171 return 0; |
- | 172 }*/ | + | 172 }*/ |
Line 175: | Line 175: | ||
- | 175 // DE_WRN("not supported type:%d in img_sw_para_to_reg\n", type); | + | 175 // DE_WRN("not supported type:%d in img_sw_para_to_reg\n", type); |
Save, re-compile the kernel: | Save, re-compile the kernel: | ||
- | #make uImage | + | #make uImage |
Compile the kernel modules: | Compile the kernel modules: | ||
- | #make modules | + | #make modules |
Install the kernel modules: | Install the kernel modules: | ||
- | #make modules_install | + | #make modules_install |
The installation copies the compiled kernel module from the kernel source code to the ubuntu /lib/modules directory. | The installation copies the compiled kernel module from the kernel source code to the ubuntu /lib/modules directory. | ||
+ | |||
The related driver module files include: videobuf-core.ko, videobuf-dma-contig.ko, sun4i_csi1.ko, ov7670.ko, which are located respectively in: | The related driver module files include: videobuf-core.ko, videobuf-dma-contig.ko, sun4i_csi1.ko, ov7670.ko, which are located respectively in: | ||
- | videobuf-core.ko, videobuf-dma-contig.ko: | + | videobuf-core.ko, videobuf-dma-contig.ko: |
- | /lib/modules/3.4.61+/kernel/drivers/media/video | + | /lib/modules/3.4.61+/kernel/drivers/media/video |
- | ov7670.ko: | + | ov7670.ko: |
- | /lib/modules/3.4.61+/kernel/drivers/media/video/sun4i_csi/device | + | /lib/modules/3.4.61+/kernel/drivers/media/video/sun4i_csi/device |
- | sun4i_csi1.ko: | + | sun4i_csi1.ko: |
- | /lib/modules/3.4.61+/kernel/drivers/media/video/sun4i_csi/csi1 | + | /lib/modules/3.4.61+/kernel/drivers/media/video/sun4i_csi/csi1 |
- | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Replace the earlier uImage on the board with the new generated uImage under arch/arm/boot/ directory via NFS. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
Copy the above 4 driver files to the board, and install them in order: | Copy the above 4 driver files to the board, and install them in order: | ||
- | $insmod videobuf-core.ko | + | $insmod videobuf-core.ko |
- | $insmod videobuf-dma-contig.ko | + | $insmod videobuf-dma-contig.ko |
- | $insmod ov7670.ko | + | $insmod ov7670.ko |
- | $insmod sun4i_csi1.ko | + | $insmod sun4i_csi1.ko |
Note: please pay attention to the installing order, camera driver should be installed before sun4i_csi1.ko. | Note: please pay attention to the installing order, camera driver should be installed before sun4i_csi1.ko. | ||
- | 8.2 Config the script.fex | + | === Config the script.fex === |
Since our OV7670 camera is connected to the CSI1 controller, config the [csi1_para] setting in script.fex. The suffix _b in the parameter name indicates that this is a secondary camera parameter while two cameras were connected to the same CSI. | Since our OV7670 camera is connected to the CSI1 controller, config the [csi1_para] setting in script.fex. The suffix _b in the parameter name indicates that this is a secondary camera parameter while two cameras were connected to the same CSI. | ||
+ | |||
The parameters are interpreted as follows: | The parameters are interpreted as follows: | ||
- | csi_used = xx:enable/disable csi0 or csi1 | + | csi_used = xx:enable/disable csi0 or csi1 |
- | csi_mode = xx:CSI receiver buffer mode: | + | csi_mode = xx:CSI receiver buffer mode: |
- | 0:a stand-alone buffer for each CSI receiver | + | 0:a stand-alone buffer for each CSI receiver |
- | 1:a shared buffer for both CSI receiver | + | 1:a shared buffer for both CSI receiver |
- | csi_dev_qty = xx:CSI device quantity, 1 or 2 | + | csi_dev_qty = xx:CSI device quantity, 1 or 2 |
- | csi_stby_mode = xx:standby power statue | + | csi_stby_mode = xx:standby power statue |
- | 0:power on when standby | + | 0:power on when standby |
- | 1:power off when standby | + | 1:power off when standby |
- | csi_mname = “xxx”: CSI module name, matches with the driver, valid option includes: ov7670/gc0308/gt2005/hi704/sp0338/mt9m112/gc0307/mt9m113/mt9d112/hi253/ov5640 | + | csi_mname = “xxx”: CSI module name, matches with the driver, valid option includes: ov7670/gc0308/gt2005/hi704/sp0338/mt9m112/gc0307/mt9m113/mt9d112/hi253/ov5640 |
- | csi_twi_id = xx:I2C | + | csi_twi_id = xx:I2C |
- | csi_twi_addr = xx:I2C address | + | csi_twi_addr = xx:I2C address |
- | csi_if = xx:interface timing: | + | csi_if = xx:interface timing: |
- | 0:8bit data line, with Hsync,Vsync | + | 0:8bit data line, with Hsync,Vsync |
- | 1:16bit data line, with Hsync,Vsync | + | 1:16bit data line, with Hsync,Vsync |
- | 2:24bit data line, with Hsync,Vsync | + | 2:24bit data line, with Hsync,Vsync |
- | 3:8bit data line, BT656 embedded sync, single-channel | + | 3:8bit data line, BT656 embedded sync, single-channel |
- | 4:8bit data line, BT656 embedded sync, dual-channels | + | 4:8bit data line, BT656 embedded sync, dual-channels |
- | 5:8bit data line, BT656 embedded sync, four-channels | + | 5:8bit data line, BT656 embedded sync, four-channels |
- | csi_vflip = xx:video vertical flip | + | csi_vflip = xx:video vertical flip |
- | 0:normal | + | 0:normal |
- | 1:flip | + | 1:flip |
- | csi_hflip = xx:video horizontal flip | + | csi_hflip = xx:video horizontal flip |
- | 0:normal | + | 0:normal |
- | 1:flip | + | 1:flip |
- | csi_iovdd = "", csi_avdd = "", and csi_dvdd = "": power supply of the camera module's IO, Analog, and Core. | + | csi_iovdd = "", csi_avdd = "", and csi_dvdd = "": power supply of the camera module's IO, Analog, and Core. |
- | "axp20_pll": powering from AXP20 LDO3 | + | "axp20_pll": powering from AXP20 LDO3 |
- | "axp20_hdmi": powering from AXP20 LDO4 | + | "axp20_hdmi": powering from AXP20 LDO4 |
- | "": powering from other source | + | "": powering from other source |
- | csi_flash_pol = xx:flash polarity for cameras that feature flash IO control | + | csi_flash_pol = xx:flash polarity for cameras that feature flash IO control |
- | 0: flash lights when IO low level | + | 0: flash lights when IO low level |
- | 1: flash lights when IO high level | + | 1: flash lights when IO high level |
- | csi_pck = xx:GPIO configuration for clock signal from module to CSI | + | csi_pck = xx:GPIO configuration for clock signal from module to CSI |
- | csi_ck = xx:GPIO configuration for clock signal from CSI to module | + | csi_ck = xx:GPIO configuration for clock signal from CSI to module |
- | csi_hsync = xx:GPIO configuration for horizontal sync signal from module to CSI | + | csi_hsync = xx:GPIO configuration for horizontal sync signal from module to CSI |
- | csi_vsync = xx:GPIO configuration for vertical sync signal from module to CSI | + | csi_vsync = xx:GPIO configuration for vertical sync signal from module to CSI |
- | csi_d0 = xx to csi_d15 = xx:GPIO configuration for 8bit/16bit data from module to CSI | + | csi_d0 = xx to csi_d15 = xx:GPIO configuration for 8bit/16bit data from module to CSI |
- | csi_reset = xx:GPIO configuration for module reset | + | csi_reset = xx:GPIO configuration for module reset |
- | csi_power_en = xx:GPIO configuration for module power, high active by default | + | csi_power_en = xx:GPIO configuration for module power, high active by default |
- | csi_stby = xx:GPIO configuration for module standby | + | csi_stby = xx:GPIO configuration for module standby |
- | csi_af_en = xx:GPIO configuration for module AF power | + | csi_af_en = xx:GPIO configuration for module AF power |
The details configuration: | The details configuration: | ||
- | [csi1_para] | + | [csi1_para] |
- | csi_used = 1 | + | csi_used = 1 |
- | csi_mode = 0 | + | csi_mode = 0 |
- | csi_dev_qty = 1 | + | csi_dev_qty = 1 |
- | csi_stby_mode = 0 | + | csi_stby_mode = 0 |
- | csi_mname = "ov7670" | + | csi_mname = "ov7670" |
- | csi_twi_id = 1 | + | csi_twi_id = 1 |
- | csi_twi_addr = 0x42 | + | csi_twi_addr = 0x42 |
- | csi_if = 0 | + | csi_if = 0 |
- | csi_vflip = 1 | + | csi_vflip = 1 |
- | csi_hflip = 0 | + | csi_hflip = 0 |
- | csi_iovdd = "" | + | csi_iovdd = "" |
- | csi_avdd = "" | + | csi_avdd = "" |
- | csi_dvdd = "" | + | csi_dvdd = "" |
- | csi_flash_pol = 1 | + | csi_flash_pol = 1 |
- | csi_mname_b = "" | + | csi_mname_b = "" |
- | csi_twi_id_b = 0 | + | csi_twi_id_b = 0 |
- | csi_twi_addr_b = 0x78 | + | csi_twi_addr_b = 0x78 |
- | csi_if_b = 0 | + | csi_if_b = 0 |
- | csi_vflip_b = 1 | + | csi_vflip_b = 1 |
- | csi_hflip_b = 0 | + | csi_hflip_b = 0 |
- | csi_iovdd_b = "" | + | csi_iovdd_b = "" |
- | csi_avdd_b = "" | + | csi_avdd_b = "" |
- | csi_dvdd_b = "" | + | csi_dvdd_b = "" |
- | csi_flash_pol_b = 1 | + | csi_flash_pol_b = 1 |
- | csi_pck = port:PG00<3><default><default><default> | + | csi_pck = port:PG00<3><default><default><default> |
- | csi_ck = port:PG01<3><default><default><default> | + | csi_ck = port:PG01<3><default><default><default> |
- | csi_hsync = port:PG02<3><default><default><default> | + | csi_hsync = port:PG02<3><default><default><default> |
- | csi_vsync = port:PG03<3><default><default><default> | + | csi_vsync = port:PG03<3><default><default><default> |
- | csi_field = | + | csi_field = |
- | csi_d0 = port:PG04<3><default><default><default> | + | csi_d0 = port:PG04<3><default><default><default> |
- | csi_d1 = port:PG05<3><default><default><default> | + | csi_d1 = port:PG05<3><default><default><default> |
- | csi_d2 = port:PG06<3><default><default><default> | + | csi_d2 = port:PG06<3><default><default><default> |
- | csi_d3 = port:PG07<3><default><default><default> | + | csi_d3 = port:PG07<3><default><default><default> |
- | csi_d4 = port:PG08<3><default><default><default> | + | csi_d4 = port:PG08<3><default><default><default> |
- | csi_d5 = port:PG09<3><default><default><default> | + | csi_d5 = port:PG09<3><default><default><default> |
- | csi_d6 = port:PG10<3><default><default><default> | + | csi_d6 = port:PG10<3><default><default><default> |
- | csi_d7 = port:PG11<3><default><default><default> | + | csi_d7 = port:PG11<3><default><default><default> |
- | csi_d8 = | + | csi_d8 = |
- | csi_d9 = | + | csi_d9 = |
- | csi_d10 = | + | csi_d10 = |
- | csi_d11 = | + | csi_d11 = |
- | csi_d12 = | + | csi_d12 = |
- | csi_d13 = | + | csi_d13 = |
- | csi_d14 = | + | csi_d14 = |
- | csi_d15 = | + | csi_d15 = |
- | csi_d16 = | + | csi_d16 = |
- | csi_d17 = | + | csi_d17 = |
- | csi_d18 = | + | csi_d18 = |
- | csi_d19 = | + | csi_d19 = |
- | csi_d20 = | + | csi_d20 = |
- | csi_d21 = | + | csi_d21 = |
- | csi_d22 = | + | csi_d22 = |
- | csi_d23 = | + | csi_d23 = |
- | csi_reset = port:PH14<1><default><default><0> | + | csi_reset = port:PH14<1><default><default><0> |
- | csi_power_en = | + | csi_power_en = |
- | csi_stby = port:PH17<1><default><default><0> | + | csi_stby = port:PH17<1><default><default><0> |
- | csi_flash = | + | csi_flash = |
- | csi_af_en = | + | csi_af_en = |
- | csi_reset_b = | + | csi_reset_b = |
- | csi_power_en_b = | + | csi_power_en_b = |
- | csi_stby_b = | + | csi_stby_b = |
- | csi_flash_b = | + | csi_flash_b = |
- | csi_af_en_b = | + | csi_af_en_b = |
- | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document <4. Prepare for Kernel and Drivers Porting>) | + | Then convert it into script.bin format by using fex2bin, and replace the earlier script.bin on the board. (for more info, refer to the document [[tutorials:DVK521:Documentations:Prepare for Kernel and Drivers Porting|Prepare for Kernel and Drivers Porting]] |
Connect the OV7670 camera module and the LCD to the board, reboot the system. | Connect the OV7670 camera module and the LCD to the board, reboot the system. | ||
+ | |||
Now you can start to try the camera API demo (refer to Appendix 2 "Running API Demo"). | Now you can start to try the camera API demo (refer to Appendix 2 "Running API Demo"). | ||
- | Appendix 1: Compiling Driver Module | + | ==== Appendix 1: Compiling Driver Module ==== |
- | The provided xx.ko files under DVD_DVK521_CN\相关源码\驱动及API源码\驱动源码\ is compiled to run on our system image only. | + | The provided xx.ko files under [[http://dl.cubieboard.org/parteners/waveshare/Source_Code/Driver%20and%20API/Driver/|Driver]] is compiled to run on our system image only. |
If the drivers are going to being loaded on your own system, they need to be re-compiled according to you system kernel path. | If the drivers are going to being loaded on your own system, they need to be re-compiled according to you system kernel path. | ||
- | Use the io_control_dev.ko for demonstration. The source code can be found on DVD_DVK521_CN\相关源码\驱动及API源码\驱动源码\io_control_de. | + | |
- | 1.1 Copy the source code to ubuntu, assume the target directory is /home/waveshare/cubieboard/waveshare_demo/driver . | + | Use the io_control_dev.ko for demonstration. |
+ | |||
+ | 1.1 Copy the [[http://dl.cubieboard.org/parteners/waveshare/Source_Code/Driver%20and%20API/Driver/|io_control_dev]] to ubuntu, assume the target directory is /home/waveshare/cubieboard/waveshare_demo/driver . | ||
Modify the files permission: | Modify the files permission: | ||
- | #cd /home/waveshare/cubieboard/waveshare_demo/driver/io_control_dev | + | #cd /home/waveshare/cubieboard/waveshare_demo/driver/io_control_dev |
- | + | {{.:Documentations-6_2.jpg}} | |
- | #chmod 777 ./* | + | #chmod 777 ./* |
+ | | ||
1.2 Modify the Makefile | 1.2 Modify the Makefile | ||
- | #vi Makefile | + | #vi Makefile |
- | + | {{.:Documentations-6_3.jpg}} | |
Assign the KERNELDIR according to your actual kernel path. | Assign the KERNELDIR according to your actual kernel path. | ||
+ | |||
1.3 Clear the old files | 1.3 Clear the old files | ||
- | #make clean | + | #make clean |
- | + | {{.:Documentations-6_4.jpg}} | |
1.4 Compile | 1.4 Compile | ||
- | #make | + | #make |
+ | | ||
An error might occur while compiling: | An error might occur while compiling: | ||
- | io_control.c:1:23: fatal error: linux/init.h: No such file or directory | + | io_control.c:1:23: fatal error: linux/init.h: No such file or directory |
- | compilation terminated. | + | compilation terminated. |
- | make: *** [modules] Error 1 | + | make: *** [modules] Error 1 |
As shown in the picture below: | As shown in the picture below: | ||
- | + | {{.:Documentations-6_5.jpg}} | |
It is caused by the different kernel version, can be just omitted. | It is caused by the different kernel version, can be just omitted. | ||
- | + | {{.:Documentations-6_6.jpg}} | |
- | + | ||
Copy the new generated io_control.ko file to your own system and load it. | Copy the new generated io_control.ko file to your own system and load it. | ||
- | Appendix 2 "Running API Demo" | + | ==== Appendix 2 "Running API Demo" ==== |
When the driver has been loaded, you can start to try the API demo. | When the driver has been loaded, you can start to try the API demo. | ||
+ | |||
Copy the API source code to your ubuntu, and modify the files permission: | Copy the API source code to your ubuntu, and modify the files permission: | ||
- | #chmod 777 ./* | + | #chmod 777 ./* |
Execute the following command to compile: | Execute the following command to compile: | ||
- | #make | + | #make |
Then copy the executable file to the board, say, "test_led", use the following command to run it: | Then copy the executable file to the board, say, "test_led", use the following command to run it: | ||
- | #./ test_led | + | #./ test_led |