├── .gitignore ├── 16th-IPC.pptx ├── Airoha.md ├── Assembler.md ├── Bootloader.md ├── DBus.md ├── DDos.md ├── Docker.md ├── Econet.md ├── FAQ.md ├── GponDriver.md ├── Hardware.md ├── Hi_Boot.md ├── Hisi_G.hn.md ├── Hisilicon.md ├── Hisilicon_CM.md ├── Hisilicon_Data_Path.md ├── IPv6 Intro.md ├── Linux ├── CMake.md ├── Kernel_Makefiles.md ├── LinuxAssembly.md ├── LinuxDebugTrace.md ├── LinuxDeviceTree.md ├── LinuxNetBridge.md ├── Linux_DMA.md ├── Linux_Device_Driver_Model.md ├── Linux_FS.md ├── Linux_IPC.md ├── Linux_MTD.md ├── Linux_Memory.md ├── Linux_Netfilter.md ├── Linux_USB.md └── blog │ ├── img │ ├── figure-1-an-MTD-Device.jpg │ ├── figure-2-590x172.jpg │ ├── v.html │ └── v_files │ │ ├── 3.4047f394.chunk.js │ │ ├── 5.06912b29.chunk.js │ │ ├── application-95ae8966ec1e6021f2553c7d275217fcfecd5a7f0b206151.css │ │ ├── application_utilities-39f172dce42547024b826d13a4bb23456c20d0.css │ │ ├── commons-jira_connect_app-pages.admin.application_settings.gen.js │ │ ├── commons-pages.admin.subscriptions.show-pages.projects.blob.sh.js │ │ ├── commons-pages.groups.boards-pages.groups.details-pages.groups.js │ │ ├── commons-pages.groups.details-pages.groups.group_members-pages.js │ │ ├── commons-pages.projects-pages.projects.activity-pages.proj_002.js │ │ ├── commons-pages.projects-pages.projects.activity-pages.projects.js │ │ ├── commons-pages.projects.blob.show-pages.projects.show-page_002.js │ │ ├── commons-pages.projects.blob.show-pages.projects.show-page_003.js │ │ ├── commons-pages.projects.blob.show-pages.projects.show-pages.pr.js │ │ ├── commons-pages.projects.show-pages.projects.tree.show.12427560.js │ │ ├── graphql.9bf52f7d.chunk.js │ │ ├── hello.51beafac.chunk.js │ │ ├── main.b4bea26f.chunk.js │ │ ├── no_avatar-849f9c04a3a0d0cea2424ae97b27447dc64a7dbfae83c036c4.png │ │ ├── pages.projects.show.30ce14d3.chunk.js │ │ ├── project-38a8c86a0310bcde6b30d164eae97688d7eb4099b55bad30d3f5.css │ │ ├── runtime.186dd9c9.bundle.js │ │ ├── top_nav.12274f79.chunk.js │ │ ├── treeList.f1971991.chunk.js │ │ ├── vendors-globalSearch-top_nav.0c360a21.chunk.js │ │ ├── vendors-top_nav.c10918dd.chunk.js │ │ └── white-e81159510393367a7519484338aa4bd97232afc14fc67e9e74d82d.css │ └── working-with-mtd-devices.md ├── Makefile.md ├── MiscFlashProgrammer.md ├── OPAL.md ├── Paralle_NandFlash.md ├── Realtek.md ├── ReleasePDF ├── FPGA.md ├── HSAN_3.5_T12 SDK Instro.md ├── MultipleVendorsSetting.md ├── Realtek_FTTR_uboot_upgrade_sop.md ├── bob_cal.md ├── convert_jar_to_exe.md ├── core_dump_sop.md ├── opal_upgrade_sop.md ├── ubi_intro.md ├── wifi6_2_opal2.md ├── xtx_spi_dev.md └── 故障设备初筛指南.md ├── SPI_NandFlash.md ├── SPI_NorFlashDriver.md ├── Vim.md ├── WLAN.md ├── WorkDaily.md ├── WorkDaily_2022.md ├── WorkDaily_2023.md ├── WorkDaily_2024.md ├── ZTE.md ├── ZyClib_BSP_Porting.md ├── ZyXEL.md ├── i2c.md ├── img ├── 1547536861493.png ├── Raw_vs_FTL.bmp ├── SPIModes.jpg ├── add2line.png ├── airoha_procd_procedure.gif ├── airoha_sdk_files.png ├── airoha_serial_upgrade_1.bmp ├── airoha_serial_upgrade_2.bmp ├── airoha_serial_upgrade_3.bmp ├── anycast.png ├── atse_pwd.bmp ├── atsh.bmp ├── atub.bmp ├── atur.bmp ├── bob_config_default.bmp ├── boot_flag3.jpg ├── capture.bmp ├── ccc_overview.png ├── clipboard.png ├── cm_cfg_loading_priority.png ├── cmake-logo-16.png ├── cmcc_ac_power.png ├── cmcc_ip_addr.png ├── cmcc_network.png ├── cmcc_ping.png ├── cmcc_pon_status.png ├── cmcc_restore_default.png ├── cmcc_usb.png ├── cmcc_web_login.png ├── cmcc_web_login_url.png ├── cmcc_wifi_test.png ├── cmcc_wifi_test2.png ├── cmd_tools.jpg ├── cmd_tools_2.jpg ├── cms.png ├── compos_tcboot.png ├── container_images.bmp ├── core_solib_gdb2.bmp ├── core_solib_gdb3.bmp ├── core_solib_zcfg_be_error.bmp ├── core_zcmd_error1.bmp ├── core_zcmd_gdb1.bmp ├── core_zcmd_ggdb3.bmp ├── dbus_main_framework.png ├── debug_flag.bmp ├── debug_flag_0.bmp ├── dns_packet.jpg ├── dns_packet.png ├── dns_packet_2.jpg ├── dns_packet_info.jpg ├── docker_arch.bmp ├── docker_startup_process.png ├── ebtables.png ├── ecc_layout.bmp ├── ecnet_data_path_arch.png ├── ecnot_spec.png ├── econet_arch.bmp ├── econet_fw_upgrade.png ├── epon_capture.png ├── eui_64_mac_address.png ├── express_boot.bmp ├── eye_diagram.png ├── eye_diagram_2.jpg ├── eye_diagram_test_result.png ├── eye_diagram_test_result2.png ├── flash.png ├── flash_structure.png ├── fpga_bit_swapped.png ├── fpga_conf.bmp ├── fpga_files.bmp ├── fpga_init_startup.jpeg ├── fpga_init_startup_2.jpg ├── fpga_jtag_pin_des.png ├── fpga_master_sou.bmp ├── fpga_master_spi.bmp ├── fpga_master_spi_flash.bmp ├── fpga_olt_onu_com.bmp ├── fpga_olt_onu_data_st.bmp ├── fpga_olt_onu_sample.bmp ├── fpga_slave_select_map.bmp ├── fpga_slave_serial_hw.bmp ├── fpga_slave_serial_pin_desc.bmp ├── fs3.jpg ├── fs_matedata.png ├── fs_nand_ecc_config_0.png ├── fttr_arch.png ├── fttr_data_path.bmp ├── fttr_fpga.png ├── fttr_slave_select_map_timing.png ├── fw_files.bmp ├── gPon_loid_registed.bmp ├── gloable_address.png ├── gn28l97.png ├── gn28l97_startup_squence.png ├── gpon_ploam.png ├── gun_elf.jpg ├── hi_5630.png ├── hi_5682_startup_flow.bmp ├── hi_arm_data_path.png ├── hi_boot_linux_2.gif ├── hi_boot_linux_para.png ├── hi_cm.png ├── hi_cm2.png ├── hi_cm_process.png ├── hi_cm_process2.png ├── hi_cm_structure.png ├── hi_napt_result.png ├── hi_spi_flow.png ├── hi_spi_flow1.png ├── hi_startup_process.png ├── hi_subsytem_internal_exchange.png ├── hi_vlan_dump_result.png ├── hisi_cfg_debug.bmp ├── hisi_cgi.png ├── hisi_cm_structure.png ├── hisi_data_path.png ├── hisi_voip.jpg ├── hisilicon_arch.png ├── hop_by_hop.png ├── hop_by_hop_header.png ├── hsan_dtbo.bmp ├── hsan_t12_smt.bmp ├── hsant12_smt.bmp ├── i2c_data1.jpeg ├── i2c_data2.jpeg ├── i2c_data2.png ├── i2c_data3.jpeg ├── i2c_pload.png ├── i2c_signal.jpeg ├── i2c_signal2.jpeg ├── i2c_signal_sync.jpeg ├── icmpv6.bmp ├── icmpv6.jpg ├── icmpv6_2.jpg ├── igmp_packet.bmp ├── igmp_proxy.bmp ├── igmp_snooping.bmp ├── ip_v5_next_header.png ├── ipc_1.bmp ├── ipc_2.bmp ├── ipc_pipe.bmp ├── ipv4_vs_ipv6.jpg ├── ipv4_vs_ipv6.png ├── ipv6_addr.png ├── ipv6_address.png ├── ipv6_format.bmp ├── ipv6_header.png ├── ipv6_header_structure.bmp ├── ipv6_ipv4.png ├── ipv6_site_local_address.png ├── ipv6_unique_local_address.png ├── jsmooth.png ├── jsmooth1.png ├── kernel_bootloader.gif ├── kernel_cache.bmp ├── kernel_tarce_mips_2.png ├── kernel_trace_mips.png ├── la.jpg ├── la3.bmp ├── linux-file-system-2.png ├── linux_6.jpg ├── linux_benchmark_tools.jpg ├── linux_bpf_tools.jpg ├── linux_fs.png ├── linux_fs2.png ├── linux_memory.png ├── linux_memory1.jpg ├── linux_nf.png ├── linux_nf_1.png ├── linux_observability_tools.jpg ├── linux_packet.png ├── linux_perf_tools.jpg ├── linux_scsi.gif ├── linux_static_tools.jpg ├── linux_tuning_tools.jpg ├── local_address_format.png ├── mapping.bmp ├── mem_dev.bmp ├── mt7981_emmc_spi_one_cs.png ├── mtd_framework.jpg ├── mtd_frmwork_2.png ├── mtd_ubi_mapping.png ├── mtd_vs_ubi.bmp ├── mtk_bl2_struct.jpg ├── mtk_fip_struct.bmp ├── mult_vendor.png ├── multicast_address2.png ├── multiple_vendors.png ├── mutex_lock.png ├── nand_flash.png ├── nand_flash_layout.png ├── netfilter_tables.png ├── obj_dump.png ├── obj_dump2.png ├── obj_dump3.png ├── object_file.png ├── ocmi_establishment.bmp ├── omci_frame_format.bmp ├── onfi.bmp ├── onu_chip_arch.png ├── oob_layerout_compare.png ├── opal_arch.bmp ├── opal_atck.jpg ├── opal_atsh.jpg ├── opal_atsn.jpg ├── opal_atwz.jpg ├── opal_build.bmp ├── opal_download_server.bmp ├── opal_enable_telnet.jpg ├── opal_fw_version.jpg ├── opal_gui.jpg ├── opal_ip2.jpg ├── opal_telnet_2.jpg ├── opal_upgrade.jpg ├── opal_zboot.png ├── paralle_nand.bmp ├── parallel_nand.bmp ├── pipe.jpg ├── quilt-stack.png ├── ras_bin.png ├── rcu.jpg ├── realtek_fttr.bmp ├── rm_white_space.png ├── route_forword.bmp ├── routing_header.png ├── rtk_9617c.bmp ├── slave_select_map_flow.png ├── slave_serial_flow_dia.png ├── slave_serial_seq.png ├── solicited_note_address.png ├── spi-bus-timing.jpg ├── spi_flash_datasheet.bmp ├── spi_hi-boot_kernel.png ├── spi_interface.png ├── spi_transmission.png ├── spin_lock.png ├── syn_flood_ddos_attack_type.jpg ├── tcp_handshark.png ├── tcp_header.png ├── tcp_syn_flood.png ├── telnet_con.bmp ├── tftp.bmp ├── tftp2.jpg ├── tftp3.jpg ├── tftp4.jpg ├── tftp5.jpg ├── tftp_sop.png ├── tools_output.jpg ├── transistor.jpg ├── ubi_stack.png ├── ubifs_overview.png ├── uboot_mem_align_check.png ├── uboot_mem_unalign_error.png ├── upgrade.jpg ├── upgrade1.bmp ├── upgrade2.bmp ├── upper_letter_switch.bmp ├── vim_clipboard.png ├── wan_info.jpg ├── wan_info2.png ├── wifi6_1.jpg ├── win_net_setting.png ├── wson_packages.png ├── xtx_xt26g01c_spec.bmp ├── xtx_xt26g01c_spec2.bmp ├── xtx_xt26g01c_spec3.bmp ├── xtx_xt26g01c_spec_4.bmp ├── yaffs_arch.png ├── zcfg_debug.bmp └── zyxel_flash_partition.bmp └── pdf_resource ├── 16th-IPC.pptx ├── GPON_Knowledge_Introduce.pptx ├── Hi5630HV110_G.Hn_PLC_datasheet_01.pdf ├── HowYaffsWorks.pdf ├── econet.vsd ├── hisilicon.vsd └── ubootframework.pdf /.gitignore: -------------------------------------------------------------------------------- 1 | ReleasePDF/*.docx -------------------------------------------------------------------------------- /16th-IPC.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chear/SWNote/d48bb4986d2e727434f551b04f9bef919f7b4409/16th-IPC.pptx -------------------------------------------------------------------------------- /Airoha.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 1. Airoha Arch Introduction 4 | 5 | (Note: 4506 root/!@ZyxelTest) 6 | 7 | # 2. Airoha SDK for AN7552 Building 8 | 9 | SDK file tree 10 | 11 | ![sdk_files](./img/airoha_sdk_files.png) 12 | 13 | unzip sdk 14 | 15 | ```shell 16 | # unrar x OSBNB00175825_ARHT_OpenWRT_7552_NoWiFi_Phase2_7_3_283_1451_v021_openwrt-airoha-feeds-pre-sdk.tar.part1 17 | # cat OSBNB00175825_ARHT_OpenWRT_7552_NoWiFi_Phase2_7_3_283_1451_v021_openwrt-airoha-feeds-pre-sdk.tar/OSBNB00175825_ARHT_OpenWRT_7552_NoWiFi_Phase2_7_3_283_1451_v021_openwrt-airoha-feeds-pre-sdk.tar.gz | tar -zxf - 18 | # rm -rfd OSBNB00175825_ARHT_OpenWRT_7552_NoWiFi_Phase2_7_3_283_1451_v021_openwrt-airoha-feeds-pre-sdk.tar 19 | ``` 20 | 21 | building sdk: 22 | 23 | ```shell 24 | # ./airoha_script/airoha-compile.sh -c 7552 -t " " -m Kite_logan -f 25 | # cd openwrt-21.02/openwrt-21.02.1_dev/ 26 | # > ./feeds.conf.default 27 | # make MSDK=1 VERBOSE=1 28 | ``` 29 | 30 | building u-boot by 31 | 32 | ```shell 33 | # make MSDK=1 packages/feed/airoha/bootloader/{clean,compile} VERBOSE=1 34 | ``` 35 | 36 | ## 2.1 Airoha SDK v072 Building 37 | 38 | unzip by ``tar -xf 2024Q3_Airoha_LTS_SDK_BBU230170AIR-598_7_3_283_1454_v072.tar.gz --strip-components=1 -C airoha_sdk_v072`` 39 | 40 | ```shell 41 | # ./airoha_script/airoha-compile.sh -c 7552 -t /work/cpe-opal/sdk/airoha_sdk_v072/tclinux_phoenix -f -m MT7916_Jedi 42 | # cd openwrt-21.02/openwrt-21.02.1_dev 43 | # make -j 16 MSDK=1 44 | ``` 45 | 46 | 47 | 48 | *tcboot.bin or zld.bin* constracture structure 49 | 50 | ```text 51 | 0x80000 -------------------| 52 | | mi.conf | 53 | 0x7c000 -------------------| 54 | | | 55 | 0x26000 -------------------| 56 | | zloader | zloader.bin.lzma.uimage, size 128k 57 | 0x60000 -------------------| 58 | | uboot.bin | 59 | 0x00000 -------------------| 60 | ``` 61 | 62 | *ras.bin* constracture structure. 63 | 64 | ```text 65 | |--------------------| 66 | | rsa.sign | sign file(256 byte) with 1024 padding 67 | -----^------ |--------------------| 68 | | | | zydefault.bin | 69 | | | └----------------| 70 | | | rootfs | 71 | rsa.sign range |--------------------| 72 | | | vmlinux | 73 | | |--------------------| 74 | | | ecnt.dtb | pmg4006_t20d.dts 75 | -----v------- 0x2174 ------------------| 76 | | trx_header | sizeof(struct trx_header) = 372 byte 77 | 0x2000-------------------| 78 | | padding | fip padding offset 79 | |--------------------| 80 | ``` 81 | 82 | *ras.sign* are only covery linux & rootfs , generate and verify command by: 83 | 84 | ```shell 85 | ### to generate ras.sign 86 | $ openssl dgst -sign ./rsa_private.key -sha256 -out ./ras.sign ./ras.bin 87 | 88 | ### to verify 89 | $ openssl dgst -verify ./rsa_public.pem -sha256 -signature ./ras.sign ./ras.bin 90 | 91 | ### to encrypt ras_signatured.bin 92 | $ openssl enc -aes-256-cbc -pbkdf2 -pass pass:`zyabzq_host -p` -in ./rsa_signatured.bin -out ./ras_signatured_enc.bin 93 | 94 | ### to dencrypt ras_signatured_enc.bin 95 | $ openssl enc -aes-256-cbc -pbkdf2 -pass pass:`zyabzq_host -p` -d -in ./ras_signatured_enc.bin -out ras_dec.bin 96 | ``` 97 | 98 | 99 | ## 2.2 Arioha Emergency upgarde by x-modem 100 | 101 | 1. push 'reset' button and switch power on 102 | 103 | 2. set x-modem and key press 'x' to upgrade bootext.ram from sdk 104 | 105 | ![upg](./img/airoha_serial_upgrade_1.bmp) 106 | 107 | 3. upgrade tcboot.bin from serial mode 108 | 109 | ![upg2](./img/airoha_serial_upgrade_2.bmp) 110 | 111 | 4. startup to uboot and login by 'telecomadmin/nE7jA%5m' upgrade bootloader by tftp client 112 | 113 | ![upg3](./img/airoha_serial_upgrade_3.bmp) 114 | 115 | 116 | 117 | read tclinux context from mtd partition 118 | 119 | 120 | 121 | # 3 AN7583 SDK v041 Building 122 | 123 | SDK Download & Building 124 | 125 | ```shell 126 | ## docker: ropd20_an7583 127 | # git clone git@172.25.25.12:git_turnkey_trunk/airoha_platform/airoha_sdk_7_3_283_1455_v041.git 128 | # git checkout -b AN7567GT_Kite_Q4SDK_2025_01_14 origin/AN7567GT_Kite_Q4SDK_2025_01_14 129 | # ./airoha_script/airoha-compile.sh -c 7583 -t "`pwd`/tclinux_phoenix" -f -m Kite_logan_EMMC_OPTEE -w EagleKite_logan 130 | # cd openwrt-21.02/openwrt-21.02.1_dev/ 131 | # make -j32 V=s MSDK=1 132 | ``` 133 | 134 | OPAL20 Download & Building 135 | 136 | ```shell 137 | # zyrepo init -m opal21_an7583_1455_v041_kite_logan.xml 138 | # zyrepo sync 139 | # zyrepo branch -b an7567_kite_logan_1455_v041_develop 140 | # make P=DE3301-00_Generic -j16 141 | ``` 142 | 143 | -------------------------------------------------------------------------------- /Assembler.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 1. MIPS 4 | 5 | MIPS 作为业界最为经典的精简指令集架构之一,MIPS是出现最早的商业 RISC 架构芯片之一 , 刚开始对标的产品是 Intel 的 x86 系列和 ARM 最基本的区别是 ARM 面向低功耗的移动端业务。MIPS CPU的一次操作可加载或存储1到8个字节的数据 6 | 7 | ## 1.1 [MIPS 指令]() 8 | 9 | ### 1.1.1 空操作 10 | 11 | nop、ssnop(不能和其他指令同时发射,至少需要一个时钟周期) 12 | 13 | 14 | 15 | ### 1.1.2 寄存器间的数据传送指令 16 | 17 | move、movf、movt、movn、movz(后四个为条件传递指令) 18 | 19 | 20 | 21 | ### 1.1.3 常数加载指令 22 | 23 | dla、la(获取某些标号地址或程序中变量地址的宏指令); 24 | 25 | dli、li(加载常数立即数指令); 26 | 27 | lui(加载高位立即数指令) 28 | 29 | 30 | 31 | ### 1.1.4 算术/逻辑操作指令 32 | 33 | addu、addiu、daddu,daddiu(加法指令); 34 | 35 | dsub、sub(会触发溢出陷入的减法操作); 36 | 37 | dsubu、subu(普通减法指令); 38 | 39 | abs、dabs(求绝对值操作); 40 | 41 | dneg、neg、dnegu、negu(一元非操作); 42 | 43 | and、andi、or、ori、xor、xori、nor、not(按位逻辑指令); 44 | 45 | drol、dror、rol、ror(循环左移和右移); 46 | 47 | dsll、dsll32、dsllv(64位左移,低位补零); 48 | 49 | dsra、dsra32、dsrav(64位算术右移指令); 50 | 51 | dsrl、dsrl32、dsrlv(64位逻辑右移指令); 52 | 53 | sll、sllv(32位左移指令); 54 | 55 | sra、srav(32位算术右移指令); 56 | 57 | srl、srlv(32位逻辑右移指令); 58 | 59 | slt、slti、sltiu、sltu(硬件指令,条件满足就写入1,否则写0); 60 | 61 | seq、sge、sgeu、sgt、sgtu、sle、slue、sne(根据更复杂的条件设置目的寄存器的宏指令) 62 | 63 | 64 | 65 | ### 1.1.5 整数乘法、除法以及求余指令 66 | 67 | ddiv、ddivu、div、divu(整数除法的3操作数宏指令分别处理64位或32位有符号或无符号数); 68 | 69 | divo、divou(明确该指令是带有溢出检查的除法指令); 70 | 71 | dmul、mul(3操作数64位或32位乘法指令,没有溢出检查); 72 | 73 | mulo、mulou、dmulo、dumlou(乘法宏指令,如果结果不能存入一个通用寄存器,发生溢出,触发异常);dmult、dmultu、mult、multu(执行有符号/无符号32/64位乘法的机器指令); 74 | 75 | drem、dremu、rem、remu(求余操作); 76 | 77 | mfhi、mflo、mthi、mtlo(用于访问整数乘除单元的结果寄存器hi和lo) 78 | 79 | 80 | 81 | ### 1.1.6 存取指令(内存访问指令) 82 | 83 | lb、lbu(加载一个字节,高位可以补零,或进行符号扩展,以补充整个寄存器的长度); 84 | 85 | ld(加载一个双字); 86 | 87 | ldl、ldr、lwl、lwr、sdl、sdr、swl、swr(向左、向右加载、存储一个字、双字); 88 | 89 | lh、lhu(加载一个半字,高位可以补零,或进行符号扩展,以补充整个寄存器的长度);lw、lwu(加载一个字);pref、prefx(把数据预取到缓冲);sb、sd、sh、sw(存储字节、双字、半字、字);uld、ulh、ulhu、ulw、usd、usw、ush(地址非对齐的数据存取宏指令);l.d、l.s、s.d、s.s(存取双精度和单精度浮点数的指令,地址必须对齐);ldxcl、lwxcl、sdxcl、swxcl(采用基址寄存器+偏移寄存器的寻址方式存取指令); 90 | 91 | 92 | 93 | ### 1.1.7 跳转、分支和子程序调用指令 94 | 95 | j(无条件跳转到一个绝对地址,访问256M的代码空间); 96 | 97 | jal、jalr(直接或间接子程序调用,这种跳转不仅能跳转到指定地址,而且可以顺便把返回地址(当前指令地址+8)放到ra寄存器中); 98 | 99 | b(基于当前指令地址的无条件相对跳转); 100 | 101 | bal(基于当前地址的函数调用指令); 102 | 103 | bc0f、bc0f1、bc0t、bc0t1、bc2f、bc2f1、bc2t、bc2t1(根据协处理器0和2的条件标志进行跳转); 104 | 105 | bc1f、bc1f1、bc1t、bc1t1(根据浮点条件标志位进行跳转); 106 | 107 | beq、beq1、beqz、beqz1、bge、bge1、bgeu、bgeu1、bgez、bgez1、bgt、bgt1、bgtu、bgtu1、bgtz、bgtz1、ble、ble1、bleu、bleu1、blez、blez1、blt、blt1、bltu、bltu1、bltz、bltz1、bne、bnel、bnez、bnezl(双操作数和单操作数的比较跳转指令); 108 | 109 | bgeza1、bgeza11、bltza1、bltza11(如果需要 ,这些指令是用于有条件函数调用的原始机器指令); 110 | 111 | 112 | 113 | ### 1.1.8 断点及陷阱指令 114 | 115 | break(产生一个“断点”类型的异常); 116 | 117 | sdbbp(产生EJTAG异常的断点指令); 118 | 119 | syscall(产生一个约定用于系统调用的异常类型); 120 | 121 | teq、teqi、tge、tgei、tgeiu、tgeu、tlt、tlti、tltiu、tltu、tne、tnei(条件异常指令,对一个或两个操作数进行条件测试); 122 | 123 | 124 | 125 |   126 | 127 | ### 1.1.9 协处理器0的功能 128 | 129 | cfc0、ctc0(把数据拷进和拷出协处理器0的控制寄存器); 130 | 131 | mfc0、mtc0、dmfc0、dmtc0(在通用寄存器和协处理器0寄存器之间交换数据); 132 | 133 | cfc2、ctc2、dmfc2、dmtc2、mfc2、mtc2(协处理器2的指令); 134 | 135 | 136 | 137 | ## 1.2 Sample 138 | 139 | C code: 140 | 141 | ```c 142 | /* Example to illustrate mips register convention 143 | * -Author: BNN 144 | * 11/29/2001 145 | */ 146 | 147 | int addFunc(int,int); 148 | int subFunc(int); 149 | 150 | void main(){ 151 | int x,y,z; 152 | x= 1; 153 | y=2; 154 | z = addFunc(x,y); 155 | } 156 | 157 | int addFunc(int x,int y){ 158 | int value1 = 5; 159 | int value2; 160 | value2 = subFunc(value1); 161 | return (x+y+value2); 162 | } 163 | 164 | int subFunc(int value){ 165 | return value--; 166 | } 167 | ``` 168 | 169 | 170 | 171 | # 2. ARM 172 | 173 | ARM 常见的跳转指令有 B, BL, MOV,LDR, 174 | 175 | ### ``ldr`` 指令 176 | 177 | ```assembly 178 | ldr r0, 0x12345678 // 将 0x12345678 地址中的值存放到 r0 中, 179 | ldr r0, r1 // 将 r1 寄存器中的值放入 r0 180 | ``` 181 | 182 | 183 | 184 | ### ``ldr`` 伪指令 185 | 186 | ```assembly 187 | ldr r0, =0x123456578 // 将 0x12345678 这个地址写到 r0 寄存器中。 188 | ``` 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | ## Sample Assembler 201 | 202 | [url]() to show the way to hack ELF executable file. 203 | 204 | -------------------------------------------------------------------------------- /Bootloader.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 1. ARM Cache 4 | 5 | ICache (Instruction Cache) and DCache (Data Cache) are types of cache memory used in modern processors to improve performance by reducing the time it takes to access instructions and data from the main memory. This is not only for ARM ,also used for other platform such like x86, MIPS, PowerPC 6 | 7 | - ### ICache (Instruction Cache) 8 | 9 | - **Purpose**: Stores instructions fetched from the main memory. 10 | - **Function**: When the CPU needs to execute an instruction, it first checks the ICache. If the instruction is found (cache hit), it is fetched from the ICache, which is much faster than fetching from the main memory. If not found (cache miss), the instruction is fetched from the main memory and stored in the ICache for future use. 11 | 12 | ### DCache (Data Cache) 13 | 14 | - **Purpose**: Stores data fetched from the main memory. 15 | - **Function**: When the CPU needs to read or write data, it first checks the DCache. If the data is found (cache hit), it is accessed from the DCache. If not found (cache miss), the data is fetched from or written to the main memory and stored in the DCache for future use. 16 | 17 | ```text 18 | +-----------------+ 19 | | CPU Core | 20 | | +-----------+ | 21 | | | ICache | | <-- L1 Cache (Instruction) 22 | | +-----------+ | 23 | | +-----------+ | 24 | | | DCache | | <-- L1 Cache (Data) 25 | | +-----------+ | 26 | +-----------------+ 27 | | 28 | v 29 | +-----------------+ 30 | | L2 Cache | <-- Unified Cache (Instruction + Data) 31 | +-----------------+ 32 | | 33 | v 34 | +-----------------+ 35 | | L3 Cache | <-- Shared Cache (Instruction + Data) 36 | +-----------------+ 37 | | 38 | v 39 | +-----------------+ 40 | | Main Memory | 41 | +-----------------+ 42 | ``` 43 | 44 | (Note: 调试如 u-boot 中自带的 "helloworld.bin" standalone 程序,除了需要注意CONFIG_STANDALONE_LOAD_ADDR 外,还需要在用 ``go [address]`` 加载程序之前先清理 icache 和 dcache) 45 | 46 | 47 | 48 | # 2. FIT (Flattened Image Tree) Image 49 | 50 | 用于 U-Boot 引导加载程序。FIT 镜像格式允许将多个镜像(如内核、设备树、文件系统等)打包到一个单一的镜像文件中,并且可以包含镜像的元数据和签名信息。 51 | 52 | ```text 53 | FIT Image 54 | ├── Header (FIT Header) 55 | ├── Device Tree Structure 56 | │ ├── / (root node) 57 | │ ├── images/ 58 | │ │ ├── kernel@1 59 | │ │ ├── fdt@1 60 | │ │ └── ramdisk@1 61 | │ └── configurations/ 62 | └── Data Section (实际的二进制数据) 63 | 64 | Memory Layout: 65 | +------------------+ <- fit_addr 66 | | FIT Header | 67 | +------------------+ 68 | | Device Tree | 69 | | Structure | 70 | +------------------+ <- data_offset 71 | | Binary Data | 72 | | (kernel, | 73 | | dtb, etc) | 74 | +------------------+ 75 | ``` 76 | 77 | 常用命令 78 | 79 | ```shell 80 | # 查看 FIT 镜像内部结构 81 | fdtdump fitImage.fit 82 | 83 | # 查看 FIT image 内容 84 | mkimage -l image.fit # 只显示结构信息 85 | mkimage -l -v image.fit # 显示详细信息 86 | 87 | # 提取内容 88 | dumpimage -i image.fit -p 0 kernel.bin # 提取第一个组件 89 | ``` 90 | 91 | 对应的 ``*.dts`` 92 | 93 | ```json 94 | /dts-v1/; 95 | / { 96 | description = "U-Boot TPL FIT Image"; 97 | #address-cells = <1>; 98 | images { 99 | tpl { 100 | description = "TPL Image"; 101 | data = /incbin/("tpl.bin"); 102 | type = "firmware"; 103 | arch = "arm"; 104 | compression = "none"; 105 | load = <0x80000000>; 106 | entry = <0x80000000>; 107 | 108 | signature { 109 | algo = "sha256,rsa2048"; 110 | key-name-hint = "dev-key"; 111 | }; 112 | 113 | // 如果启用加密 114 | cipher { 115 | algo = "aes-cbc"; 116 | key-name-hint = "enc-key"; 117 | }; 118 | }; 119 | }; 120 | 121 | configurations { 122 | default = "conf-1"; 123 | conf-1 { 124 | description = "TPL Configuration"; 125 | firmware = "tpl"; 126 | signature-1 { 127 | algo = "sha256,rsa2048"; 128 | key-name-hint = "dev-key"; 129 | sign-images = "firmware"; 130 | }; 131 | }; 132 | }; 133 | }; 134 | ``` 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /DBus.md: -------------------------------------------------------------------------------- 1 | ## Introduction 2 | 3 | layout : 4 | 5 | ![dbus_framework](./img/dbus_main_framework.png) -------------------------------------------------------------------------------- /DDos.md: -------------------------------------------------------------------------------- 1 | # Introduction & Principle 2 | 3 | **Distributed denial of service (DDoS)** attacks are a subclass of denial of service (DoS) attacks. A DDoS attack involves multiple connected online devices, collectively known as a [botnet](https://www.imperva.com/learn/application-security/botnet-ddos/), which are used to overwhelm a target website with fake traffic. 4 | 5 | 6 | 7 | **Note: ** 8 | 9 | **TCP Header** 10 | 11 | ![tcp_header](img\tcp_header.png) 12 | 13 | 14 | 15 | ## Syn flood 16 | 17 | A [**SYN** flood (half-open attack)]() is a type of denial-of-service (**DDoS**) attack which aims to make a server unavailable to legitimate traffic by consuming all available server resources(e.g., RAM and CPU). 18 | 19 | By repeatedly sending initial connection request (**SYN**) packets, the attacker is able to overwhelm all available ports on a targeted server machine, causing the targeted device to respond to legitimate traffic sluggishly or not at all. 20 | 21 | 22 | 23 | ![1557292168621](img/syn_flood_ddos_attack_type.jpg) 24 | 25 | 26 | 27 | 28 | 29 | **The normally capture tcp handshark :** 30 | 31 | ![handshark](img\tcp_handshark.png) 32 | 33 | **after syn flood attacks :** 34 | 35 | ![sync_flood](img\tcp_syn_flood.png) 36 | 37 | 38 | 39 | 40 | 41 | ## Land 42 | 43 | 44 | 45 | ## Smurf 46 | 47 | 48 | 49 | 50 | ## Teardrop -------------------------------------------------------------------------------- /Docker.md: -------------------------------------------------------------------------------- 1 | # 1. Introduction 2 | 3 | Docker image startup process: 4 | 5 | ![docker](./img/docker_startup_process.png) 6 | 7 | 8 | 9 | Arch 10 | 11 | ![docker_arch](./img/docker_arch.bmp) 12 | 13 | ```shell 14 | 1). If you do not have the ubuntu image locally, Docker pulls it from your configured registry, as though you had run docker pull ubuntu manually. 15 | 2). Docker creates a new container, as though you had run a docker container create command manually. 16 | 3). Docker allocates a read-write filesystem to the container, as its final layer. This allows a running container to create or modify files and directories in its local filesystem. 17 | 4). Docker creates a network interface to connect the container to the default network, since you did not specify any networking options. This includes assigning an IP address to the container. By default, containers can connect to external networks using the host machine’s network connection. 18 | 5). Docker starts the container and executes /bin/bash. Because the container is running interactively and attached to your terminal (due to the -i and -t flags), you can provide input using your keyboard while the output is logged to your terminal 19 | 6). When you type exit to terminate the /bin/bash command, the container stops but is not removed. You can start it again or remove it. 20 | # docker run -i -t ubuntu /bin/bash 21 | ``` 22 | 23 | 24 | 25 | ## 1.1 [Container & Images]() 26 | 27 | - Container 28 | 29 | A container is a runnable instance of an image. A container is defined by its image as well as any configuration options you provide to it when you create or start it , when a container is removed, any changes to its state that are not stored in persistent storage disappear. 30 | 31 | - Images 32 | 33 | An *image* is a read-only template with instructions for creating a Docker container. Often, an image is *based on* another image, with some additional customization. 34 | 35 | ![container_images](./img/container_images.bmp) 36 | 37 | ## 1.2 [Differ Container & Images]() 38 | 39 | - 镜像由一层层只读层堆在一起,容器为镜像只读层+读写层,运行态容器为由一个可读写的文件系统「静态容器」+ 隔离的进程空间和其中的进程构成。 40 | 41 | Container(容器,一层读写层+多层只读层), Running Container(运行态容器,一层读写层+多层只读层+隔离的进程空间和包含其中的进程) 42 | 43 | - ``docker save`` 保存的是镜像(image),``docker export`` 保存的是容器(container); 44 | 45 | ```shell 46 | $ docker save #ID or #Name 47 | $ docker export #ID or #Name 48 | ``` 49 | 50 | - ``docker load`` 用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像; 51 | 52 | - ``docker load`` 不能对载入的镜像重命名,而docker import可以为镜像指定新名称。 53 | 54 | ```shell 55 | # to display the images info 56 | $ docker image ls 57 | # to display containers info 58 | $ docker ps -a 59 | ``` 60 | 61 | 62 | 63 | # 2. New image 64 | 65 | to make new environment integrate vim and config git user name for MTK bootloader. [Rref](https://zhuanlan.zhihu.com/p/366271256) 66 | 67 | ```shell 68 | # to building image 69 | $ cd Dock67 70 | $ docker build --build-arg UID=1016 --build-arg GID=1016 --build-arg USER=chear -t ubuntu_18_04_env:bootloader . 71 | 72 | # to commit image 73 | $ docker commit -m "add vim ,git config" -a "chear" [contain_id] [new_images_id]:[tag] 74 | 75 | # to running new container 76 | $ docker run --rm -it --name opal2_mtk_boot_docker_chear --hostname Build_Opal_Docker6604 -v ./:/work/cpe-opal -w /work/cpe-opal -v /opt:/opt -v /home/chear/.ssh:/home/chear/.ssh --dns 172.25.5.210 ubuntu_18_04_env:bootloader bash 77 | ``` 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /Econet.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 1. Arch Introduction 4 | 5 | ![econet_arch](img/econet_arch.bmp) 6 | 7 | 8 | 9 | # 2. Download & Building Source 10 | 11 | Source File Tree, files structure based on Econet en_7580 sdk. 12 | 13 | ```shell 14 | root@michael-HP-Pro-3330-MT:/home/michael/Code/michael/7528/org# tree ./ -d -L 1 15 | ./ 16 | ├── app_bsp 17 | ├── apps 18 | ├── bootrom 19 | │ (bootloader source file) 20 | ├── doc 21 | │ ( DO NOT CARE.s) 22 | ├── filesystem 23 | │ ( the generate fs at 'filesystem/usr/') 24 | ├── global_inc 25 | ├── kernel_ext 26 | ├── lib_install 27 | ├── linux-3.18.21 28 | │ ( linux kernel source .) 29 | ├── linux-ecnt 30 | │ ( Econet kernel source files ,should be copy and replace with-in 'linux-3.18.21' 31 | │ by same folder.) 32 | ├── modules 33 | ├── Project 34 | │ ( platform configuration files.) 35 | ├── tools 36 | ├── version 37 | └── windows_rndis_driver 38 | ``` 39 | 40 | 41 | 42 | ## 2.1 Make Building 43 | 44 | decompress SDK and building the source 45 | 46 | ```shell 47 | root@:# mkdir -p releasebsp 48 | root@:# cp releasebsp_profilename_relasedate.tgz ./releasebsp 49 | root@:# tar -xzvf releasebsp_profilename_relasedate.tgz 50 | root@:# fakeroot make PROFILE=NP_EN7561D_LE_7592_7613_NORD_64M_demo CUSTOM=CT clean 51 | root@:# fakeroot make PROFILE=NP_EN7561D_LE_7592_7613_NORD_64M_demo CUSTOM=CT All 52 | root@:# fakeroot make PROFILE=NP_EN7561D_LE_7592_7613_NORD_64M_demo CUSTOM=CT kernel_clean kernel 53 | root@:# fakeroot make PROFILE=NP_EN7561D_LE_7592_7613_NORD_64M_demo CUSTOM=CT bootbase_clean bootbase 54 | root@:# fakeroot make PROFILE=NP_EN7561D_LE_7592_7613_NORD_64M_demo CUSTOM=CT buildimage 55 | ``` 56 | 57 | generate image at ''*releasebsp/Project/images/tcboot.bin* " , "*releasebsp/Project/images/tclinux.bin*" 58 | 59 | to build misc image by following: 60 | 61 | ```shell 62 | root@:# ./addoob tclinux_allinone_nand tclinux_allinone_nand_ecc 2048 64 63 | root@:# ./addhdr tclinux_allinone_nand_ecc ap_mstc.bin 64 | ``` 65 | 66 | (Note: check hex data for MSTC image , verify the offset data correct or not , ``./addoob file1 file2 2112 64`` .) 67 | 68 | 69 | 70 | # 3. BootLoader 71 | 72 | Source file tree (based on en7528). 73 | 74 | ```shell 75 | bootrom/ 76 | ├── start.S_7510_final 77 | │ (Boot1 assembly code to init CPU,clock, calibration DDR, ) 78 | ├── strat.S 79 | │ (copy from "start.S_7510_final".) 80 | ├── bootram/ 81 | │ (main bootbase driver such as network ,flash and bootbase command.) 82 | ├── ddr_cal_en7512/ 83 | │ ( ) 84 | ├── spram_ext/ 85 | ├── lzma/ 86 | ├── unopen_img/ 87 | ├── verify/ 88 | ├── bootload.c 89 | ├── header.c 90 | ├── byteswap.c 91 | ├── lzmaload.c 92 | ├── mic.c 93 | │ ( copy 'mi.cfg' and make to global var on tcboot.bin) 94 | ├── make_bootbase 95 | └── Makefile 96 | ``` 97 | 98 | (Note: the Econet's boot-loader same as u-boot, driver's source files at *bootrom/bootram* , [IPL( Initial Program Loader)](https://www.abbreviationfinder.org/cn/acronyms/ipl_initial-program-loader.html)) 99 | 100 | whole bootloader make command: 101 | 102 | ```Makefile 103 | make -C bootram TCSUPPORT_SECURE_BOOT_AES=0 TCSUPPORT_BB_CHECK=1 TCSUPPORT_BB_FIX_UNOPEN=1 TCSUPPORT_SPI_CONTROLLER_ECC=1 TCSUPPORT_SPI_NAND_FLASH_ECC_DMA=1 TCSUPPORT_MIPS_1004K=1 L2CACHE_LOCK_CODE=1 TC3262=1 SIS_DDR_PHY=1 RT63365=1 MT75XX_REDUCE_SIZE=1 TCSUPPORT_CPU_EN7528=1 MT75XX_REDUCE_SIZE=1 TCSUPPORT_CPU_EN7512=1 64M=1 TR068_LED=1 TCSUPPORT_FREE_BOOTBASE=1 CONFIG_DUAL_IMAGE=1 TCSUPPORT_BB_256KB=1 MT75XX_NAND=1 EN7512_NAND=1 TCSUPPORT_10G_FPGA_DDR4=1 SPI_NAND_FLASH_DEBUG=1 SPI_CONTROLLER_DEBUG=0 SPI_ECC_DEBUG=0 SPI_NFI_DEBUG=0 BOOT_LZMA_SUPPORT=1 104 | ``` 105 | 106 | 107 | 108 | ## 4. Image process 109 | 110 | ```mermaid 111 | graph LR 112 | prepare[build image] -->|cat * > allinone|cat(padding) 113 | cat -->|byteswap| byteswap(little endian) 114 | byteswap -->|trx| trx(add crc head) 115 | trx -->|add oob&hard|final[tclinux_allinone_nand] 116 | ``` 117 | 118 | ```Makefile 119 | cat tcboot.bin padding_b ctromfile.cfg padding_f tclinux.bin > tclinux_allinone 120 | ``` 121 | 122 | misc image layout (based on en7528) 123 | 124 | ```shell 125 | 0x000007000000 -------------------| 126 | | reservearea | 127 | 0x000006dc0000 -------------------| 128 | | ... | 129 | 0x000005280000 -------------------| 130 | | plugin | 131 | 0x000004e80000 -------------------| 132 | | log | 133 | 0x000004c80000 -------------------| 134 | | ubifs | 135 | 0x000003880000 -------------------| 136 | | opt1 | 137 | 0x000003880000 -------------------| 138 | | opt0 | 139 | 0x002880000 -------------------|------------------------------------ 140 | | linux B | tclinux_slave.bin,zize=0x1400000 141 | | rootfs B | (20M) 142 | 0x001480000 -------------------|------------------------------------ 143 | | rootfs A | 144 | | -------------------| tclinux.bin size=0x50000 145 | | kernel A | (20M) 146 | 0x080000 -------------------|------------------------------------ 147 | | romfile | romfile.gz, size=0x40000 (256k) 148 | 0x040000 -------------------|------------------------------------ 149 | | bootloader | tcboot.bin, size=0x40000 (256k) 150 | 0x000000 -------------------|------------------------------------ 151 | ``` 152 | 153 | 154 | 155 | ## 4.1 process to building tclinux.bin 156 | 157 | making tclinux.bin based for en7528 , profile based CT_EN7561D_LE_7592_7613_AP_demo 158 | 159 | ```Makefile 160 | make -j 16 -C /home/chear/MTK/tclinux_phoenix_ctc_20200308/linux-3.18.21 linux.7z 161 | ../tools/lzma e linux.bin linux.7z 162 | ../tools/trx/trx -f linux.7z -o linux.7z.trx -c ../tools/trx/trx_config 163 | ../../tools/trx/trx -k 4149365 -r 15364054 -u 0x80002000 -f tclinux -o tclinux.bin -c ../../tools/trx/trx_config 164 | ``` 165 | 166 | 167 | 168 | ## 5. CFG command 169 | 170 | ```shell 171 | # tcapi show Account_TelnetEntry 172 | OID [183:1][TelnetEntry]: 173 | [Active = Yes] 174 | [telnet_username = e8telnet] 175 | [telnet_passwd = e8telnet] 176 | [telnet_port = 23] 177 | 178 | # tcapi set Account_MfgMode Active "Yes" 179 | (Note: update romfiles) 180 | # tcapi save 181 | 182 | # prolinecmd restore default 183 | 184 | # sys led on 185 | ``` 186 | 187 | **(Note: default backup romfile path: userfs/romfile.cfg , running romfile path: /dev/mtdblock1 )** 188 | 189 | ​ 190 | 191 | 192 | 193 | 194 | 195 | Econet restore default command: 196 | 197 | ```shell 198 | # prolinecmd romfileselect set ctromfile_prd.cfg 199 | # tcapi show System_Entry 200 | # prolinecmd restore default 201 | ``` 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | -------------------------------------------------------------------------------- /GponDriver.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Glossary 4 | 5 | - APD (Avalanche Photodiode) 雪崩光电二极管 6 | - BER (Bit Error Ratio) 比特误码率 7 | - ROSA 接收器光学子配件 8 | - LUT(Look-Up-Table) 指显示查找表 9 | - SFF-8472 光学器件监控协议,SFF-8472协议的主要目的是定义光模块的数字诊断监控功能(DDM) 10 | - DDM (Digtial Diagnostic Monitoring) 数字诊断监控 (接受功率,工作温度,工作电压,偏执电流,发射功率) 11 | - DDMI (Digtial Diagnostic Monitoring Interface) 12 | - FET (Field Effect Transistor) 场效应晶体管 13 | - Tri-Stated (T/S) [三态信号]() 14 | - ADC (Analog-to-Digital Converter) 数模转换器 15 | - Trans-Impedance Amplifier 阻抗放大器 16 | - RSSI (Receiver Signal Strength Indicator) 17 | - SMPS (Switched Mode Power Supply) 18 | 19 | 20 | 21 | # SemTech GN28L97 22 | 23 | The GN28L97 is a combined burst mode laser driver and limiting post amplifier designed for 10Gb/s PON fiber optic Transceiver moduels, and features an improved low-cost intergrated APD controller , on-chip DDM and digital set-up. A fully compliant SFF-8472 DDMI solution can be realised by connecting an external 8k or 16k EEPROM. 24 | 25 | ![chip](img/gn28l97.png) 26 | 27 | 28 | 29 | 30 | 31 | ## Start-up Sequence 32 | 33 | ![gn28l97_startup](img/gn28l97_startup_squence.png) 34 | 35 | -------------------------------------------------------------------------------- /Hardware.md: -------------------------------------------------------------------------------- 1 | # Basic Kownladge 2 | 3 | ## 1. Transistor Operating Principle 4 | 5 | 晶体管,它就像开关一样 能够控制电流,断开的时候称之为“状态0”,闭合的时候称之为“状态1”,最重要的是晶体管的体积非常微小,这要感谢半导体科学原理的奇迹。比如纯硅,将其内部能移动的电荷分为 n和p两种,在n种里带负电荷的电子在移动,而在p种里则是带正电荷的电子在移动,这并不是说一个正极一个负极 ,相反二者都是中性的。而晶体管则是将n种放在两边,p种则是在两个n种之间,n种两边都有导线接入。S极和D极之间是沟道(Channel),而开关则是称之为栅极的点被一个氧化层与半导体绝缘. 6 | 7 | - 当没有对栅极(G)施加电压的时候,晶体管形成电子从n种流向p种,导致了耗尽层的形成,既沟道中不会聚集有效的电荷,源极(S)和漏极(S)之间不会有有效电流产生,晶体管处于关闭状态,这就是的p种半导体排斥从n种来的电子,相当于0状态 8 | - 如果想要打开晶体管, 就需要向栅极施加一个小的正电压来吸引电子,沟道中会聚集有效的电荷,形成一条从源极(S)到漏极(D)导通的通道,晶体管处于开启状态,可以把这种状态解释为 1 状态。 9 | 10 | 这样二进制的两个状态就由晶体管的开启和关闭状态表示出来了。 11 | 12 | ![transistor](img/transistor.jpg) 13 | 14 | [how transistor works]() 15 | 16 | (Tips: 所谓 [RAM-Random Access Memory]() 随机读存储器,是和 Sequential Access 相对应,既存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置或所写入的位置无关。相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有关系。) 17 | 18 | 19 | 20 | ## 2. Eye Diagram 眼图 21 | 22 | [眼图 (Eye Diagram )]() 可以显示出数字信号的传输质量,经常用于需要对电子设备、芯片中串行数字信号或者高速数字信号进行测试及验证的场合,归根结底是对数字信号质量的一种快速而又非常直观的观测手段。 23 | 24 | 消费电子中,芯片内部、芯片与芯片之间经常用到高速的信号传输,如果对应的信号质量不佳,将导致设备的不稳定、功能执行错误,甚至故障。眼图反映的是数字信号受物理器件、信道的影响,工程师可以通过眼图,迅速得到待测产品中信号的实测参数,并且可以预判在现场可能发生的问题. 25 | 26 | 眼图中包含了丰富的信息,从眼图上可以观察出码间串扰和噪声的影响,体现了数字信号整体的特征,从而可以估计系统优劣程度,因而眼图分析是高速互连系统信号完整性分析的核心。另外也可以用此图形对接收滤波器的特性加以调整,以减小码间串扰,改善系统的传输性能。 27 | 28 | 29 | 30 | ### 2.1 眼图的形成 31 | 32 | 对于数字信号,其高电平与低电平的变化可以有多种序列组合。以3个bit为例,可以有000-111共8中组合,在时域上将足够多的上述序列按某一个基准点对齐,然后将其波形叠加起来,就形成了眼图。如图1。对于测试仪器而言,首先从待测信号中恢复出信号的时钟信号,然后按照时钟基准来叠加出眼图,最终予以显示 33 | 34 | ![eye_diagram](./img/eye_diagram.png) 35 | 36 | ![eye_diagram2](img/eye_diagram_2.jpg) 37 | 38 | 39 | 40 | ### 2.2 码间串扰 41 | 42 | 眼图 的 “眼睛” 张开的大小反映着码间串扰的强弱。 “眼睛”张的 越大,且眼图越端正,表示码间串扰越小;反之表示码间串扰越大。 43 | 44 | 当存在噪声时,噪声将叠加在信号上,观察到的眼图的线迹会变得模糊不清。若同时存在码间串扰 , “眼睛”将 张开得更小。与无码间串扰时的眼图相比,原来清晰端正的细线迹,变成了比较模糊的带状线,而且不很端正。噪声越大,线迹越宽,越模糊;码间串扰越大,眼图越不端正. 45 | 46 | 例如眼图效果显示传输效率上图要明显优于下图 47 | 48 | ![eye_diagram_test](./img/eye_diagram_test_result.png) 49 | 50 | ![eye_diagram_result2](./img/eye_diagram_test_result2.png) 51 | 52 | 53 | 54 | 55 | 56 | ## 3. Flash Memory 57 | 58 | - Non-Volatile (RAM)Memory 59 | 60 | 非易失性存储器 (Nand Flash , Nor Flash , Hard Disk ,与此相对的易失性存储器, DRAM,SDRAM , DDR SDRAM) 61 | 62 | - SDRAM 63 | 64 | Synchronous Dynamic Random Access Memory (同步动态随机存储器) , 同步是指 Memory 工作需要同步时钟, 第一代为 SDR SDRAM , 第二代为 DDR SDRAM, 第三代 DDR2 SDRAM ,四代, DDR3 SDRAM等. 65 | 66 | - OTP 67 | 68 | 一次性可编程存储器,于此相对于的是可以被多次写入数据的存储器,如 NAND Flash , Hard Disk 69 | 70 | - Ware Leveling 71 | 72 | - SLC (Single Level Cell) 73 | 74 | - MLC (Multi Level Cell) 75 | 76 | 77 | -------------------------------------------------------------------------------- /Hi_Boot.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | ## Based on hi5630 4 | ![hisilicon_arch](img\hi_5630.png) 5 | 6 | ​ hi -boot 是基于 u-boot 裁剪 、修改而来,编译生成目标文件非常小。hi -boot 已经适配了验证 所需的外围芯 ,若产品板外围芯片型号与单板上外围芯片型号不同时,需要适当修改相关硬件驱动代码,由于 Hi 5630 内部封装了 DDR 和一个 GEPHY,主要外围芯片为 FLASH 和外置以太 PHY. ( [HW datasheet](pdf_resource/Hi5630HV110_G.Hn_PLC_datasheet_01.pdf)) 7 | 8 | **Note: DDR 地址空间 0x80000000 ~ 0xFFFFFFFF , Flash 的地址空间 0x00000000 ~ 0x03FFFFFF** 9 | 10 | hi-boot 主要文件结构如下: 11 | 12 | ```shell 13 | . 14 | ├── applets 15 | │   (应用程序,包括启动内核,hiboot 命令选择界面以及 tftp等) 16 | ├── arch 17 | │   (芯片,架构的相关代码, 包括启动代码、CRG等) 18 | ├── board 19 | │   (板级适配代码,包括 Flash 兼容,GPIO复用配置等) 20 | ├── command 21 | │   (所有命令的实现) 22 | ├── drivers 23 | │   (驱动) 24 | ├── include 25 | │   (header) 26 | ├── init 27 | │   (启动代码以及环境变量配置) 28 | ├── lib 29 | │   (基本 lib 实现以及解压实现) 30 | ├── mm 31 | │   (内存管理) 32 | ├── multiupg 33 | │   (组播升级) 34 | ├── net 35 | │   (协议栈) 36 | ├── startcode 37 | │   (第一阶段启动代码) 38 | └── tools 39 | (压缩工具以及 ddr 初始化实现) 40 | ``` 41 | 42 | to make *hi_boot* : 43 | 44 | ```shell 45 | # make package/gateway/sdk/hi_boot/{propare,compile,install} V=99 46 | ``` 47 | 48 | 49 | 50 | 51 | 52 | ## Hi-Boot Startup 53 | 54 | Hi-Boot secction 1 startup located at *hisilicon/sdk/boot/hi-boot-ram/startcode/hi_startcode.c*, for secction 2 located at *hisilicon/sdk/boot/hi-boot-ram/arch/arm/cortexa9/hi_start_hi5630.S* , the whole process as following: (more detail about bootloader by [ubootframework](pdf_resource/ubootframework.pdf) ) 55 | 56 | ![1556275484136](img\hi_startup_process.png) 57 | 58 | 59 | 60 | ## Communicate bewteen Hi-Boot & Linux 61 | 62 | ![img](img/hi_boot_linux_para.png) 63 | 64 | 开机时执行 hi-boot, hi-boot引导完后,控制权就移交给 linux 系统了,但是linux需要一些基本信息,如内存大小,启动方式等,这就涉及到 hi-boot和 linux 通信。而通信格式由linux规定,如*Documentation/arm/Setup* 65 | 66 | 67 | 68 | ![hi_boot_linux](img/hi_boot_linux_2.gif) 69 | 70 | hi-boot会按照上述格式,在内存中划分一块atag参数区域,对该区域进行赋值。当赋值完成后,将cpu初始化成 MMU = off, D-cache = off, I-cache = dont care, r0 = 0, r1 = machine nr, r2 = atags or dtb pointer,跳转到linux代码起始处。[具体如](http://www.cnblogs.com/embedded-tzp/p/4449143.html) 71 | 72 | -------------------------------------------------------------------------------- /Hisi_G.hn.md: -------------------------------------------------------------------------------- 1 | ## Introduction: 2 | 3 | **G.hn** is a specification for [home networking](https://en.wikipedia.org/wiki/Home_networking) with data rates up to 2 Gbit/s and operation over four types of legacy wires: [telephone wiring](https://en.wikipedia.org/wiki/Telephone_wiring), [coaxial cables](https://en.wikipedia.org/wiki/Coaxial_cable), [power lines](https://en.wikipedia.org/wiki/Power_line) and [plastic optical fiber](https://en.wikipedia.org/wiki/Plastic_optical_fiber). A single G.hn semiconductor device is able to network over any of the supported home wire types. 4 | 5 | Some benefits of a multi-wire standard are lower equipment development costs and lower deployment costs for service providers (by allowing customer self-install). 6 | 7 | **Disadvantage**: 8 | 9 | -------------------------------------------------------------------------------- /Hisilicon_CM.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ## Hisilicon CM (Config Management) 6 | 7 | ### CM Introduction 8 | 9 | As the fallowing shows , the CM provide interface to upper protocol such like Web or TR069 to control the system service and even hardware. 10 | 11 | ![cm_structure](img\hisi_cm_structure.png) 12 | 13 | CM could be : 14 | 15 | - Operating business logical 16 | provide API , received and collect configure message from WEB , Tr069 or other module , to forward and convert the format to SAL. 17 | - Store data 18 | - Initialize configuration ,CM loading configurations by sequence and dependency when device startup 19 | 20 | mib configuration loading priority: 21 | 22 | ![cfg_load_priority](./img/cm_cfg_loading_priority.png) 23 | 24 | 25 | 26 | **CM Flow Process** 27 | 28 | ![image](img\hi_cm_process.png) 29 | 30 | 31 | ### CM Architecture 32 | CM Contains two part: 33 | 34 | - **mib** (source at: HSANV200R010C01SPC011/hisilicon/gateway/service/cm/mib/) 35 | 36 | ​ To store the data , loading , initialize and maintenance database in memory. 37 | 38 | - **odl** (source at: HSANV200R010C01SPC011/hisilicon/gateway/service/cm/odl/) 39 | 40 | ​ To operating the data , logical verify ,event callback. 41 | 42 | **(Note: to debug CM while typed "log_voice_cli odl odl_log" to open CM Logs , log file at /tmp/log/message . )** 43 | 44 | ```shell 45 | root@OpenWrt:~# cli /home/cli/log_cmd/log/cfg_set -v module 0xF2040000 dbg 0xff print 0xff sys 1 46 | root@OpenWrt:~# log_voice_cli odl odl_log 47 | root@OpenWrt:~# tail -f -n 100 /tmp/log/messages 48 | ``` 49 | 50 | **Tips: Both CM and Web all use ``/sbin/syslogd`` to store logging message while is based on busybox, default store at /etc/log/message , want display CM debug message stream to console by: ** 51 | 52 | ```shell 53 | root@OpenWrt:~# killall syslogd && /sbin/syslogd -l 7 -O /dev/console && log_voice_log odl odl_log 54 | ``` 55 | 56 | **by display web debug info by:** 57 | 58 | ```shell 59 | root@OpenWrt:~# echo 1 > /config/work/weblog.txt 60 | root@OpenWrt:~# killall syslogd && /sbin/syslogd -l 8 -O /dev/console 61 | ``` 62 | 63 | Files structure as below 64 | 65 | ```shell 66 | hisilicon/gateway/service/cm/ 67 | ├── dhcpSimulation 68 | ├── downloadDiag 69 | ├── ftp 70 | ├── lanhost 71 | ├── mib 72 | ├── mib 73 |    ├── defaultconfig.xml 74 |    ├── include 75 |    ├── Makefile 76 |    └── source 77 | ├── odl 78 |    ├── cli 79 |    ├── include 80 |    ├── Makefile 81 |    └── source 82 | ├── odlapi 83 | ├── pppem 84 | ├── samba 85 | ├── service 86 | ├── stats 87 | ├── storage 88 | ├── timer 89 | └── usbmount 90 | ``` 91 | ![image](img\hi_cm_structure.png) 92 | 93 | 94 | 95 | 96 | 97 | #### GPon Service Interaction 98 | 99 | ![image](img\hi_cm.png) 100 | 101 | #### Web Service Interaction 102 | 103 | ![image](img\hi_cm2.png) 104 | 105 | ### Related API 106 | 107 | source at: HSANV200R010C01SPC011/hisilicon/gateway/service/cm/odl/odlapi/ 108 | 109 | ```c 110 | word32 igdCmConfAdd(uword32 tab_id, uword8 *pucInfo, uword32 len); 111 | word32 igdCmConfDel(uword32 tab_id, uword8 *pucInfo, uword32 len); 112 | word32 igdCmConfSet(uword32 tab_id, uword8 *pucInfo, uword32 len); 113 | word32 igdCmConfGet(uword32 tab_id, uword8 *pucInfo, uword32 len); 114 | word32 igdCmConfGetEntryNum(uword32 tab_id, uword32 *entrynum); 115 | word32 igdCmConfGetAllEntry(uword32 tab_id, uword8 *pucInfo, uword32 len); 116 | word32 igdCmOamCtrl(uword32 ulCmd); 117 | 118 | hi_int32 hi_notifier_create(hi_char8 *pc_name, hi_uint32 ui_data_size); 119 | #define HI_DEF_NCALL(nt_name, type, data); 120 | hi_int32 hi_notifier_call(hi_char8 *pc_name, hi_void *pv_data); 121 | ``` 122 | 123 | 124 | 125 | ### CM Settings 126 | 127 | Example of priority to get default value from attribute table , at first check the ``/work/config/lastgood.xml`` , then ``/usr/local/factory/defaultconfig.xml`` ,final ``mibtbl.c`` 128 | 129 | 130 | ```text 131 | lastgood.xml loading priority: 132 | 133 | cmcc_smart_jt_1_3_1_4_1.xml ==> defaultconfig.xml ==> mibtbl.c 134 | (vendor setting ) (mib setting) (mib) 135 | ``` 136 | 137 | -------------------------------------------------------------------------------- /Linux/CMake.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Introduction 4 | 5 | ![cmake](../img/cmake-logo-16.png)[CMake]() is a tool to manage building of source code. CMake is widely used for the C and C++ languages, 6 | 7 | reference for [cmake-cookbook](https://github.com/dev-cafe/cmake-cookbook/blob/master/README.md) 8 | 9 | ```mermaid 10 | graph LR 11 | A(1.Read CMakeCache.txt) --> B(Read CMakeLists.txt Files) 12 | B --> C(Write CMakeCache.txt) 13 | C --> A 14 | D(2.Generate Makefile) 15 | 16 | ``` 17 | 18 | to run *cmake* 19 | 20 | ```shell 21 | # cmake -P