Differences
This shows you the differences between the selected revision and the current version of the page.
| dns-320 2013/11/12 14:54 | dns-320 2021/01/06 20:56 current | ||
|---|---|---|---|
| Line 47: | Line 47: | ||
| </code> | </code> | ||
| \\ | \\ | ||
| + | |||
| Line 53: | Line 54: | ||
| ===== Serial PIN Layout ===== | ===== Serial PIN Layout ===== | ||
| - | BusyBox break-in code is still 5784468 | + | BusyBox break-in code is 5784468 for Firmware before v2.03. Starting with v2.03 it is set by the ui [http://forums.dlink.com/index.php?topic=42483.msg149905#msg149905]. |
| Jumper: JP3\\ | Jumper: JP3\\ | ||
| Line 629: | Line 630: | ||
| \\ | \\ | ||
| \\ | \\ | ||
| + | |||
| + | |||
| ===== Setting up Debian in chrooted enviroment ===== | ===== Setting up Debian in chrooted enviroment ===== | ||
| - | D-Link has recently put a prebuilt Debian Squeeze package on their [[ftp://ftp.dlink.pl/dns/dns-320/driver_software/DNS-320%26325_linuxDebian_revA_Squeeze_all_en_20110111.zip|ftp]] site. The package size is approximately 150 MB. Read the instruction inside. You may have to modify ''--bind'' (dash-dash-bind) to ''--rbind'' (dash-dash-rbind) for the ''/proc'' (and possibly ''/dev'') mounts in fun_plug.debian to get some usb devices (e.g. the DS9490R USB-1wire adapter) to work properly in squeeze. | + | D-Link put a prebuilt Debian Squeeze package on their [[ftp://ftp.dlink.pl/dns/dns-320/driver_software/DNS-320%26325_linuxDebian_revA_Squeeze_all_en_20110111.zip|ftp]] site, in 2011. The package size is approximately 150 MB. Read the instruction inside. You may have to modify ''--bind'' (dash-dash-bind) to ''--rbind'' (dash-dash-rbind) for the ''/proc'' (and possibly ''/dev'') mounts in fun_plug.debian to get some usb devices (e.g. the DS9490R USB-1wire adapter) to work properly in squeeze. |
| + | |||
| + | The prebuilt Debian Squeeze package is NO LONGER available through the D-Link FTP, as of july 2014, but a backup is listed on this [[https://code.google.com/archive/p/funplug-dns320-dns325/downloads|Google Code]] page. | ||
| ===== Source code for firmware ==== | ===== Source code for firmware ==== | ||
| Line 704: | Line 709: | ||
| <code> source build_fw </code> | <code> source build_fw </code> | ||
| this will result in a file "DNS320-firmware" in the merge folder, which can be flashed to the unit via the webinterface (firmware update). | this will result in a file "DNS320-firmware" in the merge folder, which can be flashed to the unit via the webinterface (firmware update). | ||
| - | Right now the build_fw script does not do a full rebuild of the complete firmware, it rather puts together precompiled binaries that come with the built environment. [[http://forum.dsmg600.info/viewtopic.php?pid=41860#p41860|Here]] is an attempt at rebuilding the build script. [[http://curvedbrain.org/2008/06/09/building-firmware-binary-image-d-link-dns-323/|This]] blog post describes how to assemble a firmware image for the [[http://wiki.dns323.info/start|DNS-323]] and will probably helpful for the DNS-320 as well. | + | Right now the build_fw script does not do a full rebuild of the complete firmware, it rather puts together precompiled binaries that come with the built environment. [[http://dns323.kood.org/forum/viewtopic.php?pid=41860#p41860|Here]] is an attempt at rebuilding the build script. [[http://curvedbrain.org/2008/06/09/building-firmware-binary-image-d-link-dns-323/|This]] blog post describes how to assemble a firmware image for the [[http://wiki.dns323.info/start|DNS-323]] and will probably helpful for the DNS-320 as well. |
| Use this custom build_fw to make a custom settings for the kernel | Use this custom build_fw to make a custom settings for the kernel | ||
| Line 989: | Line 994: | ||
| if (extract_frimware) | if (extract_frimware) | ||
| { | { | ||
| - | firmware_unpack_extract(flashfilename, configfilename, dnsHeader.DefaultOffset, dnsHeader.D | + | firmware_unpack_extract(flashfilename, configfilename, dnsHeader.DefaultOffset, dnsHeader.DefaultLenght); |
| - | code ]; then | + | |
| - | tar -xzf linux-2.6.22.18.tgz | + | |
| - | fi | + | |
| - | + | ||
| - | # config our kernel and build it | + | |
| - | cd ./linux-2.6.22.18 | + | |
| - | sh cv.sh | + | |
| - | make c | + | |
| - | ====== DNS-320 ====== | + | |
| - | This page will share some more information about the [[http://www.dlink.co.uk/cs/Satellite?c=Product_C ]; then | + | |
| - | mv merge/uImage merge/uI, mage.org | + | |
| - | fi | + | |
| - | + | ||
| - | if [ -f dns320flash -x dlink320firmware -o kernel ramdisk image config\nDNS323D1Ulean | + | |
| - | make menuconfig | + | |
| - | make | + | |
| - | make modules | + | |
| - | make uImage | + | |
| - | cd ../ | + | |
| - | + | ||
| - | # Dlink run merge now | + | |
| - | if [ ! -d uRamDiskefaultLenght); | + | |
| printf("Default Checksum file : %08x\n\n",calc_checksum(configfilename)); | printf("Default Checksum file : %08x\n\n",calc_checksum(configfilename)); | ||
| } | } | ||
| else | else | ||
| - | { printf("\/coden"); } | + | { printf("\n"); } |
| Line 1300: | Line 1283: | ||
| ===== Other info ===== | ===== Other info ===== | ||
| - | The following [[http://forum.dsmg600.info/viewtopic.php?id=6094|thread]] handles some DNS-320 initial conversation, request there if you want some specific info here, or add yourself. | + | The following [[http://dns323.kood.org/forum/viewtopic.php?id=6094|thread]] handles some DNS-320 initial conversation, request there if you want some specific info here, or add yourself. |
| Line 1330: | Line 1313: | ||
| or <code>killall fan_control</code>, and run <code>FT_testing -S</code>/code | or <code>killall fan_control</code>, and run <code>FT_testing -S</code>/code | ||
| + | |||
| Line 1368: | Line 1352: | ||
| Connect: ''ssh root@dns_ip'' | Connect: ''ssh root@dns_ip'' | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Detect USB button pressure ===== | ||
| + | I wanted to replace the 8 seconds pressure on the power button by a simple pressure on the usb button. | ||
| + | So, i've analysed the chk_io program while it seemed to be the one which does the job for the usb copy. | ||
| + | The chk_io is not gpl, so only the binary is available. I used strace and LD_PRELOAD on ioctl to analyse it, | ||
| + | and finally found a similar program for the dns-323. | ||
| + | |||
| + | I'm not sure it's required to open /dev/REG each time, but it's what the official program does. | ||
| + | Idem for the open attributes. | ||
| + | |||
| + | I've created : | ||
| + | |||
| + | * ffp/extra/shutdown/chkbutton (gcc -static -s chkbutton.c -o chkbutton) | ||
| + | |||
| + | * /ffp/extra/shutdown/shutdown_ffp.sh | ||
| + | |||
| + | * /ffp/extra/shutdown/usbOff.sh | ||
| + | |||
| + | * /ffp/etc/fun_plug.local | ||
| + | |||
| + | Just copy these files or feel free to modify them. | ||
| + | |||
| + | Files are available here : http://nadenislamarre.free.fr/dns320 | ||
| + | |||
| + | <code> | ||
| + | # chkbutton.c | ||
| + | |||
| + | #define _GNU_SOURCE 1 | ||
| + | #include <stdio.h> | ||
| + | #include <stdlib.h> | ||
| + | #include <fcntl.h> | ||
| + | |||
| + | #define DEVICE "/dev/REG" | ||
| + | #define REQUEST 0x65 | ||
| + | #define REGISTER 0x10110 | ||
| + | #define BTN_NOTUSB 0x08000000 | ||
| + | |||
| + | int main (int argc, char *argv[]) { | ||
| + | int fd; | ||
| + | unsigned long data[2]; | ||
| + | |||
| + | while(1) { | ||
| + | if ((fd = open (DEVICE, O_RDWR|O_LARGEFILE)) == -1) { | ||
| + | exit(1); | ||
| + | } | ||
| + | |||
| + | data[0] = REGISTER; | ||
| + | data[1] = 0; | ||
| + | |||
| + | if(ioctl(fd, REQUEST, &data) == 0) { | ||
| + | if(! ((data[1] & BTN_NOTUSB) == BTN_NOTUSB)) { | ||
| + | printf("USB\n"); | ||
| + | fflush(stdout); | ||
| + | usleep(1000 * 1000 * 3); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | close(fd); | ||
| + | usleep(1000*30); | ||
| + | } | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | The following script called in the /ffp/etc/fun_plug.local make the dns-320 reboot just by pressing on the usb button. | ||
| + | The redirection to /dev/null is required because the shutdown.sh script kill processes on some conditions. | ||
| + | |||
| + | <code> | ||
| + | #!/bin/sh | ||
| + | |||
| + | # /ffp/extra/shutdown/usbOff.sh | ||
| + | |||
| + | export PATH=$PATH:/bin:/sbin | ||
| + | |||
| + | chkbutton | | ||
| + | while read BTN | ||
| + | do | ||
| + | if test "$BTN" = "USB" | ||
| + | then | ||
| + | led usb blue blinking | ||
| + | shutdown_ffp.sh >/dev/null 2>/dev/null | ||
| + | exit 0 | ||
| + | fi | ||
| + | done | ||
| + | </code> | ||
| + | |||
| + | <code> | ||
| + | #!/bin/sh | ||
| + | |||
| + | # /ffp/etc/fun_plug.local | ||
| + | |||
| + | # replacement for shutdown ; must not be on a mounted device | ||
| + | cp /ffp/extra/shutdown/* /sbin | ||
| + | usbOff.sh& | ||
| + | </code> | ||
| + | |||
| + | The shutdown script is the same as the official one except that i've added a proper shutdown for ffp : /ffp/etc/rc stop | ||
| + | |||
| + | <code> | ||
| + | #!/bin/sh | ||
| + | |||
| + | # /ffp/extra/shutdown/shutdown_ffp.sh | ||
| + | |||
| + | source /usr/local/modules/files/project_features | ||
| + | |||
| + | /ffp/etc/rc stop | ||
| + | |||
| + | kill_running_process | ||
| + | #kill -9 -1 | ||
| + | |||
| + | # remove link file | ||
| + | rm /usr/local/upload | ||
| + | sync | ||
| + | |||
| + | umount_dev.sh all | ||
| + | |||
| + | umount /usr/local/config | ||
| + | |||
| + | sleep 1 | ||
| + | # shutdown device | ||
| + | |||
| + | MODEL=$(cat "/usr/local/modules/files/model") | ||
| + | echo "MODEL:$MODEL" | ||
| + | |||
| + | if [ "$PROJECT_FEATURE_MCU_CHIP_WT693P" = "1" ]; then | ||
| + | echo "device shutdown" | ||
| + | up_send_ctl DeviceShutdown 0 | ||
| + | |||
| + | elif [ "$PROJECT_FEATURE_MCU_CHIP_69P803" = "1" ]; then | ||
| + | echo "send cmd to micro-p to shutdown" | ||
| + | up_send_ctl DeviceShutdown 1 | ||
| + | else | ||
| + | poweroff | ||
| + | fi | ||
| + | </code> | ||
| + | |||
| + | |||