วันจันทร์ที่ 6 กันยายน พ.ศ. 2564

cramfs modify

1. Mount the cramfs file system image as a loop device. This will be read-only image.

sudo mount -t cramfs -o loop /tftpboot/img-dnp9200 /media/cramfs/

2. Create a new directory (e.g $HOME/initrd-new) which will be used for modifying the image (RW mode)

3. Go to the mounted cramfs image directory and get the list of files using the following command

    find / > /tmp/filelist.txt

4. Use cpio to copy the contents from the mounted directory to the new directory

    cat /tmp/filelist.txt | cpio -pdm /$HOME/initrd-new

5. modify the contents in the new directory as required.

6. Once the changes are done, use mkcramfs to create the cramfs image again.

    mkcramfs /tmp/new-initrd new-initrd

วันอาทิตย์ที่ 5 กันยายน พ.ศ. 2564

Modify Rootfs ของกล้อง Dahua (Imou) DH-IPC-C12P

 


เราสามารถแก้ไข rootfs ของกล้อง ip รุ่นนี้ได้โดยการ unpack -> แก้ไข -> repack -> สร้างไฟล์ .img คำสั่งที่ใช้มีดังนี้

1. unpack squashfs

sun89@TOT-Log-Server:~/Dahua IPC$ unsquashfs -d c12_rootfs_ori c12_rootfs.bin


2. เราจะได้ directory  c12_rootfs_ori หลังจากแก้ไขเสร็จให้ repack squashfs

sun89@TOT-Log-Server:~/Dahua IPC$ mksquashfs c12_rootfs_ori c12_rootfs_mod1.bin -comp xz -Xdict-size 131072 -Xbcj arm -b 131072


3. สร้างไฟล์  c12_rootfs_mod1.bin romfs-x.squashfs.img เพื่อใช้ในการ upgrade ผ่าน micro sd-card

sun89@TOT-Log-Server:~/Dahua IPC$ mkimage -A arm -O linux -T standalone -C gzip -a 0x270000 -e 0x840000 -n romfs-by-sun -d c12_rootfs_mod1.bin romfs-x.squashfs.img


 4. Upgrade ผ่านทาง micro sd-card 

  • copy ไฟล์  romfs-x.squashfs.img ใส่ใน sd-card
  • ถอดปลั้กกล้องวงจรปิด
  • เสียบ sd-card
  • กดปุ่ม reset/wps ค้างไว้พร้อมกับเสียบไฟเข้ากล้อง อย่าเพิ่มปล่อยมือ!
  • รอไฟสถานะกล้องกระพริบเป็นสีเขียวสลับแดงแล้วถึงจะปล่อยมือ
  • เสร็จ. 

โปรแกรม set baudrate ให้ TTYS0 สำหรับ embeded-devices ที่ไม่มี stty, screen

 

เป็น code แบบง่ายๆ ได้มาจาก stackoverflow


#include <stdio.h>

#include <fcntl.h>

//#include <asm/termbits.h>

#include <termios.h>

int main() {


        struct termios ttycfg;

        int            fd;


        printf("Simple terminal TTYS0 baudrate change to 115200\n");

        fd = open ("/dev/ttyS0", O_RDWR | O_NOCTTY);

        if (fd < 0) {

                printf("Error opening TTY /dev/ttyS0 \n");

                return -1;

        }


        if (tcgetattr (fd, &ttycfg) < 0) {

                printf("Error from tcgetattr\n");

                return -1;

        }



        cfsetspeed (&ttycfg, B115200);


        if (tcsetattr(fd, TCSANOW, &ttycfg) != 0) {

                printf("Error from tcsetattr\n");

                return -1;

        }


        printf("Success set baud\n");

        return 0;

}


ผม cross-compile จากคอม x86 ไปเป็นโปรแกรมของ arm โดยใช้คำสั่ง

/home/sun89/cross/OpenWrt-Toolchain-kirkwood-for-arm_xscale-gcc-4.8-linaro_uClibc-0.9.33.2_eabi/toolchain-arm_xscale_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-uclibcgnueabi-g++ setbaud.c -o setbaud -O0 -Wall