tl; dr: ನಾನು ಪ್ರೋಗ್ರಾಂನಲ್ಲಿ ARM ಕಂಪ್ಯೂಟರ್ಗಾಗಿ Kali Linux ಚಿತ್ರವನ್ನು ನಿರ್ಮಿಸುತ್ತಿದ್ದೇನೆ debootstrap
, linux
и u-boot
.
ನೀವು ಕೆಲವು ಜನಪ್ರಿಯವಲ್ಲದ ಸಿಂಗಲ್-ಬೋರ್ಡ್ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ಖರೀದಿಸಿದರೆ, ಅದಕ್ಕೆ ನಿಮ್ಮ ನೆಚ್ಚಿನ ವಿತರಣೆಯ ಚಿತ್ರದ ಕೊರತೆಯನ್ನು ನೀವು ಎದುರಿಸಬಹುದು. ಸರಿಸುಮಾರು ಅದೇ ವಿಷಯ ಸಂಭವಿಸಿದೆ
ಡೌನ್ಲೋಡ್ ಪ್ರಕ್ರಿಯೆಯು ತುಂಬಾ ಸರಳವಾಗಿದೆ:
- ಯಂತ್ರಾಂಶವನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗಿದೆ.
- ಶೇಖರಣಾ ಸಾಧನದಲ್ಲಿನ ಕೆಲವು ಪ್ರದೇಶದಿಂದ (SD ಕಾರ್ಡ್/eMMC/ಇತ್ಯಾದಿ) ಬೂಟ್ಲೋಡರ್ ಅನ್ನು ಓದಲಾಗುತ್ತದೆ ಮತ್ತು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ.
- ಬೂಟ್ಲೋಡರ್ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ ಕರ್ನಲ್ ಅನ್ನು ಹುಡುಕುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಕೆಲವು ಮೆಮೊರಿ ಪ್ರದೇಶಕ್ಕೆ ಲೋಡ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ.
- ಕರ್ನಲ್ ಉಳಿದ OS ಅನ್ನು ಲೋಡ್ ಮಾಡುತ್ತದೆ.
ನನ್ನ ಕಾರ್ಯಕ್ಕೆ ಈ ಮಟ್ಟದ ವಿವರ ಸಾಕು, ನೀವು ವಿವರಗಳನ್ನು ಓದಬಹುದು
ರೂಟ್ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ನಿರ್ಮಿಸುವುದು
ಮೊದಲು ನೀವು ವಿಭಾಗಗಳನ್ನು ಸಿದ್ಧಪಡಿಸಬೇಕು. ದಾಸ್ ಯು-ಬೂಟ್ ವಿಭಿನ್ನ ಫೈಲ್ ಸಿಸ್ಟಮ್ಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ, ನಾನು FAT32 ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದ್ದೇನೆ /boot
ಮತ್ತು ರೂಟ್ಗಾಗಿ ext3, ಇದು ARM ನಲ್ಲಿ ಕಾಲಿಗೆ ಪ್ರಮಾಣಿತ ಇಮೇಜ್ ಲೇಔಟ್ ಆಗಿದೆ. ನಾನು GNU Parted ಅನ್ನು ಬಳಸುತ್ತೇನೆ, ಆದರೆ ನೀವು ಅದನ್ನು ಹೆಚ್ಚು ಪರಿಚಿತ ರೀತಿಯಲ್ಲಿ ಮಾಡಬಹುದು fdisk
. ನಿಮಗೂ ಬೇಕಾಗುತ್ತದೆ dosfstools
и e2fsprogs
ಫೈಲ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ರಚಿಸಲು: apt install parted dosfstools e2fsprogs
.
ನಾವು SD ಕಾರ್ಡ್ ಅನ್ನು ಗುರುತಿಸುತ್ತೇವೆ:
- MBR ವಿಭಜನೆಯನ್ನು ಬಳಸುತ್ತಿರುವಂತೆ SD ಕಾರ್ಡ್ ಅನ್ನು ಗುರುತಿಸಿ:
parted -s /dev/mmcblk0 mklabel msdos
- ಅಡಿಯಲ್ಲಿ ವಿಭಾಗವನ್ನು ರಚಿಸಿ
/boot
128 ಮೆಗಾಬೈಟ್ಗಳಿಗೆ:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. ತಪ್ಪಿದ ಮೊದಲ ಮೆಗಾಬೈಟ್ ಅನ್ನು ಮಾರ್ಕ್ಅಪ್ಗಾಗಿ ಮತ್ತು ಬೂಟ್ಲೋಡರ್ಗಾಗಿ ಬಿಡಬೇಕು. - ಸಂಪೂರ್ಣ ಉಳಿದ ಸಾಮರ್ಥ್ಯಕ್ಕಾಗಿ ನಾವು ರೂಟ್ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- ಇದ್ದಕ್ಕಿದ್ದಂತೆ ನಿಮ್ಮ ವಿಭಜನಾ ಕಡತಗಳನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ ಅಥವಾ ಬದಲಾಗದಿದ್ದರೆ, ನೀವು `partprobe` ಅನ್ನು ರನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ, ನಂತರ ವಿಭಜನಾ ಕೋಷ್ಟಕವನ್ನು ಮರು-ಓದಲಾಗುತ್ತದೆ.
- ಲೇಬಲ್ನೊಂದಿಗೆ ಬೂಟ್ ವಿಭಾಗಕ್ಕಾಗಿ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ರಚಿಸಿ
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- ಲೇಬಲ್ನೊಂದಿಗೆ ರೂಟ್ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ರಚಿಸಿ
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
ಅದ್ಭುತವಾಗಿದೆ, ಈಗ ನೀವು ಅದನ್ನು ಭರ್ತಿ ಮಾಡಬಹುದು. ಇದಕ್ಕಾಗಿ ನಿಮಗೆ ಹೆಚ್ಚುವರಿಯಾಗಿ ಅಗತ್ಯವಿರುತ್ತದೆ debootstrap
, ಡೆಬಿಯನ್-ರೀತಿಯ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ಗಳಿಗಾಗಿ ರೂಟ್ ಫೈಲ್ ಸಿಸ್ಟಮ್ಗಳನ್ನು ರಚಿಸಲು ಒಂದು ಉಪಯುಕ್ತತೆ: apt install debootstrap
.
ನಾವು ಎಫ್ಎಸ್ ಅನ್ನು ಸಂಗ್ರಹಿಸುತ್ತೇವೆ:
- ವಿಭಾಗವನ್ನು ಆರೋಹಿಸಿ
/mnt/
(ಹೆಚ್ಚು ಅನುಕೂಲಕರ ಮೌಂಟ್ ಪಾಯಿಂಟ್ ಬಳಸಿ):mount /dev/mmcblk0p2 /mnt
- ನಾವು ನಿಜವಾಗಿಯೂ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ಭರ್ತಿ ಮಾಡುತ್ತೇವೆ:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
. ಪ್ಯಾರಾಮೀಟರ್--include
ಕೆಲವು ಪ್ಯಾಕೇಜುಗಳನ್ನು ಹೆಚ್ಚುವರಿಯಾಗಿ ಸ್ಥಾಪಿಸಲು ಸೂಚಿಸುತ್ತದೆ, ನಾನು ಸ್ಥಿರವಾಗಿ ನಿರ್ಮಿಸಲಾದ QEMU ಎಮ್ಯುಲೇಟರ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ್ದೇನೆ. ಇದು ನಿಮಗೆ ನಿರ್ವಹಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆchroot
ARM ಪರಿಸರದಲ್ಲಿ. ಉಳಿದ ಆಯ್ಕೆಗಳ ಅರ್ಥವನ್ನು ಕಾಣಬಹುದುman debootstrap
. ಪ್ರತಿ ARM ಬೋರ್ಡ್ ವಾಸ್ತುಶಿಲ್ಪವನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ ಎಂಬುದನ್ನು ಮರೆಯಬೇಡಿarmhf
. - ವಾಸ್ತುಶಿಲ್ಪದಲ್ಲಿನ ವ್ಯತ್ಯಾಸದಿಂದಾಗಿ
debootstrap
ಇದನ್ನು ಎರಡು ಹಂತಗಳಲ್ಲಿ ನಡೆಸಲಾಗುತ್ತದೆ, ಎರಡನೆಯದನ್ನು ಈ ರೀತಿ ನಡೆಸಲಾಗುತ್ತದೆ:chroot /mnt/ /debootstrap/debootstrap --second-stage
- ಈಗ ನೀವು ಅದನ್ನು ತಿರುಗಿಸಬೇಕಾಗಿದೆ:
chroot /mnt /bin/bash
- ನಾವು ಭರ್ತಿ ಮಾಡುತ್ತೇವೆ
/etc/hosts
и/etc/hostname
ಗುರಿ FS. ನಿಮ್ಮ ಸ್ಥಳೀಯ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿರುವ ವಿಷಯದಂತೆಯೇ ಭರ್ತಿ ಮಾಡಿ, ಹೋಸ್ಟ್ ಹೆಸರನ್ನು ಬದಲಿಸಲು ಮರೆಯದಿರಿ. - ನೀವು ಎಲ್ಲವನ್ನೂ ಕಸ್ಟಮೈಸ್ ಮಾಡಬಹುದು. ನಿರ್ದಿಷ್ಟವಾಗಿ, ನಾನು ಸ್ಥಾಪಿಸುತ್ತೇನೆ
locales
(ರೆಪೊಸಿಟರಿ ಕೀಗಳು), ಸ್ಥಳಗಳು ಮತ್ತು ಸಮಯ ವಲಯವನ್ನು ಮರುಸಂರಚಿಸಿ (dpkg-reconfigure locales tzdata
) ಆಜ್ಞೆಯೊಂದಿಗೆ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಹೊಂದಿಸಲು ಮರೆಯಬೇಡಿpasswd
. - ಪಾಸ್ವರ್ಡ್ ಹೊಂದಿಸಿ
root
ತಂಡpasswd
. - ನನಗೆ ಚಿತ್ರದ ತಯಾರಿಕೆಯು ತುಂಬುವುದರೊಂದಿಗೆ ಕೊನೆಗೊಳ್ಳುತ್ತದೆ
/etc/fstab
ಒಳಗೆ/mnt/
.
ಹಿಂದೆ ರಚಿಸಿದ ಟ್ಯಾಗ್ಗಳಿಗೆ ಅನುಗುಣವಾಗಿ ನಾನು ಅಪ್ಲೋಡ್ ಮಾಡುತ್ತೇನೆ, ಆದ್ದರಿಂದ ವಿಷಯವು ಈ ರೀತಿ ಇರುತ್ತದೆ:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot ಸ್ವಯಂ ಪೂರ್ವನಿಯೋಜಿತ 0 0
ಅಂತಿಮವಾಗಿ, ನೀವು ಬೂಟ್ ವಿಭಾಗವನ್ನು ಆರೋಹಿಸಬಹುದು, ನಮಗೆ ಇದು ಕರ್ನಲ್ಗಾಗಿ ಅಗತ್ಯವಿದೆ: `ಮೌಂಟ್ /dev/mmcblk0p1 /mnt/boot/`
ಲಿನಕ್ಸ್ ನಿರ್ಮಾಣ
ಡೆಬಿಯನ್ ಟೆಸ್ಟಿಂಗ್ನಲ್ಲಿ ಕರ್ನಲ್ (ಮತ್ತು ನಂತರ ಬೂಟ್ಲೋಡರ್) ನಿರ್ಮಿಸಲು, ಗುರಿಯ ಆರ್ಕಿಟೆಕ್ಚರ್ಗಾಗಿ ನೀವು GCC, GNU Make ಮತ್ತು GNU C ಲೈಬ್ರರಿ ಹೆಡರ್ ಫೈಲ್ಗಳ ಪ್ರಮಾಣಿತ ಸೆಟ್ ಅನ್ನು ಸ್ಥಾಪಿಸಬೇಕು (ನನಗೆ armhf
), ಹಾಗೆಯೇ OpenSSL ಹೆಡರ್ಗಳು, ಕನ್ಸೋಲ್ ಕ್ಯಾಲ್ಕುಲೇಟರ್ bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. ಡೀಫಾಲ್ಟ್ ಲೋಡರ್ ಫೈಲ್ ಅನ್ನು ಹುಡುಕುವುದರಿಂದ zImage
ಬೂಟ್ ವಿಭಾಗದ ಫೈಲ್ ಸಿಸ್ಟಂನಲ್ಲಿ, ಇದು ಫ್ಲಾಶ್ ಡ್ರೈವ್ ಅನ್ನು ವಿಭಜಿಸುವ ಸಮಯ.
- ಕರ್ನಲ್ ಅನ್ನು ಕ್ಲೋನ್ ಮಾಡಲು ತುಂಬಾ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ, ಹಾಗಾಗಿ ನಾನು ಡೌನ್ಲೋಡ್ ಮಾಡುತ್ತೇನೆ:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. ಅನ್ಪ್ಯಾಕ್ ಮಾಡೋಣ ಮತ್ತು ಮೂಲ ಡೈರೆಕ್ಟರಿಗೆ ಹೋಗೋಣ:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- ಸಂಕಲನದ ಮೊದಲು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. ಸಂರಚನೆಯು ಡೈರೆಕ್ಟರಿಯಲ್ಲಿದೆarch/arm/configs/
. ಯಾವುದೂ ಇಲ್ಲದಿದ್ದರೆ, ನೀವು ರೆಡಿಮೇಡ್ ಒಂದನ್ನು ಹುಡುಕಲು ಮತ್ತು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಬಹುದು ಮತ್ತು ಈ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಫೈಲ್ನ ಹೆಸರನ್ನು ಪ್ಯಾರಾಮೀಟರ್ ಆಗಿ ರವಾನಿಸಬಹುದುKBUILD_DEFCONFIG
. ಕೊನೆಯ ಉಪಾಯವಾಗಿ, ತಕ್ಷಣ ಮುಂದಿನ ಹಂತಕ್ಕೆ ತೆರಳಿ. - ಐಚ್ಛಿಕವಾಗಿ ನೀವು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತಿರುಚಬಹುದು:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- ಮತ್ತು ಚಿತ್ರವನ್ನು ಕ್ರಾಸ್-ಕಂಪೈಲ್ ಮಾಡಿ:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- ಈಗ ನೀವು ಕರ್ನಲ್ ಫೈಲ್ ಅನ್ನು ನಕಲಿಸಬಹುದು:
cp arch/arm/boot/zImage /mnt/boot/
- ಮತ್ತು DeviceTree ನಿಂದ ಫೈಲ್ಗಳು (ಬೋರ್ಡ್ನಲ್ಲಿರುವ ಹಾರ್ಡ್ವೇರ್ನ ವಿವರಣೆ):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- ಮತ್ತು ಪ್ರತ್ಯೇಕ ಫೈಲ್ಗಳ ರೂಪದಲ್ಲಿ ಸಂಗ್ರಹಿಸಿದ ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಸ್ಥಾಪಿಸಿ:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
ಕರ್ನಲ್ ಸಿದ್ಧವಾಗಿದೆ. ನೀವು ಎಲ್ಲವನ್ನೂ ಅನ್ಮೌಂಟ್ ಮಾಡಬಹುದು: umount /mnt/boot/ /mnt/
ದಾಸ್ ಯು-ಬೂಟ್
ಬೂಟ್ಲೋಡರ್ ಸಂವಾದಾತ್ಮಕವಾಗಿರುವುದರಿಂದ, ಅದರ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪರೀಕ್ಷಿಸಲು ನಿಮಗೆ ಬೇಕಾಗಿರುವುದು ಬೋರ್ಡ್, ಶೇಖರಣಾ ಸಾಧನ ಮತ್ತು ಐಚ್ಛಿಕವಾಗಿ USB-ಟು-UART ಸಾಧನ. ಅಂದರೆ, ನೀವು ಕರ್ನಲ್ ಮತ್ತು ಓಎಸ್ ಅನ್ನು ನಂತರ ಮುಂದೂಡಬಹುದು.
ಹೆಚ್ಚಿನ ತಯಾರಕರು ಆರಂಭಿಕ ಬೂಟ್ಗಾಗಿ ದಾಸ್ ಯು-ಬೂಟ್ ಅನ್ನು ಬಳಸಲು ಮುಂದಾಗುತ್ತಾರೆ. ಪೂರ್ಣ ಬೆಂಬಲವನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ತಮ್ಮದೇ ಆದ ಫೋರ್ಕ್ನಲ್ಲಿ ಒದಗಿಸಲಾಗುತ್ತದೆ, ಆದರೆ ಅವರು ಅಪ್ಸ್ಟ್ರೀಮ್ಗೆ ಕೊಡುಗೆ ನೀಡಲು ಮರೆಯುವುದಿಲ್ಲ. ನನ್ನ ಸಂದರ್ಭದಲ್ಲಿ, ಬೋರ್ಡ್ ಅನ್ನು ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆ
ಬೂಟ್ಲೋಡರ್ ಅನ್ನು ಸ್ವತಃ ಜೋಡಿಸೋಣ:
- ನಾವು ರೆಪೊಸಿಟರಿಯ ಸ್ಥಿರ ಶಾಖೆಯನ್ನು ಕ್ಲೋನ್ ಮಾಡುತ್ತೇವೆ:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- ಡೈರೆಕ್ಟರಿಗೆ ಸ್ವತಃ ಹೋಗೋಣ:
cd u-boot
- ನಿರ್ಮಾಣ ಸಂರಚನೆಯನ್ನು ಸಿದ್ಧಪಡಿಸುವುದು:
make mx6ull_14x14_evk_defconfig
. ಸಂರಚನೆಯು ದಾಸ್ ಯು-ಬೂಟ್ನಲ್ಲಿದ್ದರೆ ಮಾತ್ರ ಇದು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಇಲ್ಲದಿದ್ದರೆ ನೀವು ತಯಾರಕರ ಸಂರಚನೆಯನ್ನು ಕಂಡುಹಿಡಿಯಬೇಕು ಮತ್ತು ಅದನ್ನು ಫೈಲ್ನಲ್ಲಿ ರೆಪೊಸಿಟರಿಯ ಮೂಲದಲ್ಲಿ ಇರಿಸಬೇಕಾಗುತ್ತದೆ..config
, ಅಥವಾ ತಯಾರಕರು ಶಿಫಾರಸು ಮಾಡಿದ ಯಾವುದೇ ರೀತಿಯಲ್ಲಿ ಜೋಡಿಸಿ. - ಕ್ರಾಸ್-ಕಂಪೈಲರ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ನಾವು ಬೂಟ್ಲೋಡರ್ ಇಮೇಜ್ ಅನ್ನು ಸ್ವತಃ ಜೋಡಿಸುತ್ತೇವೆ
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
ಪರಿಣಾಮವಾಗಿ ನಾವು ಫೈಲ್ ಅನ್ನು ಪಡೆಯುತ್ತೇವೆ u-boot.imx
, ಇದು ಫ್ಲ್ಯಾಶ್ ಡ್ರೈವಿನಲ್ಲಿ ಬರೆಯಬಹುದಾದ ರೆಡಿಮೇಡ್ ಚಿತ್ರವಾಗಿದೆ. ನಾವು SD ಕಾರ್ಡ್ಗೆ ಬರೆಯುತ್ತೇವೆ, ಮೊದಲ 1024 ಬೈಟ್ಗಳನ್ನು ಬಿಟ್ಟುಬಿಡುತ್ತೇವೆ. ನಾನು ಟಾರ್ಗೆಟ್ ಅನ್ನು ಏಕೆ ಆರಿಸಿದೆ u-boot.imx
? ನಾನು ನಿಖರವಾಗಿ 1024 ಬೈಟ್ಗಳನ್ನು ಏಕೆ ಕಳೆದುಕೊಂಡೆ? ಇದನ್ನೇ ಅವರು ಮಾಡಲು ಪ್ರಸ್ತಾಪಿಸುತ್ತಾರೆ
ಮುಗಿದಿದೆ, ನೀವು ಬೂಟ್ ಮಾಡಬಹುದು. ಬೂಟ್ಲೋಡರ್ ತನ್ನದೇ ಆದ ಆವೃತ್ತಿಯನ್ನು ವರದಿ ಮಾಡಬೇಕು, ಬೋರ್ಡ್ ಬಗ್ಗೆ ಕೆಲವು ಮಾಹಿತಿಯನ್ನು, ಮತ್ತು ವಿಭಾಗದಲ್ಲಿ ಕರ್ನಲ್ ಇಮೇಜ್ ಅನ್ನು ಹುಡುಕಲು ಪ್ರಯತ್ನಿಸಬೇಕು. ವಿಫಲವಾದರೆ, ಅದು ನೆಟ್ವರ್ಕ್ ಮೂಲಕ ಬೂಟ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ, ಔಟ್ಪುಟ್ ಸಾಕಷ್ಟು ವಿವರವಾಗಿದೆ, ಸಮಸ್ಯೆಯಿದ್ದರೆ ನೀವು ದೋಷವನ್ನು ಕಂಡುಹಿಡಿಯಬಹುದು.
ಬದಲಿಗೆ ತೀರ್ಮಾನದ
ಡಾಲ್ಫಿನ್ನ ಹಣೆಯು ಎಲುಬಿನಲ್ಲ ಎಂದು ನಿಮಗೆ ತಿಳಿದಿದೆಯೇ? ಇದು ಅಕ್ಷರಶಃ ಮೂರನೇ ಕಣ್ಣು, ಎಖೋಲೇಷನ್ಗಾಗಿ ಕೊಬ್ಬಿನ ಮಸೂರ!
ಮೂಲ: www.habr.com