Hello cam,
I managed to get the camera module ov3640 working with the NanoPi M1 and OrangePi PC+ on armbian with Ubuntu xenial (3.4.113). A driver for the ov3640 is missing there, so I used a driver for the ov5640 with some modifications.
In addition, I had to change a section [csi0] in the /boot/script.bin (it's a symbolic link) file. You can convert the linked BIN file (probably /boot/bin/nanopiair.bin) to readable FEX file by command bin2fex. You can edit the FEX file and convert it back to BIN file by command fex2bin. For more information just visit http://linux-sunxi.org/Fex_Guide
In the section csi_gpio_configuration of that page you can see something like this:
[csi0]
vip_used = 1
vip_mode = 0
vip_dev_qty = 1
vip_define_sensor_list = 0
vip_csi_pck = port:PE00<2><default><default><default>
vip_csi_mck = port:PE01<2><default><default><default>
vip_csi_hsync = port:PE02<2><default><default><default>
vip_csi_vsync = port:PE03<2><default><default><default>
vip_csi_d0 = port:PE04<2><default><default><default>
vip_csi_d1 = port:PE05<2><default><default><default>
vip_csi_d2 = port:PE06<2><default><default><default>
vip_csi_d3 = port:PE07<2><default><default><default>
vip_csi_d4 = port:PE08<2><default><default><default>
vip_csi_d5 = port:PE09<2><default><default><default>
vip_csi_d6 = port:PE10<2><default><default><default>
vip_csi_d7 = port:PE11<2><default><default><default>
vip_csi_sck = port:PE12<2><default><default><default>
vip_csi_sda = port:PE13<2><default><default><default>
vip_dev0_mname = "ov3640"
vip_dev0_pos = "front"
vip_dev0_lane = 1
vip_dev0_twi_id = 2
vip_dev0_twi_addr = 120
vip_dev0_isp_used = 0
vip_dev0_fmt = 0
vip_dev0_stby_mode = 0
vip_dev0_vflip = 1
vip_dev0_hflip = 0
vip_dev0_iovdd = ""
vip_dev0_iovdd_vol = 2800000
vip_dev0_avdd = ""
vip_dev0_avdd_vol = 2800000
vip_dev0_dvdd = ""
vip_dev0_dvdd_vol = 1800000
vip_dev0_afvdd = ""
vip_dev0_afvdd_vol = 2800000
vip_dev0_power_en = port:PA17<1><default><default><1>
vip_dev0_reset = port:PE14<1><default><default><1>
vip_dev0_pwdn = port:PE15<1><default><default><0>
vip_dev0_flash_en =
vip_dev0_flash_mode =
vip_dev0_af_pwdn =
vip_dev0_act_used = 0
vip_dev0_act_name = "ad5820_act"
vip_dev0_act_slave = 24
This is a configuration for the CSI interface. Note the important properties:
vip_dev0_mname - kernel module name, in my case it is ov3640. You should set it to ov5640.
vip_dev0_twi_addr - I2C (TWI) address of your I2C device. For the OV5640 it is 0x78 but must be set in decimals which is 120.
Everything else should be left as it was.
After changing the FEX file you have to convert it back to the BIN file and store it at the same location as before. Then reboot is needed.
Afterwards, you need to load the modules:
# modprobe ov5640 vfe_v4l2
Also you can check system logs to see more information:
# dmesg
Hopefully, I helped you
Good luck!